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的编译模式就可以;
后续修复
临时解决方案
将附件中文件替换至 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 试试
回复 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('获取手机号完成');
// 无论成功或失败都会执行
}
});
确保 success
、fail
和 complete
回调函数都正确实现,并且在回调函数中打印日志,以便调试。
2. 检查权限配置
在快手小程序的 app.json
或 manifest.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);
}
});
}
}
});