首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使SafetyNet/Firebase AppCheck在Google发布前报告中工作

如何使SafetyNet/Firebase AppCheck在Google发布前报告中工作
EN

Stack Overflow用户
提问于 2022-05-04 07:13:40
回答 2查看 893关注 0票数 1

我正在使用Firebase AppCheck来验证对我的API的调用确实来自我的应用程序。

我的问题是,自从启用AppCheck以来,我只能在合法设备上或通过模拟器的调试令牌获得令牌。在某种程度上,这是合理的,但不能利用发布前的报告是一个相当大的警告,因为它们会派上用场,以确保我没有向我的测试人员提供一个被窃听的版本。无论是启动前报告还是Firebase测试实验室似乎都没有办法通过SafetyNet。

是否所有使用SafetyNet的应用程序都无法使用启动前报告或Firebase测试实验室?这在我看来是相当难以置信的,这就是为什么我认为我在这里遗漏了一些东西。

相关守则:

app/build.gradle

代码语言:javascript
运行
复制
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方法中:

代码语言:javascript
运行
复制
// ...

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()
    }
)

// ...
EN

回答 2

Stack Overflow用户

发布于 2022-06-08 17:12:43

谢谢你让我们注意到这一点。该团队意识到,SafetyNet应用程序在发布前的报告中可能无法正常工作。然而,播放完整性API,这也是由App支持的,应该支持PLR很快-由于Play完整性将很快取代SafetyNet,请考虑迁移到Play完整性。同时,作为解决办法,如果应用程序在Test中运行,您可以告诉应用程序绕过SafetyNet认证,并使用调试令牌(类似于CI环境)。要做到这一点,请参见为测试实验室修改仪器化测试行为

票数 0
EN

Stack Overflow用户

发布于 2022-10-14 04:30:32

您可能希望在项目门户上创建调试令牌,并尝试以下代码:

代码语言:javascript
运行
复制
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进行反编译,则释放周期一次就可以获得。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72109169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档