Firebase Summit で発表されたすべての情報をご覧ください。Firebase を使用してアプリ開発を加速し、自信を持ってアプリを実行する方法を紹介しています。詳細

Androidのデバッグプロバイダーでアプリチェックを使用する

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

エミュレーターでデバッグ プロバイダーを使用する

エミュレーターでアプリをインタラクティブに実行しているときに (開発中などに) デバッグ プロバイダーを使用するには、次の手順を実行します。

  1. モジュール (アプリ レベル) の Gradle ファイル (通常はapp/build.gradle ) で、App Check Android ライブラリの依存関係を宣言します。

    Java

    dependencies {
        implementation 'com.google.firebase:firebase-appcheck-debug:16.1.0'
    }
    

    Kotlin+KTX

    dependencies {
        implementation 'com.google.firebase:firebase-appcheck-debug:16.1.0'
    }
    
  2. デバッグ ビルドで、デバッグ プロバイダー ファクトリを使用するように App Check を構成します。

    Java

    FirebaseApp.initializeApp(/*context=*/ this);
    FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
    firebaseAppCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance());

    Kotlin+KTX

    FirebaseApp.initializeApp(/*context=*/this)
    val firebaseAppCheck = FirebaseAppCheck.getInstance()
    firebaseAppCheck.installAppCheckProviderFactory(
        DebugAppCheckProviderFactory.getInstance()
    )
  3. アプリを起動し、Firebase バックエンド サービスへの呼び出しをトリガーします。 SDK がバックエンドにリクエストを送信しようとすると、ローカル デバッグ トークンがログに記録されます。例えば:

    D DebugAppCheckProvider: Enter this debug secret into the allow list in
    the Firebase Console for your project: 123a4567-b89c-12d3-e456-789012345678
  4. Firebase コンソールの [ App Check ] セクションで、アプリのオーバーフロー メニューから[Manage debug tokens ] を選択します。次に、前の手順でログに記録したデバッグ トークンを登録します。

    [デバッグ トークンの管理] メニュー項目のスクリーンショット

トークンを登録すると、Firebase バックエンド サービスはそれを有効なものとして受け入れます。

このトークンを使用すると、有効なデバイスがなくても Firebase リソースにアクセスできるため、非公開にしておくことが重要です。公開リポジトリにコミットしないでください。登録済みのトークンが侵害された場合は、Firebase コンソールですぐに取り消してください。

CI 環境での単体テストにデバッグ プロバイダーを使用する

継続的インテグレーション (CI) 環境で単体テストにデバッグ プロバイダーを使用するには、次の手順を実行します。

  1. Firebase コンソールの [ App Check ] セクションで、アプリのオーバーフロー メニューから[Manage debug tokens ] を選択します。次に、新しいデバッグ トークンを作成します。次のステップでトークンが必要になります。

    このトークンを使用すると、有効なデバイスがなくても Firebase リソースにアクセスできるため、非公開にしておくことが重要です。公開リポジトリにコミットしないでください。登録済みのトークンが侵害された場合は、Firebase コンソールですぐに取り消してください。

    [デバッグ トークンの管理] メニュー項目のスクリーンショット

  2. 作成したばかりのデバッグ トークンを CI システムのセキュア キー ストアに追加します (たとえば、GitHub Actions の暗号化されたシークレットまたは Travis CI の暗号化された変数)。

  3. 必要に応じて、デバッグ トークンを CI 環境内で環境変数として使用できるように CI システムを構成します。変数にAPP_CHECK_DEBUG_TOKEN_FROM_CIのような名前を付けます。

  4. モジュール (アプリレベル) の Gradle ファイル (通常はapp/build.gradle ):

    1. App Check Android デバッグ ライブラリのテスト依存関係を宣言します。

      Java

      dependencies {
          androidTestImplementation 'com.google.firebase:firebase-appcheck-debug-testing:16.1.0'
      }
      

      Kotlin+KTX

      dependencies {
          androidTestImplementation 'com.google.firebase:firebase-appcheck-debug-testing:16.1.0'
      }
      
    2. CI ビルド バリアントの構成に以下を追加します。

      testInstrumentationRunnerArgument "firebaseAppCheckDebugSecret", System.getenv("APP_CHECK_DEBUG_TOKEN_FROM_CI") ?: ''
      
  5. テスト クラスで、 DebugAppCheckTestHelperを使用して、App Check トークンが必要なコードをラップします。

    Java

    @RunWith(AndroidJunit4.class)
    public class YourTests {
        private final DebugAppCheckTestHelper debugAppCheckTestHelper =
                DebugAppCheckTestHelper.fromInstrumentationArgs();
    
        @Test
        public void testWithDefaultApp() {
            debugAppCheckTestHelper.withDebugProvider(() -> {
                // Test code that requires a debug AppCheckToken.
            });
        }
    
        @Test
        public void testWithNonDefaultApp() {
            debugAppCheckTestHelper.withDebugProvider(
                    FirebaseApp.getInstance("nonDefaultApp"),
                    () -> {
                        // Test code that requires a debug AppCheckToken.
                    });
        }
    }
    

    Kotlin+KTX

    @RunWith(AndroidJunit4::class)
    class MyTests {
        private val debugAppCheckTestHelper =
            DebugAppCheckTestHelper.fromInstrumentationArgs()
    
        @Test
        fun testWithDefaultApp() {
            debugAppCheckTestHelper.withDebugProvider {
                // Test code that requires a debug AppCheckToken.
            }
        }
    
        @Test
        fun testWithNonDefaultApp() {
            debugAppCheckTestHelper.withDebugProvider(
                FirebaseApp.getInstance("nonDefaultApp")
            ) {
                // Test code that requires a debug AppCheckToken.
            }
        }
    }
    

アプリが CI 環境で実行されると、Firebase バックエンド サービスは、送信されたトークンを有効なものとして受け入れます。