Apple プラットフォームでカスタム プロバイダを使用して App Check を使ってみる

このページでは、カスタム App Check プロバイダを使用して、Apple アプリで App Check を有効にする方法を説明します。App Check を有効にすると、自分のアプリだけがプロジェクトの Firebase リソースにアクセスできるようになります。

組み込みのプロバイダで App Check を使用する場合は、App Attest を使用した App CheckDeviceCheck を使用した App Check のドキュメントをご覧ください。

始める前に

1. アプリに App Check ライブラリを追加する

  1. App Check の依存関係をプロジェクトの Podfile に追加します。

    pod 'FirebaseAppCheck'

    また、Swift Package Manager を使用することもできます。

    依存する Firebase サービス クライアント ライブラリの最新バージョンを使用していることも確認します。

  2. 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

また、AppCheckProvider 実装のインスタンスを作成する AppCheckProviderFactory クラスを実装します。

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] セクションで適用を有効にするまで、Firebase プロダクトは有効なトークンを必要としません。

指標をモニタリングして適用を有効にする

ただし、適用を有効にする前に、既存の正規ユーザーを中断しないように対策を行う必要があります。一方、アプリリソースの不審な使用に気づいた場合は、すぐに適用を有効にすることもできます。

使用するサービスの App Check 指標を確認すると、この決定を行ううえで役立ちます。

App Check の適用を有効にする

App Check がユーザーに与える影響を理解し、続行する準備ができたら、App Check の適用を有効にします。

デバッグ環境で App Check を使用する

アプリを App Check に登録した後に、App Check が有効と分類しないアプリを開発中のシミュレータや継続的インテグレーション(CI)環境などで実行する場合は、実際の証明書プロバイダの代わりに App Check デバッグ プロバイダを使用するデバッグビルドをアプリに作成できます。

Apple プラットフォームで App Check とデバッグ プロバイダを使用するをご覧ください。