如果在为 App Check 注册您的应用程序后,您希望在 App Check 通常不会归类为有效的环境中运行您的应用程序,例如开发期间的模拟器,或来自持续集成 (CI) 环境,您可以创建您的应用程序的调试版本,使用 App Check 调试提供程序而不是真正的证明提供程序。
在模拟器中使用调试提供程序
要在模拟器中以交互方式运行您的应用程序时(例如在开发期间)使用调试提供程序,请执行以下操作:
在您的模块(应用级)Gradle 文件(通常是
app/build.gradle
)中,声明 App Check Android 库的依赖项:Kotlin+KTX
dependencies { implementation 'com.google.firebase:firebase-appcheck-debug:16.1.1' }
Java
dependencies { implementation 'com.google.firebase:firebase-appcheck-debug:16.1.1' }
在您的调试版本中,将 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());
启动应用程序并触发对 Firebase 后端服务的调用。当 SDK 尝试向后端发送请求时,将记录一个本地调试令牌。例如:
D DebugAppCheckProvider: Enter this debug secret into the allow list in the Firebase Console for your project: 123a4567-b89c-12d3-e456-789012345678
在 Firebase 控制台的App Check部分,从应用的溢出菜单中选择Manage debug tokens 。然后,注册您在上一步中登录的调试令牌。
注册令牌后,Firebase 后端服务会将其视为有效。
由于此令牌允许在没有有效设备的情况下访问您的 Firebase 资源,因此将其保密至关重要。不要将其提交到公共存储库,如果注册的令牌遭到破坏,请立即在 Firebase 控制台中将其撤销。
在 CI 环境中使用调试提供程序进行单元测试
要在持续集成 (CI) 环境中使用调试提供程序进行单元测试,请执行以下操作:
在 Firebase 控制台的App Check部分,从应用的溢出菜单中选择Manage debug tokens 。然后,创建一个新的调试令牌。您将在下一步中需要该令牌。
由于此令牌允许在没有有效设备的情况下访问您的 Firebase 资源,因此将其保密至关重要。不要将其提交到公共存储库,如果注册的令牌遭到破坏,请立即在 Firebase 控制台中将其撤销。
将您刚刚创建的调试令牌添加到 CI 系统的安全密钥存储(例如,GitHub Actions 的加密机密或 Travis CI 的加密变量)。
如有必要,配置您的 CI 系统,使您的调试令牌在 CI 环境中作为环境变量可用。将变量命名为
APP_CHECK_DEBUG_TOKEN_FROM_CI
之类的名称。在您的模块(应用级)Gradle 文件中(通常是
app/build.gradle
):为 App Check Android 调试库声明测试依赖:
Kotlin+KTX
dependencies { androidTestImplementation 'com.google.firebase:firebase-appcheck-debug-testing:16.1.1' }
Java
dependencies { androidTestImplementation 'com.google.firebase:firebase-appcheck-debug-testing:16.1.1' }
将以下内容添加到 CI 构建变体的配置中:
testInstrumentationRunnerArgument "firebaseAppCheckDebugSecret", System.getenv("APP_CHECK_DEBUG_TOKEN_FROM_CI") ?: ''
在您的测试类中,使用
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 后端服务将接受它发送的有效令牌。