iOS Firebase自定义令牌登录部分设备失效排查(Xcode 15)
错误信息
错误:发生内部错误,请打印并检查错误详情以获取更多信息。
已排查操作
- 应用已上传至App Store Testflight
- 已尝试卸载后重新安装应用
- 已验证GoogleService-Info.plist文件无误
- 已确认Firebase控制台所有服务均已启用
- 已检查服务器生成的refreshToken有效性,确认正确
核心代码
Auth.auth().signIn(withCustomToken: refreshToken) { _, error in if let authError = error { log.debug(authError.localizedDescription) //Error:- An internal error has occurred, print and inspect the error details for more information. return } else { self.goToNextStep() } } //refreshToken = Token generated from server //refresh Token sample:- eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJmaXJlYmFzZS1hZG1pbnNkay1YWFhAWFhYLVhYWC1YWC5pYW0uZ3NlcnZpY2VhY2Nv dW50LmNvbSIsImF1ZCI6Imh0dHBzOi8vaWRlbnRpdHl0b29sa2l0Lmdvb2dsZWFwaXMuY29tL2dv b2dsZS5pZGVudGl0eS5pZGVudGl0eXRvb2xraXQudjEuSWRlbnRpdHlUb29sa2l0IiwiZXhwIjox NzAxNzU5MDAwLCJpYXQiOjE3MDE3NTU0MDAsInN1YiI6ImZpcmViYXNlLWFkbWluc2RrLVhYWEBk WFhYLVhYWC5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsInVpZCI6IlhYWFhYWCJ9.SIGNATURE
问题场景
该功能在iPhone 15/15 Pro模拟器(iOS17)、iPhone XS(iOS15/16)、iPhone14 Pro(iOS17)上均正常运行,但部分设备出现上述错误。
排查与解决方向
打印完整错误详情
当前代码仅输出本地化描述,无法获取内部错误的具体原因。修改代码打印完整错误信息:if let authError = error { log.debug("Firebase Auth Error: \(authError)") log.debug("Error Code: \(authError._code)") log.debug("Error User Info: \(authError.userInfo)") return }常见深层原因包括:令牌签名算法不兼容、令牌过期时间异常、设备系统时间偏差、Firebase SDK版本不兼容。
校准设备系统时间
设备系统时间与服务器时间偏差过大(超出令牌有效期范围)会导致验证失败,引导用户开启自动设置时间功能。统一Firebase SDK版本
确保所有设备使用的Firebase Auth SDK版本一致。部分旧iOS版本设备可能对新版SDK兼容性差,可尝试降级至稳定兼容版本(如10.x系列)测试。验证令牌受众字段
检查服务器生成的JWT令牌中aud字段是否与Firebase项目要求一致:自定义令牌的aud必须为https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit,或与项目Web客户端ID匹配(需在Firebase控制台确认)。排查网络环境问题
部分设备处于受限网络(企业内网、代理)时,可能无法连接Firebase验证服务器。测试不同网络环境下的登录情况,排除网络拦截。检查Testflight构建配置
确认Testflight构建的签名配置(Provisioning Profile、证书)包含Firebase Auth所需权限,同时检查Info.plist中NSAppTransportSecurity设置,确保允许访问Firebase相关域名。
内容的提问来源于stack exchange,提问作者Milan Ravliya

