Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

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

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

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

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

    Java

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

    Kotlin + KTX

    dependencies {
        implementation 'com.google.firebase:firebase-appcheck-debug:16.0.0-beta03'
    }
    
  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-beta03'
      }
      

      Kotlin + KTX

      dependencies {
          androidTestImplementation 'com.google.firebase:firebase-appcheck-debug-testing:16.0.0-beta03'
      }
      
    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バックエンドサービスは送信したトークンを有効なものとして受け入れます。