オプションの Firebase App Distribution iOS SDK と Android SDK を使用すると、アプリの新しいビルドがインストール可能になった場合にアプリ内アラートをテスターに表示できます。このガイドでは、App Distribution iOS SDK と Android SDK を使用してテスター向けの新しいビルドアラートを作成する方法と、それをカスタマイズする方法について説明します。
始める前に
まだ Firebase を Android プロジェクトに追加していない場合は追加します。
ステップ 1: App Distribution Tester API を有効にする
- Google Cloud コンソールでプロジェクトを選択します。 
- [Firebase App Testers API] で [有効にする] をクリックします。 
ステップ 2: アプリに App Distribution を追加する
App Distribution Android SDK は、次の 2 つのライブラリで構成されています。
- firebase-appdistribution-api- API のみのライブラリ。すべてのビルド バリアントに含めることができます。
- firebase-appdistribution- SDK の完全な実装(オプション)。
API のみのライブラリを使用すると、コードから SDK を呼び出せます。SDK の完全な実装がない場合、この呼び出しは無視されます。
App Distribution Android SDK の依存関係は、モジュール(アプリレベル)の Gradle ファイル(通常は <project>/<app-module>/build.gradle.kts または <project>/<app-module>/build.gradle)で宣言します。SDK の完全な実装にある自己更新機能が Play ビルドに含まれないようにするには、API のみのライブラリの依存関係をすべてのビルド バリアントに追加します。SDK の完全な実装は、リリース前のテスト専用のバリアントにのみ追加してください。
dependencies {
    // ADD the API-only library to all variants
    implementation("com.google.firebase:firebase-appdistribution-api:16.0.0-beta17")
    // ADD the full SDK implementation to the "beta" variant only (example)
    betaImplementation("com.google.firebase:firebase-appdistribution:16.0.0-beta17")
}
Kotlin 固有のライブラリ モジュールをお探しの場合、2023 年 10 月のリリース以降は、Kotlin と Java のどちらのデベロッパーもメイン ライブラリ モジュールを利用できるようになります(詳しくは、このイニシアチブに関するよくある質問をご覧ください)。
ステップ 3: アプリ内アラートを構成する
App Distribution Android SDK でテスター向けのアプリ内ビルドアラートを設定するには、次の方法があります。
- 基本アラート構成: テスターに対して表示される、アプリのアップデートとログインのための事前構築済みのダイアログが含まれます。
- 詳細アラート構成: 独自のユーザー インターフェースをカスタマイズできます。
App Distribution Android SDK を初めて使用する場合は、基本的な構成を使用することをおすすめします。
基本的な構成
updateIfNewReleaseAvailable を使用して、アラートをまだ有効にしていないテスターに対して事前構築済みの有効化アラート ダイアログを表示し、新しいビルドが提供されているかどうかを確認します。このメソッドを呼び出すと、このメソッドにより次のシーケンスが実行されます。
- テスターがアラートを有効にしているか確認します。テスターがまだアラートを有効にしていない場合、Google アカウントを使用して App Distribution にログインするよう促すプロンプトがテスターに表示されます。 
- 対象のテスター向けの新しいインストール ビルドがあるかどうか確認します。 
- 事前構築済みのアラートをテスターに表示して、アップデートを促します。 
- 新しいビルドが Android App Bundle(AAB)の場合、テスターは Google Play にリダイレクトされ、そこでアップデート プロセスを完了します。 - 新しいビルドが Android Application Package(APK)の場合、SDK はバックグラウンドで新しいビルドをダウンロードします。ダウンロードが完了すると、インストールを促すプロンプトがテスターに表示されます。SDK は - NotificationManagerを使用して、ダウンロードの進行状況の通知をユーザーに送信します。- onProgressUpdateハンドラを- updateIfNewReleaseAvailableタスクにアタッチして独自の進行状況インジケーターを追加することもできます。
アプリの任意の場所で updateIfNewReleaseAvailable を呼び出すことができます。たとえば、アプリのメイン アクティビティの onResume メソッドの実行中に、updateIfNewReleaseAvailable を呼び出すことができます。
次の例では、テスターがアラートを有効にしているかどうか、また、新しいビルドにアクセスできるかどうかを確認します。それらの条件が満たされている場合、ビルドのインストールが可能になるとダイアログが表示されます。
Kotlin
// Copy and paste this into any part of your app - for example, in your main
// activity's onResume method.
val firebaseAppDistribution = FirebaseAppDistribution.getInstance()
firebaseAppDistribution.updateIfNewReleaseAvailable()
    .addOnProgressListener { updateProgress ->
      // (Optional) Implement custom progress updates in addition to
      // automatic NotificationManager updates.
    }
    .addOnFailureListener { e ->
      // (Optional) Handle errors.
      if (e is FirebaseAppDistributionException) {
        when (e.errorCode) {
          Status.NOT_IMPLEMENTED -> {
            // SDK did nothing. This is expected when building for Play.
          }
          else -> {
            // Handle other errors.
          }
        }
      }
    }
