Flutter iOS端OTP验证调试模式正常,发布模式无法接收验证码求助
iOS发布模式下Firebase Auth手机号OTP无法接收的排查思路
以下是针对该问题的具体排查方向:
确认Firebase配置文件的正确性
确保发布版打包时使用的GoogleService-info.plist是Firebase控制台对应生产环境应用的配置文件,而非调试版。检查文件中的BUNDLE_ID是否与发布版应用的Bundle ID完全匹配,避免因ID不一致导致服务鉴权失败。检查APNs生产环境配置
Firebase Auth的OTP自动获取依赖APNs推送服务:- 登录Apple开发者后台,生成并下载生产环境的APNs证书,上传至Firebase控制台的iOS应用设置页面。
- 在Xcode的
Signing & Capabilities中,确认发布模式下Push Notifications能力已启用,且对应的Provisioning Profile包含推送权限。
捕获发布模式下的错误信息
发布模式下print语句无法输出日志,建议在verificationFailed回调中添加错误信息持久化逻辑,方便排查具体异常:verificationFailed: (FirebaseAuthException e) { // 将错误信息保存到本地存储 SharedPreferences.getInstance().then((prefs) { prefs.setString('auth_error', '${e.code}: ${e.message}'); }); },后续可以通过导出应用沙盒数据查看保存的错误信息,定位具体问题。
验证网络与权限配置
- 检查
Info.plist中的NSAppTransportSecurity设置,确保未限制Firebase相关域名的HTTPS访问(默认ATS配置无需额外修改,除非有自定义规则)。 - 确认测试设备的网络环境可正常访问Firebase服务,部分企业网络可能存在防火墙限制,导致OTP请求无法发送。
- 检查
检查Firebase Auth的服务限制
- 登录Firebase控制台,查看Auth模块的使用配额,确认未因超出限额导致OTP发送失败。
- 检查是否设置了手机号验证白名单,若调试阶段添加了测试手机号白名单,需确认发布环境已移除该限制,允许所有合法手机号接收OTP。
重新验证发布打包流程
重新生成发布版的Provisioning Profile,确保签名配置正确。打包后通过xcodebuild命令或Xcode的Archive功能重新导出IPA,避免因打包过程中配置文件缓存导致的问题。
你的实现代码
Future<void> verifyPhone(String phoneNumber) async { await FirebaseAuth.instance.verifyPhoneNumber( phoneNumber: phoneNumber, timeout: const Duration(seconds: 60), verificationCompleted: (PhoneAuthCredential credential) { print('Auth completed'); }, verificationFailed: (FirebaseAuthException e) { print(e); print('Auth failed'); }, codeSent: (String verificationId, int? resendToken) { print('OTP sent'); verId = verificationId; Queries.instance.verId = verificationId; print(verId + '........'); }, codeAutoRetrievalTimeout: (String verificationId) { print('Timeout'); } ); }
内容的提问来源于stack exchange,提问作者Carlos
相关产品推荐
相关产品推荐

