将 App Check 与调试提供方搭配使用

如果您在为应用注册 App Check 后希望在 App Check 通常不会将其归类为有效的环境中运行应用,例如在开发过程中使用的模拟器或从持续集成 (CI) 环境中运行应用,则可以创建使用 App Check 调试提供程序(而非 App Attest)的应用的调试 build。

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

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

  1. 在 Google Cloud 控制台的 API 和服务部分的凭据页面上查找项目的 iOS API 密钥。

  2. 在调试 build 中,将 App Check 配置为使用调试提供程序。您需要指定上一步中获取的 API 密钥。

    #if targetEnvironment(simulator)
    GIDSignIn.sharedInstance.configureDebugProvider(withAPIKey: apiKey) { error in
      if let error {
        print("Error configuring `GIDSignIn` for App Check: \(error)")
      }
    }
    #else
    // Configure App Check for production.
    #endif
    
  3. 启动应用。当 SDK 尝试向后端发送请求时,本地调试令牌将记录到 Xcode 控制台。例如:

    <Warning> [AppCheckCore][I-GAC004001] App Check debug token:
    '123a4567-b89c-12d3-e456-789012345678'.
    
  4. 在 Firebase 控制台的 App Check 部分中,从应用的溢出菜单中选择管理调试令牌。然后,注册您在上一步中记录的调试令牌。

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

注册令牌后,Google 的 OAuth 2.0 端点会接受该令牌对您的项目有效。

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

在 CI 环境中使用调试提供程序

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

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

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

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

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

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

  4. 在 Xcode 中,将名为 FIRAAppCheckDebugToken 且类似于 $(APP_CHECK_DEBUG_TOKEN) 的值的环境变量添加到您的测试方案中。

  5. 配置 CI 测试脚本,将调试令牌作为环境变量传递。例如:

    xcodebuild test -scheme YourTestScheme -workspace YourProject.xcworkspace \
    APP_CHECK_DEBUG_TOKEN=$(APP_CHECK_DEBUG_TOKEN_FROM_CI)
  6. 在 Google Cloud 控制台的 API 和服务部分的凭据页面上查找项目的 iOS API 密钥。

  7. 在调试 build 中,将 App Check 配置为使用调试提供程序。您需要指定上一步中获取的 API 密钥。

    #if targetEnvironment(simulator)
    GIDSignIn.sharedInstance.configureDebugProvider(withAPIKey: apiKey) { error in
      if let error {
        print("Error configuring `GIDSignIn` for App Check: \(error)")
      }
    }
    #else
    // Configure App Check for production.
    #endif
    

当您的应用在 CI 环境中运行时,Google 的 OAuth 2.0 端点会接受为您的项目发送的令牌。