uni-app一键登录手机真机调试报错 获取手机号失败 请稍后重试

uni-app一键登录手机真机调试报错 获取手机号失败 请稍后重试

问题描述

HBuilder版本4.44,参考 云函数文档 编写云函数后,使用标准基座进行真机调试时(连接本地云函数),出现报错。【连接手机进行的调试,而且电脑端使用的是手机热点】

'use strict';  
exports.main = async (event, context) => {  
  const res = await uniCloud.getPhoneNumber({  
      appid: 'xxx', // 已将这一块替换成一键登录中添加的应用ID  
      provider: 'univerify',  
      access_token: event.access_token,  
      openid: event.openid  
  })  

  console.log(res); // res里包含手机号  
  return {  
    code: 0,  
    message: '获取手机号成功'  
  }  
}

Error: 获取手机号失败,请稍后重试。
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async global.__tempModuleExports.exports.main

官网上有说明:应用开通uni一键登录服务后,需要等审核通过后才能正式使用。在审核期间可以使用HBuilder标准基座真机运行调用一键登录功能,调用时会从你的账户中扣费。

我的应用目前在审核中,也进行了一键登录充值。

开发环境与项目信息

项目创建方式 HBuilder标准基座
HBuilder版本 4.44
云函数文档 uniApp云函数文档

更多关于uni-app一键登录手机真机调试报错 获取手机号失败 请稍后重试的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app一键登录手机真机调试报错 获取手机号失败 请稍后重试的实战教程也可以访问 https://www.itying.com/category-93-b0.html


针对您提到的uni-app一键登录功能在手机真机调试时遇到“获取手机号失败,请稍后重试”的问题,这通常涉及到多个方面的排查,包括但不限于网络请求、权限配置、服务提供商接口状态等。以下是一个简化的排查思路和代码示例,希望能帮助您定位问题。

1. 检查网络请求与权限

首先确保应用已正确配置了网络权限和必要的服务权限。在manifest.json中,确保已添加相关权限配置:

"mp-weixin": { // 以微信小程序为例,其他平台类似
    "requiredPrivateInfos": ["getPhoneNumber"]
},
"app-plus": {
    "distribute": {
        "android": {
            "permissions": [
                "android.permission.INTERNET",
                // 其他可能需要的权限
            ]
        },
        "ios": {
            "NSAppTransportSecurity": {
                "NSAllowsArbitraryLoads": true
            }
        }
    }
}

2. 一键登录按钮绑定事件

在前端页面中,确保一键登录按钮绑定了正确的事件处理函数,并正确调用了服务商提供的接口。以下是一个假设的示例,使用微信小程序的一键登录接口:

<template>
    <view>
        <button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">一键登录</button>
    </view>
</template>

<script>
export default {
    methods: {
        getPhoneNumber(e) {
            if (e.detail.errMsg === "getPhoneNumber:ok") {
                const encryptedData = e.detail.encryptedData;
                const iv = e.detail.iv;
                // 发送encryptedData和iv到服务器进行解密,获取手机号
                uni.request({
                    url: 'https://yourserver.com/decryptPhone',
                    method: 'POST',
                    data: { encryptedData, iv },
                    success: (res) => {
                        if (res.data.success) {
                            console.log('手机号:', res.data.phoneNumber);
                        } else {
                            console.error('获取手机号失败:', res.data.message);
                        }
                    },
                    fail: () => {
                        console.error('请求失败');
                    }
                });
            } else {
                console.error('用户拒绝授权');
            }
        }
    }
}
</script>

3. 服务器端解密逻辑

确保服务器端能够正确解密从前端获取的encryptedDataiv。解密逻辑依赖于您使用的一键登录服务提供商的SDK或API。

总结

以上代码示例提供了一个基础的框架,用于排查和处理一键登录功能中的手机号获取失败问题。重点在于检查权限配置、网络请求的正确性以及服务器端的解密逻辑。如果问题依旧存在,建议查看服务提供商的文档或联系其技术支持获取更具体的帮助。

回到顶部