Firebase App Check拦截所有Android设备请求的排查求助
Firebase App Check Android端请求拦截问题排查
问题概况
- Flutter项目配置Firebase App Check后,iOS设备可正常访问Realtime Database和Cloud Functions,但Android设备请求被拦截
- 已使用Google Play Console生成的SHA-256证书指纹配置到Firebase,且Firebase后台显示Android应用已注册
- 本地无报错信息,仅在Firebase App Check请求指标中看到「未验证:无效请求」
- Cloud Functions日志输出:
Callable request verification passed {"verifications":{"auth":"MISSING","app":"MISSING"}}
排查步骤
1. 确认SHA-256指纹覆盖所有场景
- 除了Google Play Console的发布版指纹,本地调试用的debug版SHA-256也需添加到Firebase App Check配置。在Android项目根目录运行
./gradlew signingReport获取debug指纹,检查是否已在Firebase后台添加。 - 若使用App Bundle发布,需确认配置的是Google Play的App Signing指纹(而非上传密钥指纹),开发者常误将上传密钥指纹当成App Signing指纹,导致发布后验证失败。
2. 完善App Check激活代码的平台适配
当前代码未指定Android端Provider,需明确配置:
void main() async { await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); await FirebaseAppCheck.instance.activate( // 调试阶段用AndroidProvider.debug,发布版必须用playIntegrity androidProvider: AndroidProvider.playIntegrity, ); runApp(MyApp()); }
3. 验证Cloud Functions的App Check配置
确认Cloud Functions已启用App Check验证:
- Callable函数需在初始化时开启验证:
const { onCall } = require("firebase-functions/v2/https"); const { getAppCheck } = require("firebase-admin/app-check"); getAppCheck(); exports.yourFunction = onCall({ enforceAppCheck: true }, (request) => { // 函数逻辑 });
日志中"app":"MISSING"说明请求未携带有效App Check令牌,或令牌未被正确验证。
4. 检查AndroidManifest配置
确保添加Play Integrity所需权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="com.google.android.gms.permission.PLAY_SERVICES_AUTH" />
同时确认Google Play Console已关联Firebase项目,且启用了Play Integrity API。
5. 调试模式下验证
- 在Firebase App Check后台为Android应用添加调试设备,运行App后查看Logcat,找到类似
AppCheck debug token: XXXXX的日志,将该令牌添加到Firebase调试令牌列表,测试请求是否通过。若调试模式正常,说明发布版的指纹或Provider配置存在问题。
6. 更新Firebase SDK版本
确认flutter项目中firebase_core、firebase_app_check、cloud_functions等依赖为最新稳定版,旧版本可能存在兼容性问题,运行flutter pub upgrade更新依赖。
内容的提问来源于stack exchange,提问作者Stewie Griffin
相关产品推荐
相关产品推荐

