Firebase AppCheck异常:近半数请求无效,如何定位涉事应用及原因?
定位App Check无效请求问题的方法
一、区分Android/iOS应用的无效请求
- 给两个平台的请求添加平台标识:
- Android端:初始化App Check时,给请求附带
platform: "android"的自定义属性,或在Firebase Analytics中设置对应用户属性,关联App Check请求日志。 - iOS端:同理添加
platform: "ios"标识,方便在控制台直接筛选区分。
- Android端:初始化App Check时,给请求附带
- 解析实时数据库规则日志:开启数据库规则日志后,日志中的
userAgent字段能区分客户端——Android请求通常带okhttp、应用包名;iOS请求则包含CFNetwork、Bundle ID相关信息,据此判断无效请求所属平台。
二、排查无效请求的具体原因
- 检查令牌生成逻辑:
- Android:确认Play Integrity/SafetyNet Provider配置正确,Manifest里的API密钥无误,设备满足验证条件(未root、Google Play服务正常)。代码中捕获
AppCheckTokenException,打印具体错误(如令牌过期、验证失败)。 - iOS:确认DeviceCheck Provider配置正确,Bundle ID与Firebase控制台一致,设备支持DeviceCheck(iOS 11.0+)。在令牌获取的错误回调中记录失败原因(网络问题、验证不通过等)。
- Android:确认Play Integrity/SafetyNet Provider配置正确,Manifest里的API密钥无误,设备满足验证条件(未root、Google Play服务正常)。代码中捕获
- 验证数据库规则:确保规则中正确校验App Check令牌,比如包含
request.app != null,若有平台权限区分,需确认规则逻辑无误。 - 查看App Check事件日志:在Firebase控制台App Check页面的“事件”标签,查看令牌验证失败的具体原因(无效令牌、过期、Provider未配置等),结合平台筛选定位对应问题。
三、更精准的筛选方式
- 自定义Cloud Logging过滤器:
针对App Check验证失败日志,设置过滤条件:
再追加resource.type="firebase_database" AND protoPayload.status.code=403 AND protoPayload.appCheck.status!="VALID"protoPayload.userAgent:"okhttp"(Android)或protoPayload.userAgent:"CFNetwork"(iOS),实现精准的平台+失败请求筛选。 - 制作Analytics自定义报表:创建以
platform为维度、“App Check验证失败”为指标的报表,直接对比两个平台的失败率,快速锁定问题平台。 - 代码中添加自定义日志:在App Check令牌获取失败或请求被拒绝时,记录含平台、错误码、描述的日志,上传到Crashlytics或Cloud Logging,再通过日志工具按平台过滤,获取详细错误数据。
内容的提问来源于stack exchange,提问作者Itapox
相关产品推荐
相关产品推荐

