Firebase 将于 5 月 10 日重返 Google I/O 大会!立即报名

将 App Check 与调试提供程序搭配使用 (Android)

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

为应用启用 App Check 后,如果您希望在 App Check 通常不会归类为有效提供程序的环境(例如开发期间的模拟器)或持续集成 (CI) 环境中运行您的应用,可以创建应用的调试 build,该 build 使用 App Check 调试提供程序,而不是真正的证明提供程序。

在模拟器中使用调试提供程序

如需在模拟器中以交互方式运行应用时(例如在开发期间)使用调试提供程序,请执行以下操作:

  1. 在您的模块(应用级)Gradle 文件(通常是 app/build.gradle)中,声明 App Check Android 库的依赖项:

    Kotlin+KTX

    dependencies {
        implementation 'com.google.firebase:firebase-appcheck-debug:16.1.2'
    }
    

    Java

    dependencies {
        implementation 'com.google.firebase:firebase-appcheck-debug:16.1.2'
    }
    
  2. 在调试 build 中,将 App Check 配置为使用调试提供程序工厂:

    Kotlin+KTX

    FirebaseApp.initializeApp(/*context=*/this)
    val firebaseAppCheck = FirebaseAppCheck.getInstance()
    firebaseAppCheck.installAppCheckProviderFactory(
        DebugAppCheckProviderFactory.getInstance()
    )

    Java

    FirebaseApp.initializeApp(/*context=*/ this);
    FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
    firebaseAppCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance());
  3. 启动应用并触发对 Firebase 后端服务的调用。当 SDK 尝试向后端发送请求时,系统会记录一个本地调试令牌。例如:

    D DebugAppCheckProvider: Enter this debug secret into the allow list in
    the Firebase Console for your project: 123a4567-b89c-12d3-e456-789012345678
  4. 在 Firebase 控制台的 App Check 部分中,从应用的溢出菜单中选择管理调试令牌。然后,注册您在上一步中记录的调试令牌。

    “管理调试令牌”菜单项的屏幕截图

注册令牌后,Firebase 后端服务会将其视为有效的令牌。

由于此令牌允许用户在没有有效设备的情况下访问您的 Firebase 资源,因此请务必确保此令牌的私密性。请勿将其提交到公共代码库;如果注册的令牌被盗用,请立即在 Firebase 控制台中撤消该令牌。

在 CI 环境中使用调试提供程序进行单元测试

如需在持续集成 (CI) 环境中使用调试提供程序进行单元测试,请执行以下操作:

  1. 在 Firebase 控制台的 App Check 部分中,从应用的溢出菜单中选择管理调试令牌。然后,创建一个新的调试令牌。在下一步中,您需要用到该令牌。

    由于此令牌允许用户在没有有效设备的情况下访问您的 Firebase 资源,因此请务必确保此令牌的私密性。请勿将其提交到公共代码库;如果注册的令牌被盗用,请立即在 Firebase 控制台中撤消该令牌。

    “管理调试令牌”菜单项的屏幕截图

  2. 将您刚刚创建的调试令牌添加到 CI 系统的安全密钥存储区(例如 GitHub Actions 的加密 Secret 或 Travis CI 的加密变量)中。

  3. 如有必要,请配置 CI 系统,以使调试令牌在 CI 环境中作为环境变量使用。以 APP_CHECK_DEBUG_TOKEN_FROM_CI 之类的形式为变量命名。

  4. 在您的模块(应用级)Gradle 文件(通常是 app/build.gradle)中:

    1. 声明 App Check Android 调试库的测试依赖项:

      Kotlin+KTX

      dependencies {
          androidTestImplementation 'com.google.firebase:firebase-appcheck-debug-testing:16.1.2'
      }
      

      Java

      dependencies {
          androidTestImplementation 'com.google.firebase:firebase-appcheck-debug-testing:16.1.2'
      }
      
    2. 将以下代码添加到 CI build 变体的配置中:

      testInstrumentationRunnerArgument "firebaseAppCheckDebugSecret", System.getenv("APP_CHECK_DEBUG_TOKEN_FROM_CI") ?: ''
      
  5. 在测试类中,使用 DebugAppCheckTestHelper 封装任何需要 App Check 令牌的代码:

    Kotlin+KTX

    @RunWith(AndroidJunit4::class)
    class MyTests {
        private val debugAppCheckTestHelper =
            DebugAppCheckTestHelper.fromInstrumentationArgs()
    
        @Test
        fun testWithDefaultApp() {
            debugAppCheckTestHelper.withDebugProvider {
                // Test code that requires a debug AppCheckToken.
            }
        }
    
        @Test
        fun testWithNonDefaultApp() {
            debugAppCheckTestHelper.withDebugProvider(
                FirebaseApp.getInstance("nonDefaultApp")
            ) {
                // Test code that requires a debug AppCheckToken.
            }
        }
    }
    

    Java

    @RunWith(AndroidJunit4.class)
    public class YourTests {
        private final DebugAppCheckTestHelper debugAppCheckTestHelper =
                DebugAppCheckTestHelper.fromInstrumentationArgs();
    
        @Test
        public void testWithDefaultApp() {
            debugAppCheckTestHelper.withDebugProvider(() -> {
                // Test code that requires a debug AppCheckToken.
            });
        }
    
        @Test
        public void testWithNonDefaultApp() {
            debugAppCheckTestHelper.withDebugProvider(
                    FirebaseApp.getInstance("nonDefaultApp"),
                    () -> {
                        // Test code that requires a debug AppCheckToken.
                    });
        }
    }
    

当您的应用在 CI 环境中运行时,Firebase 后端服务会将其发送的令牌视为有效的令牌。