使用入门:将 App Check 用于 Google 登录功能 (iOS)

本页介绍了如何在 iOS 应用中启用 App Check。启用 App Check 有助于确保只有您的应用可以代表您的项目访问 Google 的 OAuth 2.0 端点。请查看此功能的概览

App Check 使用 App Attest 来帮助验证 OAuth 2.0 请求是否来自真实的应用。App Check 不使用 App Attest 分析欺诈风险

准备工作

  1. 确保您使用的是 Xcode 12.5 或更高版本。

  2. 使用 Google 登录库将 Google 登录集成到您的 iOS 应用中。

1. 设置项目

您可以在 Google API ConsoleFirebase 控制台中启用 App Check。无需在两个位置都启用此功能,只需在一个位置启用即可。

Google API Console

必须满足以下要求,才能成功为 iOS 客户端启用 App Check:
  • 您必须为 iOS 客户端指定团队 ID。
  • 您不得在软件包 ID 中使用通配符,因为通配符可能会解析为多个应用。这意味着软件包 ID 不得包含星号 (*) 符号。
如需启用 App Check,请在 iOS 客户端的修改视图中,将使用 Firebase App Check 保护您的 OAuth 客户端免遭滥用切换按钮切换为开启状态。

启用 App Check 后,您将在 OAuth 客户端的修改视图中看到与客户端发出的 OAuth 请求相关的指标。在您强制执行 App Check 之前,系统不会屏蔽来自未经验证的来源的请求。“指标监控”页面中的信息可帮助您确定何时开始强制执行。

为 iOS 应用启用 App Check 时,您可能会看到与 App Check 功能相关的错误。如需修正这些错误,请尝试以下操作:

  • 验证您指定的软件包 ID 和团队 ID 是否有效。
  • 确认您未对软件包 ID 使用通配符。

Firebase 控制台

  1. 您必须拥有 Firebase 项目才能将 App Check 与 Google 登录搭配使用。

    • 如果您的应用已在使用 Firebase,请使用同一项目。

    • 如果您的应用使用 Google 登录服务,但未使用 Firebase,则您已经拥有 Google Cloud 项目。在 Firebase 控制台中创建新项目时,选择您的 Google Cloud 项目,即可将 Firebase 添加到该项目中

      另请参阅: Firebase 项目与 Google Cloud 之间的关系

  2. 如果您尚未添加 iOS 应用,请使用 Firebase 控制台的项目设置页面将 iOS 应用添加到 Firebase 项目。

  3. 在 Firebase 控制台的 App Check 部分中注册您的应用,以便将 App Check 与 App Attest 提供方搭配使用。

  4. 确保您项目的所有 OAuth 客户端都已关联到应用。

    如果您有未关联的客户端,App Check 页面的 Google Identity for iOS 部分会显示一条消息,指出“您有 n 个未关联的 OAuth 客户端,需对它们进行额外设置”。

    此外,如果您在 App Check 中设置了一些 OAuth 客户端后又将其删除,您会看到一条消息,指出“您有 n 项覆盖政策没有匹配的 OAuth 客户端”。您可以放心地删除这些替换项,以进行清理。

    您可以在 Firebase 控制台的 OAuth 客户端页面上将未关联的客户端关联到现有应用或新应用。

2. 将 Google 登录库添加到您的应用中

  1. 在 Xcode 项目中,将 Google 登录依赖项设置为版本 8.0.0 或更高版本:

    SPM : 战略合作伙伴经理 (SPM)

    googlesignin-ios 的依赖项规则设置为版本 8.0.0 或更高版本。

    CocoaPods

    更新 Podfile

    source 'https://github.com/CocoaPods/Specs.git'
    source 'https://github.com/firebase/SpecsDev.git'
    
    target 'YourAppName' do
      use_frameworks!
    
      pod 'GoogleSignIn','~> 8.0'
          :git => 'https://github.com/google/GoogleSignIn-iOS.git'
      pod 'GoogleSignInSwiftSupport'  # If you use SwiftUI.
    end
    

    然后,运行 pod install 并打开创建的 .xcworkspace 文件。

  2. 在 Xcode 中,将 App Attest 功能添加到您的应用中。

  3. 在项目的 .entitlements 文件中,将 App Attest 环境设置为 production

3. 初始化 App Check

在应用委托的 didFinishLaunchingWithOptions 方法中,调用 GIDSignIn.sharedInstance.configure(completion:)。您应在应用生命周期的早期阶段尽早调用此方法,以最大限度地缩短用户感知到的延迟时间。

import SwiftUI
import GoogleSignIn

class AppDelegate: NSObject, UIApplicationDelegate {
  func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil
  ) -> Bool {
    #if targetEnvironment(simulator)
    // Configure for debugging.
    // See: https://developers.google.com/identity/sign-in/ios/appcheck/debug-provider
    #else
    GIDSignIn.sharedInstance.configure { error in
      if let error {
        print("Error configuring `GIDSignIn` for Firebase App Check: \(error)")
      }
    }
    #endif

    return true
  }
}

@main
struct YourAppNameApp: App {
  @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

  // ...
}

后续步骤

将 App Check 库安装到您的应用中之后,开始将更新后的应用分发给用户。

更新后的客户端应用会开始将 App Check 令牌随其发出的每个请求一起发送到 Google 的身份验证端点;不过,您在 Firebase 控制台的 App Check 部分中启用强制执行之前,这些端点并不会要求令牌必须有效。

监控指标

不过,在启用强制执行之前,您应该确保这样做不会干扰现有的合法用户。另一方面,如果您发现自己的应用资源被非法使用,建议您尽快启用强制执行。

为帮助您做出相关决策,建议您查看 Google 登录的 App Check 指标

启用 App Check 强制执行

在了解 App Check 对用户有何影响并为后续操作做好准备之后,您便可以启用 App Check 强制执行

在调试环境中使用 App Check

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

请参阅将 App Check 与调试提供程序搭配使用