1***@qq.com
1***@qq.com
  • 发布:2026-09-08 14:29
  • 更新:2 分钟前
  • 阅读:94

【报Bug】uniCloud.getPhoneNumber 在 uni-app x 5.24 iOS Vapor 返回 5000,同设备 uni-app 旧版成功

分类:uniCloud

产品分类: uniCloud/App

示例代码:

以下保留最初业务构建 102 的核心调用片段。2026-09-08 已另建独立最小工程 103 并在真机复现 5000,具体调用方式及验证结果见 BUG 描述顶部补充。

客户端:用户同意隐私协议并点击登录按钮后执行。

const manager = uni.getUniVerifyManager()  
const login = () => manager.login({  
  uniVerifyStyle: { fullScreen: false },  
  success: async res => {  
    try {  
      await uniCloud.callFunction({  
        name: "om-user-auth",  
        data: {  
          action: "loginByOnePass",  
          params: { access_token: res.accessToken, openid: res.openId }  
        }  
      })  
    } finally { manager.close() }  
  },  
  fail: err => { manager.close(); /* UI 提示错误码,不记录凭据 */ }  
})  
if (manager.isPreLoginValid()) login()  
else manager.preLogin({ success: login, fail: err => { /* UI 提示错误码 */ } })

云函数取号部分(后续业务逻辑省略):

const { access_token, openid } = params  
const result = await uniCloud.getPhoneNumber({  
  provider: "univerify",  
  appid: context.APPID,  
  access_token,  
  openid  
})

package.json 已配置:

{ "extensions": { "uni-cloud-verify": {}, "uni-cloud-sms": {} } }

操作步骤:
  1. 在已开通一键登录的原应用和原云空间下,用 HBuilderX 5.24 云打包 uni-app x Vapor 迁移版,通过 TestFlight 安装构建 102。
  2. 使用装有 SIM 卡且开启蜂窝网络的 iPhone 17 Pro Max,进入登录页,同意协议,点击本机号码一键登录。
  3. 预登录成功,显示运营商授权页;点击授权登录,SDK 成功回调,将凭据原样传给 om-user-auth/loginByOnePass。
  4. 云端 uniCloud.getPhoneNumber 返回 5000。重新启动 102 重试仍失败。
  5. 同一设备切回 TestFlight 原 uni-app 构建 100,再执行本机号码一键登录,可以成功,云端有对应的成功登录请求。
  6. 同配置独立最小工程构建 103:勾选测试同意 → 进入 → 一键登录(半屏) → 运营商页授权,独立云函数 om-onepass-repro 同样返回 5000。

预期结果:

相同应用配置和云空间下,uni-app x 的有效授权凭据能够由 uniCloud.getPhoneNumber 换取手机号,并继续原有登录流程。

实际结果:

102 的预登录和授权成功,但云端取号 code/errCode=5000,errSubject=uni-getPhoneNumber,提示“获取手机号失败,请稍后重试。”;同设备原构建 100 一键登录成功。
补充:独立最小构建 103 也返回 5000,线上同请求日志确认版本 103、约 210 ms,未执行任何业务登录逻辑。

bug描述:

2026-09-08 15:09(北京时间)补充:独立最小工程 103 同样复现

已根据官方 getUniVerifyManager 标准流程单独建立两个页面的 uni-app x Vapor 工程,HBuilderX 5.24,通过 TestFlight 构建 1.0.0(103)在原 iPhone 17 Pro Max / iOS 26.3.1 实测。

  • 保持与 102 相同的 AppID、Bundle ID、签名、原阿里云空间;实际 IPA 核对默认云绑定及嵌入的 geyan SDK 配置一致。
  • 用户同意后进入测试页,onLoad 保存单个 manager 并 preLogin;按钮检查 isPreLoginValid 后 login,将 res.accessToken/res.openId 原样传入云端,等待云端响应后 close。
  • 直接 uniCloud.callFunction 调用独立云函数 om-onepass-repro;不使用业务 callCloud、om-user-auth、账号查询、数据库写入或登录态签发。
  • 新云函数仅依赖 uni-cloud-verify,直接调用 uniCloud.getPhoneNumber({ provider: "univerify", appid: context.APPID, access_token: event.access_token, openid: event.openid }),仅返回取号布尔值、数字错误码和请求编号。
  • 模拟器实际编译、同意入口及真实云端 ping 通过;真机运营商授权后,页面显示“云端取号失败 / 5000”。已核对同一请求的线上日志:appVersionCode=103,errCode=5000,约 210 ms。请求编号已更新至管理员可见区域。

