uni-app iPad使用 Sign in with Apple 功能无反应
uni-app iPad使用 Sign in with Apple 功能无反应
项目信息 | 详细信息 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Mac |
PC开发环境版本 | 14.6.1 |
HBuilderX类型 | 正式 |
HBuilderX版本 | 4.24 |
手机系统 | iOS |
手机系统版本 | iOS 17 |
手机厂商 | 苹果 |
手机机型 | iPad Air (第5代) |
页面类型 | nvue |
Vue版本 | vue3 |
打包方式 | 离线 |
项目创建方式 | HBuilderX |
操作步骤:
- 只要在iPad上使用Sign in with Apple都会无法使用
预期结果:
- iPad上使用 Sign in with Apple 功能正常
实际结果:
- iPad上使用 Sign in with Apple 功能失败
bug描述:
苹果审核反馈:
- 该应用程序存在一个或多个会对 App Store 用户产生负面影响的错误。
- 错误描述:在我们点击 Continue with Apple 后没有产生任何操作。
这个按钮实现的就是 “Sign in with Apple” 的功能,iPhone真机上测试,Sign in with Apple都是成功的,iPad没有测试过,苹果审核就有问题;
- 是否是因为在XCode上设置只适配iPhone(因为增加适配iPad,需要上传iPad的产品图,还要做界面适配),如果是因为这个原因,请帮忙在文档中描述一下,好让未来不再有更多的人遇到一样的问题。
楼主解决了吗,我也遇到这个问题
Guideline 2.1 - Performance - App Completeness
Issue Description
The app exhibited one or more bugs that would negatively impact App Store users.
Bug description: The app did not respond after we entered the credentials for Sign In with Apple.
Review device details:
Device type: iPad Air (5th generation)
OS version: iPadOS 18.0.1
在处理uni-app在iPad上使用“Sign in with Apple”功能无反应的问题时,我们需要确保几个关键点:Apple ID的登录授权配置正确、前端代码能够正确触发登录流程、以及后端服务能够正确处理Apple的登录认证。以下是一个简化的代码案例,用于展示如何在uni-app中实现“Sign in with Apple”功能,并处理可能的错误。
前端代码(uni-app)
首先,确保你的uni-app项目已经集成了Apple的登录SDK(虽然uni-app本身不直接支持Apple登录,但你可以通过原生插件或web方式间接实现)。这里我们假设你使用的是web方式,通过Apple的JavaScript API来实现。
// 在需要触发登录的页面或组件中
methods: {
async signInWithApple() {
if (!window.AppleID) {
console.error('AppleID API is not available');
return;
}
try {
const authorizationResponse = await AppleID.auth.init({
clientId: 'com.yourapp.id', // 替换为你的Apple开发者账号中的Client ID
scope: 'name email',
redirectURI: 'https://yourapp.com/auth/apple/callback' // 替换为你的回调URL
});
if (authorizationResponse.user) {
// 用户已登录,获取用户信息
const userInfo = authorizationResponse.user;
console.log('Apple User Info:', userInfo);
// 发送用户信息到后端进行进一步处理
} else {
// 用户未登录,重定向到Apple登录页面
window.location = authorizationResponse.authorizationURL;
}
} catch (error) {
console.error('AppleID login error:', error);
}
}
}
后端代码(示例,假设使用Node.js)
在后端,你需要接收来自Apple的登录回调,并验证JWT(JSON Web Token)。
const jwt = require('jsonwebtoken');
const fetch = require('node-fetch');
// Apple的公钥URL
const publicKeyUrl = 'https://appleid.apple.com/auth/keys';
async function verifyAppleToken(token) {
const publicKeys = await fetch(publicKeyUrl).then(res => res.json());
const kid = jwt.decode(token, { complete: true }).header.kid;
const publicKey = publicKeys.keys.find(key => key.kid === kid).x5w;
try {
const decoded = jwt.verify(token, publicKey, { algorithms: ['ES256'] });
console.log('Decoded Apple Token:', decoded);
// 根据解码后的信息处理用户登录逻辑
} catch (error) {
console.error('Failed to verify Apple token:', error);
}
}
// 在回调路由中调用verifyAppleToken函数
// app.post('/auth/apple/callback', (req, res) => { ... });
注意
- 替换示例代码中的
clientId
、redirectURI
等参数为你的实际值。 - 确保你的应用已在Apple开发者网站正确配置了Sign in with Apple功能。
- 前后端代码需根据具体情况进行调整,特别是错误处理和用户信息存储部分。
以上代码提供了一个基本的实现框架,帮助你解决uni-app在iPad上使用“Sign in with Apple”功能无反应的问题。