uni-app 快手小程序授权手机号无回调信息

uni-app 快手小程序授权手机号无回调信息

开发环境 版本号 项目创建方式
Windows 10 HBuilderX
### 示例代码:


```html
<template>  
    <view class="uni-container">  
        <button type="default" open-type="getPhoneNumber" @getphonenumber="getInfo" style="margin-top: 50px;">获取手机号</button>  
    </view>  
</template>  
<script>  
    export default {  
        mounted(){  
            uni.login({  
                success(e){  
                    console.log('前置登录,否则无法获取手机号',e)  
                }  
            })  
        },  
        methods:{  
            getInfo(e){  
                console.log('获取手机号的回调:',e)  
            }  
        }   
    }  
</script>

操作步骤:

  • 点击按钮获取手机号,能拉起授权弹框,但是无回调信息;

预期结果:

  • 有回调,能获取到手机号所需的加密信息;

实际结果:

  • 无成功回调

### bug描述:


`快手小程序`,不是字节跳动的,只是没有快手小程序选项!

使用vue3编译模式无法获取`@getphonenumber`的回调信息,使用vue2的编译模式就可以;
26 回复

后续修复
临时解决方案 将附件中文件替换至 hx 根目录\plugins\uniapp-cli-vite\node_modules[@dcloudio](/user/dcloudio)\uni-mp-kuaishou\dist。重新运行即可


ok,问题我先看下

草率了没有开发者账号

没有快手小程序开发者账号?也注册不了吗?

注册是能注册,但是需要企业认证 所以没法验证问题

打印下错误信息看看

意思就是如果拒绝授权会有错误信息,但是同意授权时就完全无任何打印,也不触发回调方法

我也碰到了一样的问题,请问解决了吗?

我是做重构计划,产品没有上线;这边也没有官方给我回复;

我也遇到了 啥时候能解决啊

提供下具体错误信息

回复 DCloud_UNI_Anne: 看下面那条评论 谢谢

就是没回调
<button type=“default” open-type=“getPhoneNumber” @getphonenumber=“onGetPhoneNumber”>获取手机号</button>
这段代码在vue2版本的uniapp是有回调
但是在vue3是没有回调的,接口返回来是有数据的,就是没回调,不走onGetPhoneNumber方法

相关版本 vue3 hbuilderx:3.5.3.20220729 快手:1.14.1-2a10e30
比较急 期望解决

已反馈给相关人员排查

alpha 3.6.1 已修复

首先感谢您的反馈,这个bug我重新下了alpha 3.6.1来测试 1.在hbuilderx创建的vue3项目目前确实可以拿到 2.但是使用vite+vue3的我还是拿不到 ,npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project,你可以用以下命令创建项目查看是否可以正常获取,我这边还是没相应的回调

回复 5***@qq.com: 什么报错?节点添加 data-eventsync 试试

回复 DCloud_UNI_LXH: 没报错,就是没回调,加了data-eventsync也是没反应,是不是用的vite的工程编译出去还是有问题? 因为我重新用hbuilder创建的vue3一样的代码其实可以拿得到回调

回复 5***@qq.com: cli 和 hx 分别是版本的?可以查看一下两个编译后的文件哪里不一致

回复 DCloud_UNI_LXH: 麻烦看下下方哈

回复 DCloud_UNI_LXH: 1.hx:3.6.1.20220907-alpha 2.vite:2.9.14 3.vue3 hx模版正常编译:<button type="default" open-type="getPhoneNumber" bindgetphonenumber="__e" data-e-o="{{b}}">获取手机号vue3</button>

vue3 vite不正常编译:<button type="default" open-type="getPhoneNumber" bindgetphonenumber="{{d}}" data-eventsync>获取手机号vue31</button> return (_ctx, _cache) => { return { a: common_vendor.o(getCode), b: common_vendor.t(code.value), c: common_vendor.o(copyCode), d: common_vendor.o(onGetPhoneNumber) }; };

升级你的 cli 版本

回复 DCloud_UNI_LXH: 升级vite版本?我最多只能去到2.9.15 去到3x以上会就回报错_vite@3.1.0@vite/dist/node-cjs/publicUtils.cjs:64 10:56:02.543 const cache = options.cache ?? new SplitVendorChunkCache(); 10:56:02.543 ^ 10:56:02.550 SyntaxError: Unexpected token ‘?’

回复 5***@qq.com: 升级 @dcloud 包的版本,升级到 3.6.1

回复 DCloud_UNI_LXH: 感谢 我用npx @dcloudio/uvm alpha更新完后可以了

uni-app 中开发快手小程序时,授权手机号无回调信息的问题可能由多种原因引起。以下是一些可能的原因及解决方案:

1. 检查代码逻辑

确保你在调用授权手机号的 API 时,正确地处理了回调函数。以下是一个示例代码:

uni.getPhoneNumber({
  success(res) {
    console.log('获取手机号成功', res);
    // 处理获取到的手机号
  },
  fail(err) {
    console.error('获取手机号失败', err);
    // 处理错误
  },
  complete() {
    console.log('获取手机号完成');
    // 无论成功或失败都会执行
  }
});

确保 successfailcomplete 回调函数都正确实现,并且在回调函数中打印日志,以便调试。

2. 检查权限配置

在快手小程序的 app.jsonmanifest.json 中,确保已经正确配置了获取手机号的权限:

{
  "permission": {
    "scope.userPhoneNumber": {
      "desc": "获取用户手机号"
    }
  }
}

如果没有正确配置权限,可能会导致授权失败或没有回调信息。

3. 检查快手小程序版本

确保你使用的 uni-app 版本和快手小程序 SDK 版本是最新的。旧版本可能存在一些已知的 bug 或兼容性问题。

你可以通过以下命令更新 uni-app

npm update [@dcloudio](/user/dcloudio)/uni-app

4. 检查网络请求

如果获取手机号需要通过网络请求到服务器,确保网络请求是正常的。你可以在回调函数中打印网络请求的响应,检查是否有错误信息。

5. 调试工具

使用快手小程序的开发者工具进行调试,查看控制台是否有错误信息或警告。开发者工具可以帮助你更好地定位问题。

6. 用户未授权

如果用户未授权获取手机号,可能会导致没有回调信息。你可以在调用 uni.getPhoneNumber 之前,先检查用户是否已经授权:

uni.getSetting({
  success(res) {
    if (res.authSetting['scope.userPhoneNumber']) {
      // 用户已经授权,可以获取手机号
      uni.getPhoneNumber({
        success(res) {
          console.log('获取手机号成功', res);
        },
        fail(err) {
          console.error('获取手机号失败', err);
        }
      });
    } else {
      // 用户未授权,需要引导用户授权
      uni.authorize({
        scope: 'scope.userPhoneNumber',
        success() {
          console.log('用户授权成功');
        },
        fail(err) {
          console.error('用户授权失败', err);
        }
      });
    }
  }
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!