Java
// Copy and paste this into any part of your app - for example, in your main
// activity's onResume method.
FirebaseAppDistribution firebaseAppDistribution = FirebaseAppDistribution.getInstance();
firebaseAppDistribution.updateIfNewReleaseAvailable()
    .addOnProgressListener(updateProgress -> {
      // (Optional) Implement custom progress updates in addition to
      // automatic NotificationManager updates.
    })
    .addOnFailureListener(e -> {
      // (Optional) Handle errors.
      if (e instanceof FirebaseAppDistributionException) {
        switch (((FirebaseAppDistributionException)e).getErrorCode()) {
          case NOT_IMPLEMENTED:
            // SDK did nothing. This is expected when building for Play.
            break;
          default:
            // Handle other errors.
            break;
        }
      }
    });
詳細構成
ログインの詳細構成
signInTester メソッドと isTesterSignedIn メソッドを使用すると、テスターのログイン エクスペリエンスを柔軟にカスタマイズでき、操作感をアプリのデザインに合わせることができます。
次の例では、テスターが App Distribution テスター アカウントにすでにログインしているかどうかを確認します。これにより、まだログインしていないテスターにのみログイン ユーザー インターフェース(UI)を表示できます。テスターがログインしたら、updateIfNewReleaseAvailable を呼び出して、テスターが新しいビルドにアクセスできるかどうかを確認します。
Kotlin
// Only show sign-in UI if this is the "beta" variant (example).
if (BuildConfig.BUILD_TYPE == "beta" && !firebaseAppDistribution.isTesterSignedIn) {
    // Start your sign-in UI here.
}
// Only check for updates if the tester is already signed in (do not prompt).
if (firebaseAppDistribution.isTesterSignedIn) {
    firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener {
        // Handle failed update.
    }
}
Java
// Only show sign-in UI if this is the "beta" variant (example).
if (BuildConfig.BUILD_TYPE == "beta" && !firebaseAppDistribution.isTesterSignedIn()) {
    // Start your sign-in UI here.
}
// Only check for updates if the tester is already signed in (do not prompt).
if (firebaseAppDistribution.isTesterSignedIn()) {
    firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener( e -> {
        // Handle failed update.
    });
}
ログイン UI でテスターが続行を選択したときに signInTester() を呼び出します。
Kotlin
firebaseAppDistribution.signInTester().addOnSuccessListener {
  // Handle successful sign-in.
}.addOnFailureListener {
  // Handle failed sign-in.
});
Java
firebaseAppDistribution.signInTester().addOnSuccessListener( unused -> {
  // Handle successful sign-in.
}).addOnFailureListener(e -> {
  // Handle failed sign-in.
});
アップデートの詳細構成
checkForNewRelease メソッドと updateApp メソッドを使用すると、テスターにアップデートを促す際のプロンプトを柔軟にカスタマイズできます。また、事前構築済みのアップデート ダイアログやダウンロード進行状況インジケーターをカスタマイズして、アプリのデザインに合わせることもできます。
なお、updateApp にはダウンロードの進行状況を示す機能はありません。したがって、NotificationManager を使用するか、なんらかのアプリ内ステータス表示を使用するか、または他のアプローチを使用して、独自の進行状況表示を実装する必要があります。
次の例では、新しいリリースが提供されているかどうかを確認してから、カスタム UI を表示します。checkForNewRelease と updateApp を呼び出す前にログインの詳細構成を使用して、テスターがログインしていることを確認してください。
Kotlin
firebaseAppDistribution.checkForNewRelease().addOnSuccessListener { release ->
    if (release != null) {
        // New release available. Start your update UI here.
    }
}.addOnFailureListener {
    // Handle failed check for new release. Fails with Status#NOT_IMPLEMENTED
    // if built for Play.
}
Java
firebaseAppDistribution.checkForNewRelease().addOnSuccessListener(release -> {
    if (release != null) {
        // New release available. Start your update UI here.
    }
}).addOnFailureListener(e -> {
    // Handle failed check for new release. Fails with Status#NOT_IMPLEMENTED
    // if built for Play.
});
アップデート UI でテスターがアップデートの続行を選択したときに updateApp() を呼び出します。
Kotlin
firebaseAppDistribution.updateApp()
    .addOnProgressListener { updateState ->
      // Use updateState to show update progress.
    }
Java
firebaseAppDistribution.updateApp()
    .addOnProgressListener(updateState -> {
      // Use updateState to show update progress.
    });
ステップ 4: 実装をビルドしてテストする
アプリをビルドし、Firebase コンソールを使用してテスターにビルドを配布して実装をテストします。
次のような一般的な問題については、App Distribution のトラブルシューティング ガイドをご覧ください。
- テスターがアプリ内アラートを受信できない
- テスターが Google へのログインを複数回求められる