App Check を使用して API キーを保護する

Firebase App Check は、正当なアプリ以外のソースから送信されたトラフィックをブロックすることで、アプリから Google Maps Platform への呼び出しを保護します。これは、Play Integrity などの証明書プロバイダのトークンをチェックすることで行われます。アプリを App Check と統合すると、悪意のあるリクエストから保護されるため、不正な API 呼び出しに対して料金が発生することはありません。

App Check は私に適していますか?

ほとんどの場合、App Check の使用をおすすめしますが、次のケースでは App Check は必要ないか、サポートされていません。

  • 元の Places SDK を使用している。App Check は Places SDK(新規)でのみサポートされています
  • 限定公開アプリまたは試験運用版アプリ。アプリが一般公開されていない場合は、App Check は必要ありません。
  • アプリがサーバー間通信でのみ使用される場合は、App Check は必要ありません。ただし、GMP と通信するサーバーが一般公開されているクライアント(モバイルアプリなど)で使用されている場合は、GMP ではなく App Check を使用してそのサーバーを保護することを検討してください。
  • App Check で推奨される証明書プロバイダは、証明書プロバイダによって不正使用されているか信頼できないと判断されたデバイスでは機能しません。このようなデバイスをサポートする必要がある場合は、カスタム構成証明サービスをデプロイできます。詳しくは、手順をご覧ください。

実装手順の概要

アプリを App Check と統合する手順は、大まかに次のとおりです。

  1. Firebase をアプリに追加します。
  2. App Check ライブラリを追加して初期化します。
  3. トークン プロバイダを追加します。
  4. デバッグを有効にします。
  5. アプリのリクエストをモニタリングし、適用を決定します。

App Check を統合すると、Firebase コンソールでバックエンド トラフィックの指標を確認できるようになります。これらの指標は、有効な App Check トークンが付加されているかどうかでリクエストの内訳を示します。詳細については、Firebase App Check のドキュメントをご覧ください。

ほとんどのリクエストが正当なソースからのものであり、ユーザーが App Check の実装を含む最新バージョンのアプリに更新していることを確認できたら、適用を有効にできます。適用を有効にすると、App Check は有効な App Check トークンのないすべてのトラフィックを拒否します。

App Check の統合を計画する際の考慮事項

統合を計画する際に考慮すべき点は次のとおりです。

  • 推奨される構成証明プロバイダである Play Integrity には、Standard API の使用量ティアに対して 1 日あたりの呼び出し回数の上限があります。呼び出し数の上限の詳細については、Google Play Integrity デベロッパー ドキュメントの設定ページをご覧ください。

    カスタム構成証明プロバイダを使用することもできますが、これは高度なユースケースです。詳細については、App Check カスタム プロバイダを実装するをご覧ください。

  • アプリの起動時にレイテンシが発生します。ただし、その後は定期的な再構成証明がバックグラウンドで行われるため、ユーザーはレイテンシを感じなくなります。起動時のレイテンシの正確な値は、選択した構成証明プロバイダによって異なります。

    再構成証明の頻度は、App Check トークンが有効な期間(有効期間、TTL)によって決まります。この期間は Firebase コンソールで設定できます。再構成証明は、TTL の約半分が経過したときに行われます。詳細については、証明書プロバイダの Firebase のドキュメントをご覧ください。

アプリを App Check と統合する

前提条件と要件

  • バージョン 4.1 以降の Places SDK が統合されたアプリ。
  • アプリの SHA-256 フィンガープリント。
  • アプリのパッケージ名。
  • Cloud コンソールでアプリの所有者である必要があります。
  • Cloud コンソールからアプリのプロジェクト ID を取得する必要があります。

ステップ 1: Firebase をアプリに追加する

Firebase デベロッパー ドキュメントの手順に沿って、Firebase をアプリに追加します。

ステップ 2: App Check ライブラリを追加して App Check を初期化する

デフォルトの構成証明プロバイダである Play Integrity の使用方法については、Android で Play Integrity を使用して App Check を使ってみるをご覧ください。

  1. まだ統合していない場合は、Places SDK をアプリに統合します。
  2. 次に、App CheckPlaces クライアントを初期化します。

    // Initialize App Check
    FirebaseApp.initializeApp(/*context=*/ this);
    FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
    firebaseAppCheck.installAppCheckProviderFactory(
            PlayIntegrityAppCheckProviderFactory.getInstance());
      
    // Initialize Places SDK
    Places.initializeWithNewPlacesApiEnabled(context, API_KEY);
    PlacesClient client = Places.createClient(context);.

ステップ 3: トークン プロバイダを追加する

Places API を初期化したら、setPlacesAppCheckTokenProvider() を呼び出して PlacesAppCheckTokenProvider を設定します。

Places.initializeWithNewPlacesApiEnabled(context, API_KEY);
Places.setPlacesAppCheckTokenProvider(new TokenProvider());
PlacesClient client = Places.createClient(context);.

トークン取得インターフェースの実装例を次に示します。

  /** Sample client implementation of App Check token fetcher interface. */
  static class TokenProvider implements PlacesAppCheckTokenProvider {
    @Override
    public ListenableFuture<String> fetchAppCheckToken() {
      SettableFuture<String> future = SettableFuture.create();
      FirebaseAppCheck.getInstance()
          .getAppCheckToken(false)
          .addOnSuccessListener(
              appCheckToken -> {
                future.set(appCheckToken.getToken());
              })
          .addOnFailureListener(
              ex -> {
                future.setException(ex);
              });

      return future;
    }
  }

ステップ 4: デバッグを有効にする(省略可)

アプリをローカルで開発してテストする場合や、継続的インテグレーション(CI)環境で実行する場合は、デバッグシークレットを使用して有効な App Check トークンを取得するアプリのデバッグビルドを作成できます。これにより、デバッグビルドで実際の構成証明プロバイダを使用する必要がなくなります。

エミュレータまたはテストデバイスでアプリを実行するには:

  • App Check ライブラリを build.gradle ファイルに追加します。
  • デバッグビルドでデバッグ プロバイダ ファクトリを使用するように App Check を構成します。
  • アプリを起動すると、ローカル デバッグ トークンが作成されます。このトークンを Firebase コンソールに追加します。
  • 詳細と手順については、App Check のドキュメントをご覧ください。

CI 環境でアプリを実行するには:

  • Firebase コンソールでデバッグ トークンを作成し、CI システムの安全なキーストアに追加します。
  • App Check ライブラリを build.gradle ファイルに追加します。
  • デバッグ トークンを使用するように CI ビルド バリアントを構成します。
  • App Check トークンを必要とするテストクラスのコードは、DebugAppCheckTestHelper でラップします。
  • 詳細と手順については、App Check のドキュメントをご覧ください。

ステップ 5: アプリのリクエストをモニタリングして適用を決定する

適用を開始する前に、アプリの正規ユーザーに支障をきたさないようにする必要があります。そのためには、App Check 指標画面で、アプリのトラフィックのどの程度が確認済み、古い、または不正であるかを確認します。トラフィックの大部分が確認されたら、適用を有効にできます。

詳細と手順については、Firebase App Check のドキュメントをご覧ください。