新しいビルドについてテスターに通知する

オプションの Firebase App Distribution iOS および Android SDK を使用すると、アプリの新しいビルドがインストール可能になった場合にアプリ内アラートをテスターに表示できます。このガイドでは、App Distribution iOS および Android SDK を使用してテスター向けの新しいビルドアラートを作成する方法と、それをカスタマイズする方法について説明します。

始める前に

まだ Firebase を Android プロジェクトに追加していない場合は追加します。

ステップ 1: App Distribution Tester API を有効にする

  1. Google Cloud Console でプロジェクトを選択します。

  2. [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 の完全な実装は、リリース前のテスト専用のバリアントにのみ追加してください。

Kotlin+KTX

dependencies {
    // ADD the API-only library to all variants
    implementation("com.google.firebase:firebase-appdistribution-api-ktx:16.0.0-beta10")

    // ADD the full SDK implementation to the "beta" variant only (example)
    betaImplementation("com.google.firebase:firebase-appdistribution:16.0.0-beta10")
}

Java

dependencies {
    // ADD the API-only library to all variants
    implementation("com.google.firebase:firebase-appdistribution-api:16.0.0-beta10")

    // ADD the full SDK implementation to the "beta" variant only (example)
    betaImplementation("com.google.firebase:firebase-appdistribution:16.0.0-beta10")
}

ステップ 3: アプリ内アラートを構成する

App Distribution Android SDK でテスター向けのアプリ内ビルドアラートを設定するには、次の方法があります。

  • 基本アラート構成: テスターに対して表示される、アプリのアップデートとログインのための事前構築済みのダイアログが含まれます。
  • 詳細アラート構成: 独自のユーザー インターフェースをカスタマイズできます。

App Distribution SDK を初めて使用する場合は、基本的な構成を使用することをおすすめします。

基本的な構成

updateIfNewReleaseAvailable を使用して、アラートをまだ有効にしていないテスターに対して事前構築済みの有効化アラート ダイアログを表示し、新しいビルドが提供されているかどうかを確認します。このメソッドを呼び出すと、このメソッドにより次のシーケンスが実行されます。

  1. テスターがアラートを有効にしているか確認します。テスターがまだアラートを有効にしていない場合は、Google アカウントを使用して App Distribution にログインするよう求めます。

  2. 対象のテスター向けの新しいインストール ビルドがあるかどうか確認します。

  3. 事前構築済みのアラートをテスターに表示して、アップデートを促します。

  4. 新しいビルドが Android App Bundle(AAB)の場合、テスターは Google Play にリダイレクトされ、そこでアップデート プロセスを完了します。

    新しいビルドが Android Application Package(APK)の場合、SDK はバックグラウンドで新しいビルドをダウンロードします。ダウンロードが完了すると、インストールを促すプロンプトがテスターに表示されます。SDK は NotificationManager を使用して、ダウンロードの進行状況の通知をユーザーに送信します。onProgressUpdate ハンドラを updateIfNewReleaseAvailable タスクにアタッチして独自の進行状況インジケーターを追加することもできます。

アプリの任意の場所で updateIfNewReleaseAvailable を呼び出すことができます。たとえば、アプリのメイン アクティビティの onResume メソッドの実行中に、updateIfNewReleaseAvailable を呼び出すことができます。

次の例では、テスターがアラートを有効にしているかどうか、また、新しいビルドにアクセスできるかどうかを確認します。それらの条件が満たされている場合、ビルドのインストールが可能になるとダイアログが表示されます。

Kotlin+KTX

// 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+KTX

// 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+KTX

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 を表示します。checkForNewReleaseupdateApp を呼び出す前にログインの詳細構成を使用して、テスターがログインしていることを確認してください。

Kotlin+KTX

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+KTX

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 へのログインを複数回求められる