我正在使用Firebase AppCheck验证对我的API的调用是否确实来自我的应用。
我的问题是,自从我启用AppCheck,我只能在合法设备上或通过模拟器的调试令牌获得令牌。在某种程度上,这是有道理的,但无法利用预发布报告是一个相当大的警告,因为它们很方便,以确保我不会向我的测试人员发送一个有bug的版本。无论是预发布报告还是Firebase测试实验室似乎都没有办法通过SafetyNet。
是不是所有使用SafetyNet的应用程序都不能使用Pre-Launch Reports或者Firebase Test Lab?这在我看来是难以置信的,这就是为什么我认为我在这里遗漏了一些东西。
相关代码:app/build.gradle
:
dependencies {
implementation platform('com.google.firebase:firebase-bom:29.3.1')
implementation 'com.google.firebase:firebase-crashlytics-ktx'
implementation 'com.google.firebase:firebase-analytics-ktx'
implementation 'com.google.firebase:firebase-appcheck-safetynet:16.0.0-beta06'
implementation 'com.google.firebase:firebase-appcheck-debug:16.0.0-beta06'
// ...
}
在我的Application
类的onCreate()
方法中:
// ...
FirebaseApp.initializeApp(this)
val appCheck = FirebaseAppCheck.getInstance()
appCheck.installAppCheckProviderFactory(
if (!BuildConfig.DEBUG) {
SafetyNetAppCheckProviderFactory.getInstance()
} else {
Log.i(javaClass.name, "Using debug version of AppCheck.")
DebugAppCheckProviderFactory.getInstance()
}
)
// ...
3条答案
按热度按时间lp0sw83n1#
您可能希望在项目门户上创建调试令牌,并尝试以下代码:
之后,您可以将秘密调试令牌注入到您的构建中。
注意:不要忘记轮换令牌,所以经常或理想情况下,每次发布后,一旦发布周期一旦它可以获得,如果你反编译APK.
xriantvc2#
感谢您提醒我们注意这一问题。团队已意识到在预发布报告中使用SafetyNet的应用可能无法正常工作的问题(PLR)。但是,同样受App Check支持的Play Integrity API应该很快也会受PLR支持--由于Play Integrity很快将取代SafetyNet,因此无论如何请考虑迁移到Play Integrity。同时,作为一种解决方案,如果应用在测试实验室中运行,您可以告知应用绕过SafetyNet认证并使用调试令牌(类似于CI环境)。要执行此操作,请参阅修改测试实验室的检测测试行为。
nhjlsmyf3#
1.将
PRELAUNCH_APP_CHECK_TOKEN
添加到您的build.gradle
:1.设置
CI/CD
以注入PRELAUNCH_APP_CHECK_TOKEN_VALUE
1.使用以下内容创建
AppCheckFactoryProvider.kt
,并将package
替换为您的包名称:1.用途: