uni-app ipad下sign in with apple出现fail provider not find

uni-app ipad下sign in with apple出现fail provider not find

信息类别 详情
产品分类 uniapp/App
PC开发环境 Mac
PC版本号 macOS11.3.1
HBuilderX 正式版
HBuilderX版本 3.1.18
手机系统 iOS
手机版本号 IOS 14
手机厂商 苹果
手机机型 ipad
页面类型 vue
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

uni.getProvider({
service: 'oauth',
success: function (res){
console.log(res)
}
})

预期结果:

{
"errMsg": "getProvider:ok",
"service": "oauth",
"provider": ["apple"]
}

实际结果:

{
"errMsg": "getProvider:ok",
"service": "oauth",
"provider": ["weixin"]
}

bug描述:

(云打包)ipad下苹果sign in with apple一键登录失败 , 因此没法通过应用审核 , 借了同事的ipad , 测试发现

uni.getProvider({  
     service: 'oauth',  
     success: function (res){  
      console.log(res)  
     }  
    })

打印出来,竟然是

{  
 "errMsg": "getProvider:ok",  
 "service": "oauth",  
 "provider": ["weixin"]  
}

iphone下是正常的, 但是在ipad的下面uni.getProvider竟然会打印出weixin 。 社区里也搜到同样的问题 , 但是没人回答这么严重的bug


更多关于uni-app ipad下sign in with apple出现fail provider not find的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在iPad的下"provider": [“weixin”] , 但是iPhone下是"provider": [“weixin”, “apple”]

更多关于uni-app ipad下sign in with apple出现fail provider not find的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在 uni-app 中,uni.getProvider 用于检测当前设备支持的登录服务提供商。根据你的描述,iPad 设备上返回了 ["weixin"] 而非预期的 ["apple"],这通常与 iOS 设备类型和 uni-app 的 OAuth 提供商识别逻辑有关。

问题分析:

  1. 设备类型识别差异:uni-app 的 OAuth 服务提供商检测可能基于设备型号或系统参数。iPad 虽然运行 iOS,但部分逻辑可能将其识别为“非 iPhone 设备”,导致 Apple 登录提供商未被正确识别。
  2. 配置或兼容性问题:Apple 登录(Sign in with Apple)要求应用配置特定的 Capabilities(如 Sign in with Apple 能力),并在 Apple 开发者后台启用。若配置不完整或打包时未适配 iPad,可能导致提供商列表异常。
  3. uni-app 底层实现限制:uni-app 的 OAuth 模块在 iOS 端依赖原生 SDK,可能对 iPad 的设备特性支持不完善,尤其是在识别登录提供商时出现偏差。

解决建议:

  • 检查项目配置:确保在 HBuilderX 中正确勾选了 Apple 登录能力(manifest.json → App SDK 配置 → OAuth 登录 → 勾选“Apple”),并确认 Apple 开发者后台已为 App ID 启用 Sign in with Apple 功能。
  • 测试设备条件:Apple 登录要求设备系统为 iOS 13+ 且装有 Apple ID。确认测试 iPad 系统版本符合要求,且已登录有效的 Apple ID。
  • 临时处理方案:若急需通过审核,可在代码中主动判断设备类型。若为 iPad,直接调用 Apple 登录 API(如 uni.login 指定 provider 为 apple),跳过 getProvider 检测。示例:
    // 根据设备类型强制使用 Apple 登录(需自行判断 iPad)
    uni.login({
      provider: 'apple',
      success: (res) => { /* 处理登录结果 */ }
    });
回到顶部