uni-app 手机一键登录 uniCloud.getPhoneNumber 部分机型和手机不能调取成功 云函数接收不到参数
uni-app 手机一键登录 uniCloud.getPhoneNumber 部分机型和手机不能调取成功 云函数接收不到参数
产品分类
- uniapp/App
PC开发环境操作系统
- Windows
PC开发环境操作系统版本号
- win10企业版LTSC 1809
HBuilderX类型
- 正式
HBuilderX版本号
- 3.2.9
手机系统
- Android
手机系统版本号
- Android 9.0
手机厂商
- 华为
手机机型
- nova 2s
页面类型
- vue
打包方式
- 云端
项目创建方式
- HBuilderX
示例代码
'use strict';
// 云函数
exports.main = async function (event){
const res = await uniCloud.getPhoneNumber({
appid: '__UNI__3D620F8', // 替换成自己开通一键登录的应用的DCloud appid
provider: 'univerify',
apiKey: '', // 在开发者中心开通服务并获取apiKey
apiSecret: '', // 在开发者中心开通服务并获取apiSecret
access_token: event.access_token,
openid: event.openid
})
// 执行入库等操作,正常情况下不要把完整手机号返回给前端
return res
}
uni.login({
provider: 'univerify',
univerifyStyle: {
fullScreen: true,
icon: {
path: "static/img/sys/0409/192.png"
},
authButton: {
normalColor: "#005792",
},
otherLoginButton: {
visible: false
},
buttons: { // 自定义页面下方按钮仅全屏模式生效(3.1.14+ 版本支持)
iconWidth: "80px", // 图标宽度(高度等比例缩放) 默认值:45px
list: [{
provider: "other",
iconPath: "/static/img/other-login.png" // 图标路径仅支持本地图片
}, ]
}
},
success: (res) => {
let {
access_token,
openid
} = res.authResult
uniCloud.callFunction({
name: 'localPhoneNumber', // 你的云函数名称
data: {
access_token: access_token, // 客户端一键登录接口返回的access_token
openid: openid // 客户端一键登录接口返回的openid
}
}).then(result => {
this.login(result.result.phoneNumber)
}).catch(err => {
uni.closeAuthView()
})
},
fail: (fail) => {
if (fail.code == 30008 && fail.provider == 'other') {
uni.closeAuthView()
}
}
})
操作步骤
- 随机性
预期结果
- 能正常获取参数和调用成功
实际结果
- 部分机型 有时能云函数能获取参数 有时不能 调用失败
bug描述
- 手机一键登录 uniCloud.getPhoneNumber 部分机型 和手机不能调取成功 云函数接收不到参数 导致一键登录失败

更多关于uni-app 手机一键登录 uniCloud.getPhoneNumber 部分机型和手机不能调取成功 云函数接收不到参数的实战教程也可以访问 https://www.itying.com/category-93-b0.html
失败的时候的错误信息错误码发一下
更多关于uni-app 手机一键登录 uniCloud.getPhoneNumber 部分机型和手机不能调取成功 云函数接收不到参数的实战教程也可以访问 https://www.itying.com/category-93-b0.html
就是那个一键登录的云函数,获取不到有时候获取不到传入的参数,偶发性的,国庆后我再去看下,发您。
真机调试 连接的云端函数 调用云函数报错 【连接本地调试服务失败,请检查客户端是否和主机在同一局域网下】
真机调试 连接的云端函数 调用云函数报错 【连接本地调试服务失败,请检查客户端是否和主机在同一局域网下】
【复现步骤】先取消移动数据连接 然后再开启 再调用一键登录 偶发报这个错误。
中间没有关闭无线?你用的HBuilderX版本多少?
回复 DCloud_uniCloud_WYQ: HBuilderX版本:3.2.9.20210927 中间没有关闭无线
回复 5***@qq.com: 我试试能不能复现
问题分析:
根据您提供的代码和描述,问题可能出现在以下几个方面:
- 参数传递问题:云函数
uniCloud.getPhoneNumber需要access_token和openid参数,但部分机型或网络环境下,这些参数可能未正确传递到云函数。 - 网络延迟或超时:部分机型或网络环境较差时,可能导致云函数调用超时或参数丢失。
- 一键登录服务兼容性:不同机型对一键登录服务的支持可能存在差异,尤其是较老的机型(如华为 nova 2s,Android 9.0)。
解决方案:
-
检查参数传递:
- 在云函数中添加日志,确认
event.access_token和event.openid是否正常接收。例如:console.log('event:', event); // 打印完整 event 对象 - 在前端调用云函数时,确保
access_token和openid已正确赋值:data: { access_token: access_token, openid: openid }
- 在云函数中添加日志,确认
-
优化网络请求:
- 在云函数调用时增加超时处理,例如使用
Promise.race设置超时限制。 - 检查网络环境,确保设备网络稳定。
- 在云函数调用时增加超时处理,例如使用
-
机型兼容性处理:
- 部分老旧机型可能对一键登录服务支持不完善,建议在调用前检查机型或系统版本,并给出降级方案(如切换为短信验证码登录)。
- 更新
HBuilderX到最新版本(当前为 3.2.9,可检查是否有新版本修复相关兼容性问题)。
-
云函数配置检查:
- 确认
apiKey和apiSecret已正确配置(示例代码中为空,需替换为实际值)。 - 检查一键登录服务是否已在 DCloud 开发者中心开通,并确保应用 AppID 正确。
- 确认
-
错误处理增强:
- 在前端和云函数中添加更详细的错误捕获和日志记录,便于定位问题。例如:
uniCloud.callFunction({ name: 'localPhoneNumber', data: { access_token, openid } }).then(result => { // 处理成功 }).catch(err => { console.error('云函数调用失败:', err); uni.closeAuthView(); });
- 在前端和云函数中添加更详细的错误捕获和日志记录,便于定位问题。例如:

