プラットフォームを選択: Android iOS JavaScript

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

Firebase App Check は、正規のアプリ以外のソースから発信されたトラフィックをブロックすることで、アプリから Google Maps Platform への呼び出しを保護します。これは、App Attest などのアテステーション プロバイダからのトークンを確認することで行われます。アプリを 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. Places API と App Check API を初期化します。
  5. デバッグを有効にします。
  6. アプリのリクエストをモニタリングし、適用を決定します。

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

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

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

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

  • おすすめの証明書プロバイダである Device Check または App Attest には、Apple によって設定された割り当てと制限が適用されます。

    カスタム証明書プロバイダを使用することもできますが、これは高度なユースケースです。詳細については、Firebase App Check のドキュメントをご覧ください。

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

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

アプリを App Check と統合する

前提条件と要件

  • Places SDK バージョン 9.2 以降がインストールされているアプリ。
  • アプリのバンドル ID
  • Apple Member Center の [Membership] にあるチーム ID。
  • Device Check を使用する場合は、秘密鍵ファイル鍵 ID
  • Cloud Console でアプリの所有者である必要があります。
  • Cloud Console からアプリのプロジェクト ID を取得する必要があります。

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

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

アプリを登録すると、構成ファイル GoogleService-Info.plist が取得されます。このファイルを変更せずにアプリのルートレベルに追加します。

Places Swift SDK for iOS

import FirebaseCore
import FirebaseAppCheck
import GooglePlacesSwift

Swift

import FirebaseCore
import FirebaseAppCheck
import GooglePlaces

Objective-C

@import FirebaseCore;      
@import FirebaseAppCheck;
@import GooglePlaces;

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

Firebase には、デフォルトの各証明書プロバイダの手順が用意されています。この手順では、Firebase プロジェクトを設定し、App Check ライブラリをアプリに追加する方法について説明します。提供されているコードサンプルに沿って、App Check を初期化してください。

  1. Firebase の手順に沿って App Check ライブラリを追加します。
  2. App Check を初期化します。
    • App Attest を使用している場合は、App Attest に関する Firebase デベロッパー ドキュメントをご覧ください。

      Firebase App Check の手順に沿って、AppCheckProviderFactory の実装を作成し、AppDelegate ファイルに追加します。

      Places Swift SDK for iOS

      let providerFactory = YourAppCheckProviderFactory()
      AppCheck.setAppCheckProviderFactory(providerFactory)

      Swift

      let providerFactory = YourAppCheckProviderFactory()
      AppCheck.setAppCheckProviderFactory(providerFactory)

      Objective-C

      YourAppCheckProviderFactory *providerFactory =
          [[YourAppCheckProviderFactory alloc] init];
      [FIRAppCheck setAppCheckProviderFactory:providerFactory];
         
    • Device Check を使用している場合は、AppDelegate に次のものを追加します。

      Places Swift SDK for iOS

      AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())

      Swift

      AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())

      Objective-C

      [FIRAppCheck setAppCheckProviderFactory:providerFactory];
            

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

アプリのルートレベルに AppCheckTokenProvider というファイル(Objective-C を使用している場合は AppCheckTokenProvider.hAppCheckTokenProvider.m という 2 つのファイル)を作成します。 次のインポート ステートメントとクラス定義を追加します。

Places Swift SDK for iOS

// AppCheckTokenProvider.swift

import FirebaseAppCheck
import Foundation
import GooglePlacesSwift
      
struct TokenProvider: AppCheckTokenProvider {
  func fetchAppCheckToken() async throws -> String {
    return try await AppCheck.appCheck().token(forcingRefresh: false).token
  }
}
      

Swift

// AppCheckTokenProvider.swift

import FirebaseAppCheck
import Foundation
import GooglePlaces

class AppCheckTokenProvider: NSObject, GMSPlacesAppCheckTokenProvider {
  func fetchAppCheckToken() async throws -> String {
    return try await AppCheck.appCheck().token(forcingRefresh: false).token
  }
}

Objective-C

// AppCheckTokenProvider.h

@import Foundation;
@import GooglePlaces;

@interface AppCheckTokenProvider : NSObject <GMSPlacesAppCheckTokenProvider>
@end

// AppCheckTokenProvider.m

