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 のドキュメントをご覧ください。