Flutter Firebase手机号认证Play Integrity校验失败问题求助
Flutter Firebase手机号认证Play Integrity校验后崩溃问题解决
问题说明
输入手机号触发Firebase手机号认证流程,自动跳转浏览器完成Play Integrity人机校验,校验完成后应用直接崩溃,抛出异常:
Exception: This request is missing a valid app identifier, meaning that Play Integrity checks, and reCAPTCHA checks were unsuccessful
已尝试以下方案但未解决:
- 在Firebase账户中添加SHA1和SHA-256证书指纹
- 在app模块build.gradle中添加依赖
implementation 'androidx.browser:browser:1.3.0' - 在Google Cloud Console启用Google Play Integrity API
- 下载并替换项目中最新的google-services.json文件
- 清理并重建项目
额外排查与解决方向
1. 对齐Google Play Console与Firebase的SHA指纹
如果应用是通过Google Play发布(含内部/封闭测试),Firebase里的SHA指纹必须和Google Play Console的应用签名证书指纹完全一致:
- 打开Google Play Console → 目标应用 → 应用签名 → 复制“应用签名证书”的SHA1和SHA-256
- 把这两个指纹添加到Firebase项目设置→应用→指纹中,替换之前可能用本地调试证书添加的记录(测试发布版本时必须用Play的签名指纹)
2. 更新Firebase Auth相关插件
旧版本的firebase_auth和firebase_core可能存在Play Integrity集成的兼容性问题:
- 在
pubspec.yaml中把firebase_auth和firebase_core更新到最新稳定版,执行flutter pub upgrade - 同步项目后再重新测试认证流程
3. 补全reCAPTCHA跳转的Intent Filter
浏览器校验完成后无法正确跳转回应用,会导致认证流程中断触发错误:
- 在
AndroidManifest.xml的<activity>标签内添加以下intent-filter(替换成你的应用包名):<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="app" android:host="com.your.app.package" android:path="/__/auth/callback" /> </intent-filter>
4. 检查Play Integrity API的权限与配额
- 登录Google Cloud Console,找到对应项目的Play Integrity API页面,确认API配额未耗尽(默认配额足够日常测试,但频繁调用可能触发限制)
- 确认Firebase自动创建的服务账号拥有
Play Integrity API Client角色,权限不足会直接导致校验失败
5. 调试模式的适配
本地调试时(未通过Play安装):
- 用
./gradlew signingReport获取本地调试证书的SHA指纹,确保已添加到Firebase - 不要手动强制启用Play Integrity校验,Firebase Auth在调试模式下会自动降级为reCAPTCHA,强制启用会导致校验失败
6. 统一所有位置的应用包名
以下几个位置的包名必须完全一致:
- AndroidManifest.xml中的
package属性 - google-services.json里
client[0].client_info.android_client_info.package_name字段 - Firebase项目中注册的应用包名
- Google Play Console中的应用包名
日志排查技巧
开启Firebase Auth的详细日志,获取更具体的错误信息:
FirebaseAuth.instance.setLoggingEnabled(true);
同时在Android Studio的Logcat中过滤FirebaseAuth或PlayIntegrity关键词,定位崩溃的具体触发点。
内容的提问来源于stack exchange,提问作者Muamal Kadhim
相关产品推荐
相关产品推荐

