使用入门:将 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. 设置项目

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

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

    • 如果您的应用使用的是 Google 登录功能,但未使用 Firebase,则表示您已有一个 Google Cloud 项目。当您在 Firebase 控制台中创建新项目时,将 Firebase 添加到您的 Google Cloud 项目。

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

  2. 在 Firebase 控制台的项目设置页面中,将您的 iOS 应用添加到您的 Firebase 项目中(如果您尚未执行此操作)。

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

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

    如果您解除了客户端的关联,则会在 App Check 页面的 Google Identity for iOS 部分看到一条消息,告知您有 n 个未关联的 OAuth 客户端,这些客户端需要额外设置。

    此外,如果您在 App Check 中设置了一些 OAuth 客户端后删除了这些客户端,则会看到一条消息,提示“You have n override with no matching OAuth client”的消息。您可以删除这些替换项,从而安全地进行清理。

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

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

  1. 在您的 Xcode 项目中,将 Google 登录依赖项设置为版本 7.1.0-fac-beta-1.0.0

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

    googlesignin-ios 的依赖项规则设置为确切版本:7.1.0-fac-beta-1.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',
          :git => 'https://github.com/google/GoogleSignIn-iOS.git',
          :tag => '7.1.0-fac-beta-1.0.0'
      pod 'GoogleSignInSwiftSupport'  # If you use SwiftUI.
    end
    

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

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

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

3. 初始化 App Check

在应用委托 (app delegate) 的 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) 环境中运行应用,则可以创建使用 App Check 调试提供程序(而非 App Attest)的应用的调试 build。

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