Expo AppleAuthentication模拟器输入正确密码无响应,真机正常求助
我的后端采用Supabase,按照官方建议使用Expo原生Apple登录方案。我遵循Expo官方原生登录文档(文档标注支持模拟器)操作,还参考了Supabase实现视频,通过EAS完成安装与构建,做了以下配置后在模拟器运行:
- 在Supabase的Apple认证服务中配置授权客户端ID:
host.exp.Exponent,com.myapp.production,com.myapp.dev,与EAS构建的引用完全匹配。 - 在AppStore Connect的
Certificates, Identifiers & Profiles板块,为上述所有Bundle客户端ID启用Sign in with Apple功能。 - 按要求更新了app.config配置文件。
随后我加入Expo提供的示例代码:
const signInWithApple = async () => { try { console.log('AppleAuthentication.signInAsync'); // 这行能打印到终端 const credential = await AppleAuthentication.signInAsync({ requestedScopes: [ AppleAuthentication.AppleAuthenticationScope.FULL_NAME, AppleAuthentication.AppleAuthenticationScope.EMAIL, ], }); console.log({ credential }); // 这行无任何输出 // 通过Supabase Auth登录 if (credential.identityToken) { const { error, data: { user }, } = await supabase.auth.signInWithIdToken({ provider: 'apple', token: credential.identityToken, }); if (!error && user) { console.log(user); // setSession(user); } } else { throw new Error('No identityToken.'); } } catch (e: unknown) { const { code, message } = e as { message: string; code: 'ERR_REQUEST_CANCELED'; }; if (code === 'ERR_REQUEST_CANCELED') { console.error(message); // 处理用户取消登录流程的情况 } else { // 处理其他错误 } } };
当前遇到的问题:在模拟器中输入正确密码后,AppleAuthentication.signInAsync会卡住无响应;但输入错误密码时,原生登录UI会出现密码框抖动的错误反馈,说明能正常连接Apple后端。且该功能在真机上运行完全正常,请问可能的原因是什么?
可能的原因及排查方向
模拟器测试账户权限不全
模拟器中使用的Apple测试账户可能未完善基础信息(如完整姓名、绑定邮箱),或未获得完整的Sign in with Apple权限,导致Apple认证流程在后台中断,无法返回凭证。真机使用的是真实完整账户,因此流程正常。模拟器登录会话缓存冲突
模拟器的Apple登录会话可能存在缓存残留,导致新请求无法正常完成。可尝试:- 重置模拟器(
Device > Erase All Content and Settings) - 退出模拟器中的Apple账户,重新登录后再测试
- 重置模拟器(
EAS构建的权限配置遗漏
尽管已在AppStore Connect配置Bundle ID的Sign in with Apple权限,但EAS构建的模拟器包可能未正确加载权限配置。检查app.config.js或app.json中的ios.entitlements是否包含:"entitlements": { "com.apple.developer.applesignin": ["Default"] }同时清理EAS构建缓存后重新构建,避免缓存导致配置不生效。
iOS模拟器版本的已知bug
部分iOS模拟器版本(如iOS 16.x部分子版本)存在Sign in with Apple流程的已知bug,会导致输入正确密码后无法完成跳转。可尝试切换到其他稳定版本的模拟器测试。Supabase客户端ID配置细节问题
检查Supabase中配置的授权客户端ID是否准确:若使用EAS构建的自定义模拟器包,应确保com.myapp.dev(你的dev环境Bundle ID)配置正确,无多余逗号或空格,与实际构建的Bundle ID完全匹配。
内容的提问来源于stack exchange,提问作者Phil Lucks