#import "AppCheckTokenProvider.h"

@import FirebaseAppCheck;

@implementation AppCheckTokenProvider

- (void)fetchAppCheckTokenWithCompletion:(nonnull GMSAppCheckTokenCompletion)completion {
  [[FIRAppCheck appCheck]
      tokenForcingRefresh:NO
               completion:^(FIRAppCheckToken *_Nullable token, NSError *_Nullable error) {
                 if (token) {
                   completion(token.token, nil);
                 } else {
                   completion(nil, error);
                 }
               }];
}

@end

ステップ 4: Places API と App Check API を初期化する

  1. AppDelegate ファイルで、Places API を初期化します。

    Places Swift SDK for iOS

    PlacesClient.provideAPIKey("YOUR_API_KEY")

    Swift

    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")

    Objective-C

    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];
  2. 次に、App Check API を初期化します。

    Places Swift SDK for iOS

    PlacesClient.setAppCheckTokenProvider(AppCheckTokenProvider())

    Swift

    GMSPlacesClient.setAppCheckTokenProvider(AppCheckTokenProvider())

    Objective-C

    [GMSPlacesClient setAppCheckTokenProvider:[[AppCheckTokenProvider alloc] init]];

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

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

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

  • App Check デバッグ プロバイダのファクトリを作成して設定します。

    このコードサンプルは、デバッグ シナリオと本番環境シナリオの両方を処理します。

    Places Swift SDK for iOS

    #if targetEnvironment(simulator)
          let providerFactory = AppCheckDebugProviderFactory()
    #else
          let providerFactory = YourAppCheckProviderFactory()
    #endif

    Swift

    #if targetEnvironment(simulator)
          let providerFactory = AppCheckDebugProviderFactory()
    #else
          let providerFactory = YourAppCheckProviderFactory()
    #endif

    Objective-C

    if (targetEnvironment == simulator){
    
    FIRAppCheckDebugProviderFactory *providerFactory =
          [[FIRAppCheckDebugProviderFactory alloc] init];
    [FIRAppCheck setAppCheckProviderFactory:providerFactory];
    }
    
    else {
    
    YourAppCheckProviderFactory *providerFactory =
          [[YourAppCheckProviderFactory alloc] init];
    [FIRAppCheck setAppCheckProviderFactory:providerFactory];
    }
        
  • Xcode プロジェクトでロギングを有効にしてアプリを起動し、ログでローカル デバッグ トークンを見つけます。
  • このトークンを Firebase コンソールに追加します。
  • 詳細と手順については、App Check のドキュメントをご覧ください。

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

  • Firebase コンソールでデバッグトークンを作成し、CI システムの安全なキーストアに追加します。
  • Xcode で、FIRAAppCheckDebugToken という名前のテストスキームと $(APP_CHECK_DEBUG_TOKEN)(または類似のもの)に環境変数を値として追加します。
  • CI テスト スクリプトで、デバッグ トークンを環境変数として渡します。
  • App Check デバッグ プロバイダのファクトリを作成して設定します。

    このコードサンプルは、デバッグ シナリオと本番環境シナリオの両方を処理します。

    Places Swift SDK for iOS

    #if DEBUG
      let providerFactory = AppCheckDebugProviderFactory()
    #else
      let providerFactory = YourAppCheckProviderFactory()
    #endif
    AppCheck.setAppCheckProviderFactory(providerFactory)
      

    Swift

    #if DEBUG
      let providerFactory = AppCheckDebugProviderFactory()
    #else
      let providerFactory = YourAppCheckProviderFactory()
    #endif
    AppCheck.setAppCheckProviderFactory(providerFactory)
      

    Objective-C

    #if DEBUG
    id<FIRAppCheckProviderFactory> providerFactory =
        [[FIRAppCheckDebugProviderFactory alloc] init];
    #else  // DEBUG
    id<FIRAppCheckProviderFactory> providerFactory =
        [[YourAppCheckProviderFactory alloc] init];
    #endif  // DEBUG
    AppCheck.setAppCheckProviderFactory(providerFactory)
  • 詳細と手順については、App Check のドキュメントをご覧ください。

ステップ 6: アプリのリクエストをモニタリングし、強制措置を決定する

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

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