此页面向您展示如何使用您的自定义 App Check 提供程序在 Apple 应用程序中启用 App Check。当您启用 App Check 时,您有助于确保只有您的应用可以访问您项目的 Firebase 资源。
如果您想将 App Check 与内置提供程序一起使用,请参阅App Check with App Attest和App Check with DeviceCheck 文档。
在你开始之前
如果您还没有将 Firebase 添加到您的 Apple 项目中,请将其添加到您的 Apple 项目中。
1.将App Check库添加到您的应用中
将 App Check 的依赖项添加到项目的
Podfile
:pod 'FirebaseAppCheck'
或者,您也可以改用Swift 包管理器。
此外,请确保您使用的是您所依赖的任何 Firebase 服务客户端库的最新版本。
运行
pod install
并打开创建的.xcworkspace
文件。
2.实施App Check协议
首先,您需要创建实现AppCheckProvider
和AppCheckProviderFactory
协议的类。
您的AppCheckProvider
类必须有一个 getToken getToken(completion:)
方法,该方法收集您的自定义 App Check 提供商需要的任何信息作为真实性证明,并将其发送到您的令牌获取服务以换取 App Check 令牌。 App Check SDK 处理令牌缓存,因此始终在您的getToken(completion:)
实现中获取新令牌。
迅速
class YourCustomAppCheckProvider: NSObject, AppCheckProvider { var app: FirebaseApp init(withFirebaseApp app: FirebaseApp) { self.app = app super.init() } func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) { DispatchQueue.main.async { // Logic to exchange proof of authenticity for an App Check token. // ... // Create AppCheckToken object. let exp = Date(timeIntervalSince1970: expirationFromServer) let token = AppCheckToken( token: tokenFromServer, expirationDate: exp ) // Pass the token or error to the completion handler. handler(token, nil) } } }
目标-C
@interface YourCustomAppCheckProvider : NSObject <FIRAppCheckProvider> @property FIRApp *app; - (id)initWithApp:(FIRApp *)app; @end @implementation YourCustomAppCheckProvider - (id)initWithApp:app { self = [super init]; if (self) { self.app = app; } return self; } - (void)getTokenWithCompletion:(nonnull void (^)(FIRAppCheckToken * _Nullable, NSError * _Nullable))handler { dispatch_async(dispatch_get_main_queue(), ^{ // Logic to exchange proof of authenticity for an App Check token. // ... // Create FIRAppCheckToken object. NSTimeInterval exp = expirationFromServer; FIRAppCheckToken *token = [[FIRAppCheckToken alloc] initWithToken:tokenFromServer expirationDate:[NSDate dateWithTimeIntervalSince1970:exp]]; // Pass the token or error to the completion handler. handler(token, nil); }); } @end
此外,实现一个AppCheckProviderFactory
类来创建AppCheckProvider
实现的实例:
迅速
class YourCustomAppCheckProviderFactory: NSObject, AppCheckProviderFactory { func createProvider(with app: FirebaseApp) -> AppCheckProvider? { return YourCustomAppCheckProvider(withFirebaseApp: app) } }
目标-C
@interface YourCustomAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory> @end @implementation YourCustomAppCheckProviderFactory - (nullable id<FIRAppCheckProvider>)createProviderWithApp:(FIRApp *)app { return [[YourCustomAppCheckProvider alloc] initWithApp:app]; } @end
3.初始化App Check
将以下初始化代码添加到您的应用委托或应用初始化程序中:
迅速
let providerFactory = YourAppCheckProviderFactory() AppCheck.setAppCheckProviderFactory(providerFactory) FirebaseApp.configure()
目标-C
YourAppCheckProviderFactory *providerFactory = [[YourAppCheckProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory]; [FIRApp configure];
下一步
在您的应用程序中安装 App Check 库后,开始将更新后的应用程序分发给您的用户。
更新后的客户端应用程序将开始发送 App Check 令牌及其向 Firebase 发出的每个请求,但 Firebase 产品不会要求令牌有效,直到您在 Firebase 控制台的 App Check 部分启用强制执行。
监控指标并启用强制执行
但是,在您启用强制执行之前,您应该确保这样做不会干扰您现有的合法用户。另一方面,如果您发现对应用资源的可疑使用,您可能希望尽快启用强制措施。
为帮助做出此决定,您可以查看您使用的服务的 App Check 指标:
启用 App Check 强制执行
当您了解 App Check 将如何影响您的用户并准备好继续操作时,您可以启用 App Check 强制执行:
- 为实时数据库、Cloud Firestore 和 Cloud Storage启用 App Check 强制执行。
- 为 Cloud Functions 启用 App Check 强制执行。
在调试环境中使用 App Check
如果在为 App Check 注册您的应用程序后,您希望在 App Check 通常不会归类为有效的环境中运行您的应用程序,例如开发期间的模拟器,或来自持续集成 (CI) 环境,您可以创建您的应用程序的调试版本,使用 App Check 调试提供程序而不是真正的证明提供程序。
请参阅在 Apple 平台上将 App Check 与调试提供程序一起使用。