本頁面說明如何使用自訂 App Check 供應器,在 Apple 應用程式中啟用 App Check。啟用 App Check 後,您就能確保只有您的應用程式可以存取專案的 Firebase 資源。
如果您想將 App Check 與內建的供應器搭配使用,請參閱App Check 搭配 App Attest 和 App Check 搭配 DeviceCheck 的說明文件。
事前準備
如果尚未將 Firebase 新增至 Apple 專案,請新增 Firebase。
1. 將 App Check 程式庫新增至應用程式
將 App Check 的依附元件新增至專案的
Podfile
:pod 'FirebaseAppCheck'
或者,您也可以改用 Swift Package Manager。
此外,請確認您使用的是任何依附 Firebase 服務的用戶端程式庫的最新版本。
執行
pod install
,並開啟已建立的.xcworkspace
檔案。
2. 實作 App Check 通訊協定
首先,您需要建立實作 AppCheckProvider
和 AppCheckProviderFactory
通訊協定的類別。
AppCheckProvider
類別必須具有 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() async throws -> AppCheckToken { let getTokenTask = Task { () -> AppCheckToken in // ... // Create AppCheckToken object. let exp = Date(timeIntervalSince1970: expirationFromServer) let token = AppCheckToken( token: tokenFromServer, expirationDate: exp ) if Date() > exp { throw NSError(domain: "ExampleError", code: 1, userInfo: nil) } return token } return try await getTokenTask.value } }
@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) } }
@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()
YourAppCheckProviderFactory *providerFactory = [[YourAppCheckProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory]; [FIRApp configure];
後續步驟
在應用程式中安裝 App Check 程式庫後,請開始向使用者發布更新版應用程式。
更新後的用戶端應用程式會開始傳送 App Check 權杖,並附帶每項對 Firebase 提出的要求,但 Firebase 產品不會要求權杖必須有效,除非您在 Firebase 控制台的 App Check 部分啟用強制執行功能。
監控指標並啟用強制執行機制
不過,啟用違規處置前,請先確認這麼做不會影響現有的合法使用者。另一方面,如果您發現應用程式資源遭到可疑使用,可能需要盡快啟用強制執行機制。
為協助您做出這項決定,您可以查看所用服務的 App Check 指標:
- 監控 Data Connect、Vertex AI in Firebase、Realtime Database、Cloud Firestore、Cloud Storage、Authentication、Google 身分識別服務 (適用於 iOS)、Maps JavaScript API 和 Places API (新推出) 的 App Check 要求指標。
- 監控 Cloud Functions 的 App Check 要求指標。
啟用 App Check 強制執行功能
瞭解 App Check 對使用者的影響,並準備繼續執行時,您可以啟用 App Check 強制執行機制:
- 為 Data Connect、Vertex AI in Firebase、Realtime Database、Cloud Firestore、Cloud Storage、Authentication、iOS 版 Google 身分識別、Maps JavaScript API 和 Places API (新版)啟用 App Check 強制執行。
- 為 Cloud Functions 啟用 App Check 強制執行設定。
在偵錯環境中使用 App Check
如果您在為應用程式註冊 App Check 後,想在 App Check 通常不會歸類為有效的環境中執行應用程式,例如開發期間的模擬器,或從持續整合 (CI) 環境,您可以建立應用程式的偵錯版本,使用 App Check 偵錯提供者,而非實際的認證提供者。
請參閱「在 Apple 平台上使用 App Check 與偵錯提供者」。