Firebase Phone Auth无法接收OTP,错误码17093求助
针对Firebase Phone Auth错误码17093的排查方案
一、App Check调试模式配置检查
- 确认调试设备的调试令牌已添加到Firebase控制台的App Check设置中:
- 查看Flutter运行日志,找到类似
App Check debug token: [xxx]的输出 - 登录Firebase控制台 → 项目设置 → App Check → 对应Flutter应用 → 调试令牌 → 添加刚才获取的调试令牌
- 查看Flutter运行日志,找到类似
- 调试模式下,OnePlus设备对Safety Net兼容性可能不佳,建议暂时切换为reCAPTCHA v2作为App Check的调试提供者
二、reCAPTCHA相关排查
- 核对
google-services.json(Android)/GoogleService-Info.plist(iOS)中的reCAPTCHA密钥,确保密钥绑定的包名与调试应用的包名完全一致 - 关闭OnePlus设备的「隐私保护」「应用权限管理」中对WebView的限制(比如禁止弹窗、限制网络权限),避免reCAPTCHA的验证WebView被系统拦截
- 确保设备网络可正常访问reCAPTCHA服务,避免使用代理或受限网络环境
三、Firebase SHA密钥与包名校验
- 重新确认Firebase控制台中添加的SHA-1和SHA-256密钥,是当前调试所用签名文件的密钥(Flutter调试默认使用
~/.android/debug.keystore) - 验证应用包名:Firebase控制台的应用包名必须与Flutter项目
android/app/build.gradle中的applicationId完全一致,包括大小写
四、代码层面检查
1. 初始化代码校验
确保App Check和Firebase的初始化顺序正确,调试模式下需明确启用调试提供者:
void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); // 调试模式激活App Check并指定调试提供者 await FirebaseAppCheck.instance.activate( androidProvider: AndroidProvider.debug, appleProvider: AppleProvider.debug, ); runApp(const MyApp()); }
2. Phone Auth请求代码检查
避免短时间内重复请求OTP触发频率限制,同时确保错误捕获逻辑完整:
void requestOtp(String phoneNumber) async { try { await FirebaseAuth.instance.verifyPhoneNumber( phoneNumber: phoneNumber, verificationCompleted: (PhoneAuthCredential credential) async { // 自动验证逻辑 }, verificationFailed: (FirebaseAuthException e) { print('验证失败: ${e.code} - ${e.message}'); }, codeSent: (String verificationId, int? resendToken) { // 保存verificationId用于后续验证 }, codeAutoRetrievalTimeout: (String verificationId) {}, timeout: const Duration(seconds: 60), ); } catch (e) { print('请求OTP出错: $e'); } }
五、设备特殊处理
- 将应用加入OnePlus设备的「电池优化白名单」,避免系统限制Firebase相关服务的后台请求
- 清除应用缓存和数据后重新安装,确保配置文件(如
google-services.json)被正确加载
内容的提问来源于stack exchange,提问作者ItsHarsh.json
相关产品推荐
相关产品推荐

