本頁面說明如何使用自訂 App Check 提供者,在 Apple 應用程式中啟用 App Check。啟用 App Check 後,您就能確保只有應用程式可以存取專案的 Firebase 資源。
如要搭配內建供應商使用 App Check,請參閱「搭配 App Attest 使用 App Check」和「搭配 DeviceCheck 使用 App Check」說明文件。
事前準備
將 Firebase 新增至 Apple 專案 (如果尚未新增)。
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:)
的實作中取得新權杖。
Swift
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 } }
Objective-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
實作項目的例項:
Swift
class YourCustomAppCheckProviderFactory: NSObject, AppCheckProviderFactory { func createProvider(with app: FirebaseApp) -> AppCheckProvider? { return YourCustomAppCheckProvider(withFirebaseApp: app) } }
Objective-C
@interface YourCustomAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory> @end @implementation YourCustomAppCheckProviderFactory - (nullable id<FIRAppCheckProvider>)createProviderWithApp:(FIRApp *)app { return [[YourCustomAppCheckProvider alloc] initWithApp:app]; } @end
3. 初始化 App Check
在應用程式委派或應用程式初始化程式中,加入下列初始化程式碼:
Swift
let providerFactory = YourAppCheckProviderFactory() AppCheck.setAppCheckProviderFactory(providerFactory) FirebaseApp.configure()
Objective-C
YourAppCheckProviderFactory *providerFactory = [[YourAppCheckProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory]; [FIRApp configure];
後續步驟
在應用程式中安裝 App Check 程式庫後,即可開始向使用者發布更新版應用程式。
更新後的用戶端應用程式會開始在每次向 Firebase 發出的要求中,一併傳送 App Check 權杖,但您必須在 Firebase 控制台的「App Check」App Check 部分啟用強制執行功能,Firebase 產品才會要求權杖有效。
監控指標並啟用強制執行功能
不過,啟用強制執行前,請先確認這麼做不會影響現有的合法使用者。另一方面,如果發現應用程式資源有可疑的使用情形,建議盡快啟用強制執行功能。
如要協助做出這項決定,您可以查看所用服務的 App Check 指標:
- 監控 App Check 要求的指標,適用於 Data Connect、Firebase AI Logic、Realtime Database、Cloud Firestore、Cloud Storage、Authentication、適用於 iOS 的 Google Identity、Maps JavaScript API 和 Places API (新版)。
- 監控 App Check Cloud Functions 的要求指標。
啟用App Check強制執行功能
瞭解 App Check 對使用者的影響後,即可啟用 App Check 強制執行:
- 針對 Data Connect、Firebase AI Logic、Realtime Database、Cloud Firestore、Cloud Storage、Authentication、Google Identity for iOS、Maps JavaScript API 和 Places API (新版),啟用 App Check 強制執行。
- 為 Cloud Functions 啟用 App Check 強制執行功能。
在偵錯環境中使用 App Check
在註冊應用程式以使用 App Check 後,如果想在 App Check 通常不會歸類為有效的環境中執行應用程式,例如開發期間的模擬器,或是來自持續整合 (CI) 環境,您可以建立應用程式的偵錯版本,使用 App Check 偵錯供應器,而非實際的認證供應器。
請參閱「在 Apple 平台上使用偵錯供應器搭配 App Check」。