本页介绍了如何在 iOS 应用中启用 App Check。启用 App Check 有助于确保只有您的应用可以代表您的项目访问 Google 的 OAuth 2.0 端点。请查看此功能的概览。
App Check 使用 App Attest 来帮助验证 OAuth 2.0 请求是否来自真实的应用。App Check 不会使用 App Attest 分析欺诈风险。
准备工作
确保您使用的是 Xcode 12.5 或更高版本。
使用 Google 登录库将 Google 登录功能集成到您的 iOS 应用中。
1. 设置项目
您可以在 或 Firebase 控制台中启用 App Check。您无需同时在两个位置启用该功能,只需在其中一个位置启用即可。
必须满足以下要求,才能成功为 iOS 客户端启用 App Check:- 您必须为 iOS 客户端指定团队 ID。
- 您不得在软件包 ID 中使用通配符,因为它可以解析为多个应用。这意味着软件包 ID 不得包含星号 (*) 符号。
启用 App Check 后,您将开始在 OAuth 客户端的修改视图中看到与客户端发出的 OAuth 请求相关的指标。在您强制执行 App Check 之前,系统不会屏蔽来自未经验证来源的请求。指标监控页面中的信息可帮助您确定何时开始强制执行。
为 iOS 应用启用 App Check 时,您可能会看到与 App Check 功能相关的错误。如需修正这些错误,请尝试执行以下操作:
- 验证您指定的软件包 ID 和团队 ID 是否有效。
- 请确保您未为软件包 ID 使用通配符。
Firebase 控制台
您必须拥有 Firebase 项目,才能将 App Check 与 Google 登录搭配使用。
如果您的应用已在使用 Firebase,请使用同一项目。
如果您的应用使用 Google 登录,但不使用 Firebase,则表示您已经有一个 Google Cloud 项目。在 Firebase 控制台中创建新项目时选择 Firebase,将其添加到您的 Google Cloud 项目中
如果您尚未执行此操作,请使用 Firebase 控制台的项目设置页面将 iOS 应用添加到 Firebase 项目中。
在 Firebase 控制台的 App Check 部分中注册您的应用,以便将 App Check 与 App Attest 提供方搭配使用。
确保项目的所有 OAuth 客户端都已关联到应用。
如果您有未关联的客户端,则会在应用检查页面的 Google Identity for iOS 部分看到一条消息,其中指出“您有 n 个未关联的 OAuth 客户端,需对它们进行额外设置”。
此外,如果您在 App Check 中设置了一些 OAuth 客户端后又将其删除,则会看到一条消息,内容为“您有 n 项覆盖政策没有匹配的 OAuth 客户端”。您可以通过删除这些替换项来安全地进行清理。
您可以在 Firebase 控制台的 OAuth 客户端页面上将未关联的客户端关联到现有应用或新应用。
2. 将 Google 登录库添加到您的应用中
在 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
文件。在 Xcode 中,将 App Attest 功能添加到您的应用中。
在项目的
.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。