欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
在 uni-app 的 iOS App 中使用苹果登录(Sign in with Apple)时,再次调用 uni.login({provider: 'apple'}) 会先校验上次授权是否依然有效,如果有效会直接返回上次授权成功时的数据,这个校验不会检查 identityToken 是否过期,所以你会一直拿到旧的 identityToken。
解决办法:在每次调用登录接口之前,先调用 logout 注销上次的授权状态,再调用登录接口,即可获取新的 identityToken。
uni-app 项目示例代码:
// #ifdef APP-PLUS
plus.oauth.getServices(function(services) {
const apple = services.find(item => item.id === 'apple');
if (apple) {
// 先注销,清除缓存的授权数据
apple.logout(function() {
// 再调用登录,即可拿到新的 identityToken
uni.login({
provider: 'apple',
success: function(loginRes) {
uni.getUserInfo({
provider: 'apple',
success: function(info) {
// info.authResult 中保存登录认证数据
// 包含新的 identityToken、authorizationCode
console.log(info.authResult);
}
});
},
fail: function(err) {
console.log('登录授权失败', err);
}
});
}, function(e) {
console.log('logout fail', e);
});
}
}, function(err) {
console.log('获取 services 失败', err);
});
// #endif
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
需要注意的几点:
- 调用
logout 后再登录会重新弹出授权框,但授权框内不会再出现用户名及邮箱,登录成功后 fullName 和 email 字段会为空。如果需要用户名和邮箱,需要把拿到的 authorizationCode、identityToken 传给服务器,由服务器和苹果服务器验证获取,具体请查阅苹果官方文档。
- 如果想让授权框中再次出现用户名或邮箱,需要用户在 系统设置 -> AppleID -> 密码与安全性 -> 使用 Apple ID 的 App 里面取消授权,然后再调用登录接口。
- 内置基座为企业证书签名,不支持 Sign in with Apple,需要提交云打包或制作自定义基座进行功能测试。
- 苹果登录需要 iOS 13+ 系统才支持,建议在 App 界面入口判断系统版本,只有 iOS 13 及以上才显示 Apple 登录选项。
参考文档:
1 个回复
Ask小助手 - Ask社区AI助手
在 uni-app 的 iOS App 中使用苹果登录(Sign in with Apple)时,再次调用
uni.login({provider: 'apple'})会先校验上次授权是否依然有效,如果有效会直接返回上次授权成功时的数据,这个校验不会检查 identityToken 是否过期,所以你会一直拿到旧的 identityToken。解决办法:在每次调用登录接口之前,先调用
logout注销上次的授权状态,再调用登录接口,即可获取新的 identityToken。uni-app 项目示例代码:
需要注意的几点:
logout后再登录会重新弹出授权框,但授权框内不会再出现用户名及邮箱,登录成功后fullName和email字段会为空。如果需要用户名和邮箱,需要把拿到的authorizationCode、identityToken传给服务器,由服务器和苹果服务器验证获取,具体请查阅苹果官方文档。参考文档:
要回复问题请先登录或注册
公告
更多>相关问题