仅内部应用共享分发的发布构建出现Play Integrity返回untrusted_app问题,请求排查思路
仅内部应用共享分发的发布构建出现Play Integrity返回untrusted_app问题,请求排查思路
我之前也踩过Internal App Sharing结合Play Integrity的类似坑,看了你已经做的全面排查,给你几个容易被忽略的方向试试:
1. 重点排查Internal App Sharing的临时签名指纹
Internal App Sharing分发的安装包,Google Play会自动用临时签名证书重新签名(哪怕你用上传密钥签名后上传),而你目前只在Firebase里配置了上传密钥和应用签名密钥的指纹,这个临时指纹不在允许列表里,就会触发untrusted_app。
验证方法:
- 把Internal App Sharing的包安装到测试设备后,用adb命令提取当前应用的签名指纹:
adb shell dumpsys package com.dev.srt_app | grep -A 1 "Signatures" - 把提取到的SHA-1和SHA-256指纹添加到Firebase项目的应用设置里,等10分钟左右再测试。
2. 确认Release构建的CLOUD_PROJECT_NUMBER是否正确
你提到用BuildConfig.CLOUD_PROJECT_NUMBER传递项目编号,但要注意:
- 检查
build.gradle.kts里的release构建类型,是否正确配置了buildConfigField,有没有和debug构建用了不同的数值? - 可以直接反编译Release APK的
BuildConfig类,或者在代码里加个临时日志输出这个值,确认和Firebase控制台的项目编号完全一致。
3. 检查Firebase App Check的Play Integrity Provider配置
进入Firebase控制台的App Check页面,确认:
- Play Integrity Provider已经针对你的应用启用,并且没有设置“仅允许正式发布版本”的限制(有些开发者会误开这个,导致Internal App Sharing的包被拦截)。
- 关联的Google Cloud项目和Play Console里的项目完全匹配,没有选错项目。
4. 解决Firestore无法通信的深层问题
即使关闭App Check还是连不上Firestore,大概率是Release构建的配置问题:
- 检查
AndroidManifest.xml里是否添加了必要的网络权限:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> - 即使
isMinifyEnabled = false,R8默认还是会做一些代码优化,确认是否在proguard-rules.pro里保留了Firebase相关类的规则:-keep class com.google.firebase.** { *; } -keep class com.google.android.gms.** { *; } - 检查Release构建是否误禁用了Firebase服务,比如
build.gradle.kts里有没有加firebaseServices.disable()之类的配置。
5. 验证Google Cloud的API权限
Play Integrity API需要在关联的Google Cloud项目中启用,并且服务账号有调用权限:
- 登录Google Cloud控制台,找到关联的项目,搜索“Play Integrity API”,确认状态是“已启用”。
- 检查Firebase Admin SDK使用的服务账号,是否拥有
Play Integrity Token Verifier的角色权限。
6. 对比测试:直接安装签名后的Release包
把用上传密钥签名的Release包,通过adb直接安装到测试设备(不走Internal App Sharing),如果此时Play Integrity验证正常,那就能100%确定是Internal App Sharing的临时签名指纹问题,按第一步解决即可。
内容来源于stack exchange
相关产品推荐
相关产品推荐

