Lihat yang baru dari Firebase di Google I/O 2022. Pelajari lebih lanjut

Menyiapkan pemberitahuan build baru dalam aplikasi dengan App Distribution Android SDK

Dengan Firebase App Distribution SDK opsional, Anda dapat menampilkan pemberitahuan dalam aplikasi kepada penguji ketika build baru aplikasi sudah tersedia untuk diinstal. Panduan ini menjelaskan cara menggunakan App Distribution SDK untuk membuat dan menyesuaikan pemberitahuan build baru untuk penguji Anda.

Sebelum memulai

Tambahkan Firebase ke project Android jika Anda belum melakukannya.

Langkah 1: Aktifkan App Distribution Tester API

  1. Pilih project Anda di Google Cloud Console.

  2. Di bagian Firebase App Testers API, klik Enable.

Langkah 2: Tambahkan App Distribution ke aplikasi Anda

Dalam file Gradle modul level aplikasi, biasanya app/build.gradle, deklarasikan dependensi pada 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'
}

Langkah 3: Konfigurasikan pemberitahuan dalam aplikasi

App Distribution SDK menyediakan cara berikut untuk menyiapkan pemberitahuan build dalam aplikasi untuk penguji:

  • Konfigurasi pemberitahuan dasar yang dilengkapi dengan update aplikasi dan dialog login bawaan untuk ditampilkan kepada penguji.
  • Konfigurasi pemberitahuan lanjutan yang memungkinkan Anda menyesuaikan antarmuka pengguna Anda sendiri.

Jika Anda menggunakan App Distribution SDK untuk pertama kalinya, sebaiknya gunakan konfigurasi pemberitahuan dasar.

Konfigurasi dasar

Gunakan updateIfNewReleaseAvailable untuk menampilkan dialog pemberitahuan pengaktifan bawaan kepada penguji yang belum mengaktifkan pemberitahuan, lalu periksa apakah build baru tersedia. Saat dipanggil, metode tersebut akan menerapkan urutan berikut:

  1. Memeriksa apakah penguji telah mengaktifkan pemberitahuan. Jika penguji belum mengaktifkan pemberitahuan, metode ini akan meminta penguji untuk login ke App Distribution dengan Akun Google-nya.

  2. Memeriksa build yang baru tersedia agar dapat diinstal oleh penguji.

  3. Menampilkan pemberitahuan bawaan yang meminta penguji untuk melakukan update.

  4. Jika build barunya merupakan Android App Bundle (AAB), mengalihkan penguji ke Google Play untuk menyelesaikan proses update.

    Jika build barunya merupakan Paket Aplikasi Android (APK), SDK akan mendownload build baru di latar belakang dan meminta penguji untuk menginstal saat download selesai. SDK mengirimkan notifikasi progres download kepada pengguna menggunakan NotificationManager. Anda juga dapat menambahkan indikator progres sendiri dengan melampirkan pengendali onProgressUpdate ke Tugas updateIfNewReleaseAvailable.

Anda dapat memanggil updateIfNewReleaseAvailable() kapan saja di aplikasi. Misalnya, Anda dapat memanggil updateIfNewReleaseAvailable() selama metode onResume() pada MainActivity.

Contoh berikut memeriksa apakah penguji mengaktifkan pemberitahuan dan memiliki akses ke build baru. Jika kondisi ini terpenuhi, dialog akan ditampilkan saat build tersedia untuk diinstal:

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.
                }
            }
    }
}

Konfigurasi lanjutan

Konfigurasi login lanjutan

Metode signInTester dan isTesterSignedIn membuat Anda lebih fleksibel dalam menyesuaikan pengalaman login penguji, sehingga pengalaman penguji tersebut lebih cocok dengan tampilan dan nuansa aplikasi Anda.

Contoh berikut memeriksa apakah penguji telah login ke akun penguji App Distribution. Dengan begitu, Anda dapat menampilkan antarmuka pengguna (UI) login hanya kepada penguji yang belum login. Setelah penguji login, Anda dapat memanggil updateIfNewReleaseAvailable untuk memeriksa apakah penguji memiliki akses ke build baru.

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.
    }
}

Konfigurasi update lanjutan

Metode checkForNewRelease dan updateApp membuat Anda lebih fleksibel dalam menentukan kapan penguji akan diminta untuk melakukan update. Anda juga dapat menyesuaikan dialog update bawaan dan indikator progres download, sehingga lebih cocok dengan tampilan dan nuansa aplikasi Anda.

Perhatikan bahwa updateApp tidak memberikan indikasi progres download. Artinya, Anda harus menerapkan indikasi progres sendiri menggunakan NotificationManager, jenis tampilan status dalam aplikasi tertentu, atau pendekatan lainnya.

Contoh berikut memeriksa apakah rilis baru sudah tersedia, lalu menampilkan UI kustom. Sebelum memanggil checkForNewRelease dan updateApp, pastikan penguji login dengan menggunakan konfigurasi login lanjutan.

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.
}

Langkah 4: Sebelum mengirimkan, isolasi App Distribution ke build pra-rilis Anda

App Distribution Android SDK tidak untuk disertakan dalam aplikasi produksi. SDK ini berisi fungsi update otomatis yang dapat dianggap sebagai pelanggaran terhadap kebijakan Google Play, meskipun kode tersebut tidak dieksekusi pada runtime.

Untuk memastikan bahwa Anda tidak menyertakan kode Android SDK dalam aplikasi produksi, sebaiknya gunakan SDK dari class yang diterapkan pada set sumber varian build pra-rilis, bukan yang diterapkan pada set sumber produksi Anda. Class tersebut harus mengekspos fungsi yang diperlukan oleh seluruh aplikasi Anda.

Misalnya, jika Anda menggunakan konfigurasi login lanjutan di atas, terapkan class dalam varian pra-rilis dengan metode yang menggunakan SDK untuk membuat penguji login dan mengupdate aplikasi:

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.
    }
}

Terapkan versi class yang sama di sumber varian produksi yang tidak menggunakan 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.
    }
}

Panggil metode wrapper dari kode aplikasi Anda, misalnya dalam onResume() aktivitas utama:

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()
    }
}

Dalam file Gradle modul level aplikasi, biasanya app/build.gradle, update dependensi pada App Distribution Android SDK agar hanya menyertakan varian build pra-rilis:

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'
}

Langkah 5: Build dan uji penerapan Anda

Terakhir, build aplikasi dan uji penerapan Anda dengan mendistribusikan build kepada penguji menggunakan Firebase console.

Buka panduan Pemecahan Masalah App Distribution untuk mendapatkan bantuan terkait masalah umum, seperti:

  • Penguji yang tidak menerima pemberitahuan dalam aplikasi
  • Penguji yang diminta untuk login ke Google lebih dari sekali
  • Penguji yang mengalami loop login