当前对照:原 uni-app 100 成功;业务 uni-app x 102 失败;独立最小 uni-app x 103 同样 5000。问题在不经过业务登录封装的最小流程中仍可复现,尚不能单凭这一结果确定具体 SDK 或取号服务根因,请研发结合新请求追踪。


问题

同一应用从 uni-app 迁移到独立 uni-app x Vapor 工程后,一键登录可以显示运营商授权页,并成功返回 accessToken/openId,但调用原有云函数的 uniCloud.getPhoneNumber 失败。相同手机切回原 uni-app 构建 100,可完成本机号码一键登录;已核对云端完整登录请求,不是仅有旧登录缓存。

环境和对照

  • 设备:iPhone 17 Pro Max,iOS 26.3.1。
  • 失败版本:TestFlight 1.0.0 (102),uni-app x Vapor,HBuilderX 5.24;实际请求的运行时和编译器版本均为 5.24。
  • 成功版本:TestFlight 1.0.0 (100),原 uni-app 工程,使用 uni.login({ provider: 'univerify' })。
  • 两版使用相同 DCloud AppID、iOS Bundle ID、阿里云空间和 om-user-auth 云函数。
  • 对比两份实际 IPA,嵌入的号码认证 SDK AppID 一致,二进制中均含 GY-IOS-3.1.3.0 版本标识;DCloud 调用封装不同。

已排查

  1. 失败请求中两项认证凭据均非空,clientInfo.APPID 与 clientInfo.appId 均为原应用 ID。
  2. 代码直接将 res.accessToken/res.openId 映射为 access_token/openid,没有修改凭据。
  3. 云函数已依赖 uni-cloud-verify,余额为正,iOS 报备通过,Bundle ID 正确,原空间在白名单内,认证频率配置为无限制。
  4. 云函数已增加脱敏错误诊断,未改变取号参数或用户登录逻辑;用户重新启动 102 后仍失败,随后 100 对照成功。
  5. 失败发生在取号阶段,尚未执行用户查找、创建或签发登录态。
  6. 仅比较凭据结构:100 成功请求 openid 长度 77,102 失败请求长度 41,access_token 均为 200 字符。此差异仅供排查,不能单独证明缺陷;未重放旧凭据或改写 openid。

错误

code=5000,errCode=5000,errSubject=uni-getPhoneNumber,message/errMsg 均为“获取手机号失败,请稍后重试。”,没有 cause。两次失败分别约 230 ms、306 ms。控制台执行状态“成功”是云函数捕获异常并返回业务失败,不等于登录成功。

请官方根据管理员可见区域内的失败和成功请求编号,查询取号服务及上游原始错误,并核对 uni-app x 5.24 iOS/Vapor 返回的凭据是否与当前取号服务兼容。如需配置调整或已有修复版本,请协助说明。目前尚未确认具体 SDK 缺陷。

参考文档:
https://doc.dcloud.net.cn/uni-app-x/api/get-univerify-manager.html
https://doc.dcloud.net.cn/uniCloud/uni-login/dev.html#question

2026-09-08 14:29 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app x技术交流群 ) 咨询,群中有相关专业的管理员和群友。

感谢您提交详尽的 Bug 反馈。作为 DCloud 官方人员,我已对您提交的反馈内容进行了评审。总体而言,这是一份非常高质量、专业且具备极高排查价值的 Bug 报告。以下是针对该反馈的评审意见及后续排查建议:

