我正在使用Firebase AppCheck来验证对我的API的调用确实来自我的应用程序。
我的问题是,自从启用AppCheck以来,我只能在合法设备上或通过模拟器的调试令牌获得令牌。在某种程度上,这是合理的,但不能利用发布前的报告是一个相当大的警告,因为它们会派上用场,以确保我没有向我的测试人员提供一个被窃听的版本。无论是启动前报告还是Firebase测试实验室似乎都没有办法通过SafetyNet。
是否所有使用SafetyNet的应用程序都无法使用启动前报告或Firebase测试实验室?这在我看来是相当难以置信的,这就是为什么我认为我在这里遗漏了一些东西。
相关守则:
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'
// ...
}
在我的onCreate()
类的Application
方法中:
// ...
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()
}
)
// ...
发布于 2022-06-08 17:12:43
谢谢你让我们注意到这一点。该团队意识到,SafetyNet应用程序在发布前的报告中可能无法正常工作。然而,播放完整性API,这也是由App支持的,应该支持PLR很快-由于Play完整性将很快取代SafetyNet,请考虑迁移到Play完整性。同时,作为解决办法,如果应用程序在Test中运行,您可以告诉应用程序绕过SafetyNet认证,并使用调试令牌(类似于CI环境)。要做到这一点,请参见为测试实验室修改仪器化测试行为。
发布于 2022-10-14 04:30:32
您可能希望在项目门户上创建调试令牌,并尝试以下代码:
object AppCheckFactoryProvider {
fun get(context: Context): AppCheckProviderFactory {
return when {
isRunningOnTestDevice(context = context) -> CIDebugAppCheckProviderFactory()
BuildConfig.DEBUG -> DebugAppCheckProviderFactory.getInstance()
else -> PlayIntegrityAppCheckProviderFactory.getInstance()
}
}
private fun isRunningOnTestDevice(context: Context): Boolean {
return Settings.System.getString(
context.contentResolver,
FIREBASE_TEST_LAB_SETTINGS
) == "true"
}
private const val FIREBASE_TEST_LAB_SETTINGS = "firebase.test.lab"
}
class CIDebugAppCheckProviderFactory : AppCheckProviderFactory {
override fun create(firebaseApp: FirebaseApp): AppCheckProvider {
return DebugAppCheckProvider(firebaseApp, BuildConfig.APP_CHECK_DEBUG_TOKEN_FROM_CI)
}
}
之后,您可以将秘密调试令牌插入到构建中。
注意:不要忘记在每次发布之后频繁地或理想地旋转令牌,如果您对APK进行反编译,则释放周期一次就可以获得。
https://stackoverflow.com/questions/72109169
复制相似问题