開始在 Apple 平台上通過自定義提供程序使用 App Check

本頁向您展示如何使用自定義 App Check 提供程序在 Apple 應用程序中啟用 App Check。啟用應用檢查後,您可以幫助確保只有您的應用可以訪問項目的 Firebase 資源。

如果您想將 App Check 與內置提供程序一起使用,請參閱App Check 與 App AttestApp Check 與 DeviceCheck的文檔。

在你開始之前

1. 將 App Check 庫添加到您的應用程序中

  1. 將 App Check 的依賴項添加到項目的Podfile中:

    pod 'FirebaseAppCheck'

    或者,您也可以使用Swift Package Manager

    另外,請確保您使用的是您所依賴的任何 Firebase 服務客戶端庫的最新版本。

  2. 運行pod install並打開創建的.xcworkspace文件。

2. 實施App Check協議

首先,您需要創建實現AppCheckProviderAppCheckProviderFactory協議的類。

您的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(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)
        }
    }
}

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實現的實例:

迅速

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. 初始化應用檢查

將以下初始化代碼添加到您的應用程序委託或應用程序初始化程序中:

迅速

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 部分中啟用強制執行之前,Firebase 產品不會要求令牌有效。

監控指標並啟用執行

但是,在啟用強制執行之前,您應該確保這樣做不會干擾您現有的合法用戶。另一方面,如果您發現應用程序資源的可疑使用,您可能希望盡快啟用強制執行。

為了幫助做出此決定,您可以查看您使用的服務的 App Check 指標:

啟用應用程序檢查強制執行

當您了解 App Check 將如何影響您的用戶並且準備好繼續操作後,您可以啟用 App Check 強制執行:

在調試環境中使用 App Check

如果在為 App Check 註冊您的應用程序後,您希望在 App Check 通常不會歸類為有效的環境中運行您的應用程序,例如開發期間的模擬器,或在持續集成 (CI) 環境中,您可以創建應用程序的調試版本,該版本使用 App Check 調試提供程序而不是真正的證明提供程序。

請參閱在 Apple 平台上使用 App Check 與調試提供程序