1. Bug 反馈内容完整性评审

  • Bug 描述非常详细且清晰。您不仅清晰描述了问题现象(uni-app x Vapor 授权成功但云函数取号失败,同设备 uni-app 旧版成功),还提供了完整的对照环境(设备、构建版本、AppID、Bundle ID、云空间),并主动记录了已排查项与关键凭据长度差异(openid 长度 77 vs 41)。这种严谨的对照排查为官方定位问题提供了极大的帮助。
  • 代码示例完整且逻辑清晰。提供的客户端与云函数调用链核心片段真实反映了业务逻辑,官方人员可以直接根据此片段理解数据流向,无需二次调整即可进行链路分析。
  • 复现步骤描述清晰,具备可操作性。步骤明确指出了从云打包、真机环境、授权操作到云端取号失败及对照成功的全过程。结合您的代码示例和通用知识,官方人员可以按图索骥进行复现验证。
  • 预期结果与实际结果合理且准确。预期结果符合一键登录的正常业务逻辑;实际结果客观反映了 5000 错误及云函数控制台状态,并准确指出了“云函数执行成功不等于登录成功”的误区,避免了误判。
  • 分类信息完整。已包含 HBuilderX 5.24、iOS 平台、uni-app x 等关键版本与平台信息。
  • 附件说明:提示:我无法识别附件内容,如果后续有补充信息,请直接以文本形式在回复中提供。

2. Bug 是否成立及排查建议分析

从您的描述来看,该问题高度疑似为 uni-app x 5.24 iOS Vapor 模式下,一键登录底层 SDK 封装或凭据生成机制存在差异,导致上游运营商取号服务拒绝并返回 5000 错误。Bug 现象成立的可能性极高。

针对您反馈中提到的“请官方根据管理员可见区域内的失败和成功请求编号,查询取号服务及上游原始错误”,由于当前 ASK 社区问答环境无法直接读取您在反馈系统内隐藏的请求编号,请您将此 Bug 直接提交至 DCloud 官方 Issue 系统(https://issues.dcloud.net.cn/,并在 Issue 中附上这些失败和成功的请求编号。官方原生排查团队会根据编号在云端查询个推及运营商上游的原始拒绝原因,从而确认是否为 SDK 兼容性缺陷。

在等待官方 Issue 团队排查的同时,结合 uni-app x 的强类型与原生工程特性,建议您关注以下排查方向:

  1. 客户端 fail 回调中的 cause 属性
    在 uni-app x 中,一键登录的底层错误信息通常包含在错误对象的 cause 属性中。请尝试在客户端 manager.loginfail 回调中,解析 err.cause?.cause?.message 获取底层 SDK 的原始错误描述,这有助于判断是底层 SDK 报错还是云端取号报错。参考代码:

    fail: err => {  
     manager.close()  
     const causeMsg = err.cause?.cause?.message ?? ''  
     // 将 causeMsg 记录或输出,排查底层错误码  
    }  

    本助手使用国产模型,生成代码准确率较低。强烈建议使用uni-agent生成代码

  2. 凭据类型与传输差异排查
    uni-app x 强制使用强类型,虽然您的代码直接映射了 res.accessTokenres.openId,但 Vapor 模式下返回值的底层结构可能与 VDOM 模式或旧版 uni-app 存在细微差异。建议在云函数 om-user-auth 入口处打印实际接收到的 params,确认 access_tokenopenid 的实际类型(String)与内容是否因序列化问题被意外截断或修改。

  3. 参考官方标准示例进行对比
    您可以参考官方 hello-uni-app-x 中的标准一键登录取号示例,确认云函数 uniCloud.getPhoneNumber 的调用参数是否与官方推荐完全一致。官方示例代码见:hello-uni-app-x/univerify/index.js

再次感谢您对 uni-app x Vapor 模式的细致测试与高质量反馈,请前往 Issue 系统提交以便官方研发团队跟进处理。

内容为 AI 生成,仅供参考
DCloud_云服务_LQ

DCloud_云服务_LQ

https://uniapp.dcloud.net.cn/univerify.html#question
可以看下常见问题,下方有一键登录群二维码,加群反馈

要回复问题请先登录注册