Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

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

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

  1. お使いのモジュールで(アプリレベル)のGradleファイル(通常はapp/build.gradle )、アプリケーションはAndroidのライブラリを確認するために、依存関係を宣言します。

    Java

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

    Kotlin + KTX

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

    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コンソールのセクション、あなたのアプリのオーバーフローメニューからデバッグトークンを管理]を選択します。次に、前の手順でログインしたデバッグトークンを登録します。

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

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

このトークンは、有効なデバイスがなくてもFirebaseリソースへのアクセスを許可するため、プライベートに保つことが重要です。パブリックリポジトリにコミットしないでください。登録されたトークンが侵害された場合は、Firebaseコンソールですぐに取り消してください。

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

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

  1. プロジェクト設定>アプリケーションのチェックFirebaseコンソールのセクション、あなたのアプリのオーバーフローメニューからデバッグトークンを管理]を選択します。次に、新しいデバッグトークンを作成します。次のステップでトークンが必要になります。

    このトークンは、有効なデバイスがなくてもFirebaseリソースへのアクセスを許可するため、プライベートに保つことが重要です。パブリックリポジトリにコミットしないでください。登録されたトークンが侵害された場合は、Firebaseコンソールですぐに取り消してください。

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

  2. あなたは自分のCIシステムのセキュアキーストアに作成されたトークンのデバッグを追加します(例えば、GitHubのアクション暗号化された秘密やトラビスCIの暗号化された変数)。

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

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

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

      Java

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

      Kotlin + KTX

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

      testInstrumentationRunnerArgument "firebaseAppCheckDebugSecret", System.getenv("APP_CHECK_DEBUG_TOKEN_FROM_CI") ?: ''
      
  5. あなたのテストクラスでは、使用DebugAppCheckTestHelperアプリケーションがトークンチェック必要なすべてのコードをラップします:

    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バックエンドサービスは送信したトークンを有効なものとして受け入れます。