オプションの Firebase App Distribution SDK を使用すると、アプリの新しいビルドがインストール可能になった場合にアプリ内アラートをテスターに表示できます。このガイドでは、App Distribution SDK を使用してテスター向けの新しいビルドアラートを作成する方法と、それをカスタマイズする方法について説明します。
始める前に
まだ Firebase を Android プロジェクトに追加していない場合は追加します。
ステップ 1: App Distribution Tester API を有効にする
Google Cloud Console でプロジェクトを選択します。
[Firebase App Testers API] で [有効にする] をクリックします。
ステップ 2: App Distribution をアプリに追加する
アプリレベルのモジュールの Gradle ファイル(通常は app/build.gradle
)で、App Distribution Android SDK の依存関係を宣言します。
Java
dependencies {
// ADD this line
implementation 'com.google.firebase:firebase-appdistribution:16.0.0-beta02'
}
Kotlin+KTX
dependencies {
// ADD this line
implementation 'com.google.firebase:firebase-appdistribution-ktx:16.0.0-beta02'
}
ステップ 3: アプリ内アラートを構成する
App Distribution SDK でテスター向けアプリ内ビルドアラートを設定するには、次の方法があります。
- 基本アラート構成: テスターに対して表示される、アプリのアップデートとログインのための事前構築済みのダイアログが含まれます。
- 詳細アラート構成: 独自のユーザー インターフェースをカスタマイズできます。
App Distribution SDK を初めて使用する場合は、基本アラート構成を使用することをおすすめします。
基本構成
updateIfNewReleaseAvailable
を使用して、アラートをまだ有効にしていないテスターに対して事前構築済みの有効化アラート ダイアログを表示し、新しいビルドが提供されているかどうかを確認します。このメソッドを呼び出すと、このメソッドにより次のシーケンスが実行されます。
テスターがアラートを有効にしているか確認します。テスターがまだアラートを有効にしていない場合は、Google アカウントを使用して App Distribution にログインするよう求めます。
対象のテスター向けの新しいインストール ビルドがあるかどうか確認します。
事前構築済みのアラートをテスターに表示して、アップデートを促します。
新しいビルドが Android App Bundle(AAB)の場合、テスターは Google Play にリダイレクトされ、そこでアップデート プロセスを完了します。
新しいビルドが Android Application Package(APK)の場合、SDK はバックグラウンドで新しいビルドをダウンロードします。ダウンロードが完了すると、インストールを促すプロンプトがテスターに表示されます。SDK は
NotificationManager
を使用して、ダウンロードの進行状況の通知をユーザーに送信します。onProgressUpdate
ハンドラをupdateIfNewReleaseAvailable
タスクにアタッチして独自の進行状況インジケーターを追加することもできます。
updateIfNewReleaseAvailable()
は、アプリ内の任意の場所で呼び出すことができます。たとえば、MainActivity の onResume()
メソッドの実行中に updateIfNewReleaseAvailable()
を呼び出すことができます。
次の例では、テスターがアラートを有効にしているかどうか、また、新しいビルドにアクセスできるかどうかを確認します。それらの条件が満たされている場合、ビルドのインストールが可能になるとダイアログが表示されます。
Java
public class MainActivity extends AppCompatActivity {
FirebaseAppDistribution firebaseAppDistribution =
FirebaseAppDistribution.getInstance();
@Override
public void onResume() {
super.onResume();
firebaseAppDistribution.updateIfNewReleaseAvailable()
.addOnProgressListener(updateProgress -> {
// (Optional) Implement custom progress updates in addition to
// automatic NotificationManager updates.
})
.addOnFailureListener(e -> {
if (e instanceof FirebaseAppDistributionException) {
// Handle exception.
}
});
}
}
Kotlin+KTX
class MainActivity : AppCompatActivity() {
var firebaseAppDistribution = FirebaseAppDistribution.getInstance()
override fun onResume() {
super.onResume()
firebaseAppDistribution.updateIfNewReleaseAvailable()
.addOnProgressListener { updateProgress ->
// (Optional) Implement custom progress updates in addition to
// automatic NotificationManager updates.
}
.addOnFailureListener { e ->
if (e is FirebaseAppDistributionException) {
// Handle exception.
}
}
}
}
詳細構成
ログインの詳細構成
signInTester
メソッドと isTesterSignedIn
メソッドを使用すると、テスターのログイン エクスペリエンスを柔軟にカスタマイズでき、操作感をアプリのデザインに合わせることができます。
次の例では、テスターが App Distribution テスター アカウントにすでにログインしているかどうかを確認します。これにより、まだログインしていないテスターにのみログイン ユーザー インターフェース(UI)を表示できます。テスターがログインしたら、updateIfNewReleaseAvailable
を呼び出して、テスターが新しいビルドにアクセスできるかどうかを確認します。
Java
if (!firebaseAppDistribution.isTesterSignedIn()) {
// Start your sign in UI here.
//
// When the tester chooses to proceed with the update,
// call signInTester():
//
// firebaseAppDistribution.signInTester().addOnSuccessListener( unused -> {
// // Handle successful sign in.
// }).addOnFailureListener(e -> {
// // Handle failed sign in.
// });
}
// Only check for updates if the tester is already signed in (do not prompt).
if (firebaseAppDistribution.isTesterSignedIn()) {
firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener( e -> {
// Handle failed update.
});
}
Kotlin+KTX
if (!firebaseAppDistribution.isTesterSignedIn) {
// Start your sign in UI here.
//
// When the tester chooses to proceed with the update,
// call signInTester():
//
// firebaseAppDistribution.signInTester().addOnSuccessListener {
// // Handle successful sign in.
// }.addOnFailureListener {
// // Handle failed sign in.
// });
}
// Only check for updates if the tester is already signed in (do not prompt).
if (firebaseAppDistribution.isTesterSignedIn) {
firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener {
// Handle failed update.
}
}
アップデートの詳細構成
checkForNewRelease
メソッドと updateApp
メソッドを使用すると、テスターにアップデートを促す際のプロンプトを柔軟にカスタマイズできます。また、事前構築済みのアップデート ダイアログやダウンロード進行状況インジケーターをカスタマイズして、アプリのデザインに合わせることもできます。
なお、updateApp
にはダウンロードの進行状況を示す機能はありません。したがって、NotificationManager
を使用するか、なんらかのアプリ内ステータス表示を使用するか、または他のアプローチを使用して、独自の進行状況表示を実装する必要があります。
次の例では、新しいリリースが提供されているかどうかを確認してから、カスタム UI を表示します。checkForNewRelease
と updateApp
を呼び出す前にログインの詳細構成を使用して、テスターがログインしていることを確認してください。
Java
firebaseAppDistribution.checkForNewRelease().addOnSuccessListener(release -> {
if (release != null) { // New release available.
// Start your update UI here.
//
// When the tester chooses to proceed with the update, call updateApp():
//
// firebaseAppDistribution.updateApp()
// .addOnProgressListener(updateState -> {
// // Use updateState to show update progress.
// });
}
}).addOnFailureListener(e -> {
// Handle failed check for new release.
});
Kotlin+KTX
firebaseAppDistribution.checkForNewRelease().addOnSuccessListener { release ->
if (release != null) { // New release available.
// Start your update UI here.
//
// When the tester chooses to proceed with the update, call updateApp():
//
// firebaseAppDistribution.updateApp()
// .addOnProgressListener { updateState ->
// // Use updateState to show update progress.
// }
}
}.addOnFailureListener {
// Handle failed check for new release.
}
ステップ 4: 送付する前に App Distribution がリリース前のビルドのみに含まれるように分離する
App Distribution Android SDK は本番環境用アプリでの使用を意図していません。この SDK に組み込まれている自己更新機能は、ランタイムにコードが実行されない場合であっても、Google Play ポリシー違反とみなされる可能性があります。
Android SDK のコードが本番環境用アプリに含まれないようにするには、リリース前ビルド バリアントのソースセットで実装されているクラスからこの SDK を使用し、本番環境のソースセットではこの SDK が使用されないようにすることをおすすめします。このクラスでは、アプリの他の部分で必要な機能は公開する必要があります。
たとえば、上記のログインの詳細構成を使用する場合は、リリース前バリアント内で、SDK を使用してテスターのログインとアプリのアップデートを行うメソッドが含まれるクラスを実装します。
Java
// src/{pre-release variant}/java/com/example/AppDistributionWrapper.java
class AppDistributionWrapper {
FirebaseAppDistribution firebaseAppDistribution =
FirebaseAppDistribution.getInstance();
void signInAndUpdate() {
// Use the App Distribution SDK to sign in the tester and update the app.
}
}
Kotlin+KTX
// src/{pre-release variant}/java/com/example/AppDistributionWrapper.kt
class AppDistributionWrapper {
val firebaseAppDistribution = FirebaseAppDistribution.getInstance()
fun signInAndUpdate() {
// Use the App Distribution SDK to sign in the tester and update the app.
}
}
本番環境のバリアント ソース内で、同じクラスの別バージョン(SDK を使用しないバージョン)を実装します。
Java
// src/{production variant}/java/com/example/AppDistributionWrapper.java
class AppDistributionWrapper {
void signInAndUpdate() {
// In production, do nothing.
}
}
Kotlin+KTX
// src/{production variant}/java/com/example/AppDistributionWrapper.kt
class AppDistributionWrapper {
fun signInAndUpdate() {
// In production, do nothing.
}
}
アプリコード(たとえば、メイン アクティビティの onResume()
内)から、ラッパー メソッドを呼び出します。
Java
// src/main/java/com/example/MainActivity.java
public class MainActivity extends AppCompatActivity {
AppDistributionWrapper appDistributionWrapper =
new AppDistributionWrapper();
@Override
public void onResume() {
super.onResume();
appDistributionWrapper.signInAndUpdate();
}
}
Kotlin+KTX
// src/main/java/com/example/MainActivity.kt
class MainActivity : AppCompatActivity() {
var appDistributionWrapper = AppDistributionWrapper()
override fun onResume() {
super.onResume()
appDistributionWrapper.signInAndUpdate()
}
}
アプリレベルのモジュールの Gradle ファイル(通常は app/build.gradle
)で、App Distribution Android SDK の依存関係を更新し、リリース前のビルド バリアントのみが含まれるようにします。
Java
dependencies {
// UPDATE the dependency to include the "beta" variant only (example)
betaImplementation 'com.google.firebase:firebase-appdistribution:16.0.0-beta02'
}
Kotlin+KTX
dependencies {
// UPDATE the dependency to include the "beta" variant only (example)
betaImplementation 'com.google.firebase:firebase-appdistribution-ktx:16.0.0-beta02'
}
ステップ 5: 実装をビルドしてテストする
最後に、アプリをビルドし、Firebase コンソールを使用してテスターにビルドを配布して実装をテストします。
次のような一般的な問題については、アプリの配布に関するトラブルシューティング ガイドをご覧ください。
- テスターがアプリ内アラートを受信できない
- テスターが Google へのログインを複数回求められる
- テスターのログインループが発生する