Mendukung update otomatis dalam aplikasi dengan google play core

Mendukung update otomatis dalam aplikasi dengan google play core

Menjaga aplikasi Anda selalu terupdate di perangkat pengguna memungkinkan mereka mencoba fitur-fitur terbaru, serta mendapat manfaat dari peningkatan performa dan perbaikan bug. Meskipun beberapa pengguna mengaktifkan update latar belakang jika perangkat terhubung ke koneksi tidak berbayar, pengguna lain mungkin perlu diingatkan untuk mengupdate. Update dalam aplikasi adalah fitur library Play Core yang memperkenalkan aliran permintaan baru untuk meminta pengguna aktif untuk mengupdate aplikasi Anda.

Update dalam aplikasi hanya berfungsi pada perangkat yang menjalankan Android 5.0 (API level 21) atau yang lebih tinggi, dan mengharuskan Anda untuk menggunakan library Play Core 1.5.0 atau yang lebih tinggi. Setelah memenuhi persyaratan berikut, aplikasi Anda dapat mendukung UX berikut untuk update dalam aplikasi:

  • Fleksibel: Pengalaman pengguna yang menyediakan download latar belakang dan penginstalan dengan pemantauan status yang rapi. UX ini cocok ketika pengguna diperbolehkan untuk menggunakan aplikasi saat mendownload update. Misalnya, Anda ingin mendorong pengguna untuk mencoba fitur baru yang tidak terlalu penting untuk fungsi inti dari aplikasi Anda. 

    Gambar 1. Contoh alur update yang fleksibel

     

  • Langsung: Pengalaman pengguna layar penuh yang mewajibkan pengguna untuk mengupdate dan memulai ulang aplikasi untuk terus menggunakan aplikasi tersebut. UX ini adalah pilihan terbaik untuk kasus di mana update menjadi sangat penting agar aplikasi dapat terus digunakan. Setelah pengguna menerima update langsung, Google Play menangani penginstalan update dan aplikasi dimulai ulang. 

    Gambar 2. Contoh alur update langsung

     

Halaman ini menunjukkan kepada Anda cara menggunakan library Play Core untuk meminta dan melakukan update dalam aplikasi langsung atau fleksibel.

Memeriksa ketersediaan update

Sebelum meminta update, Anda perlu memeriksa dahulu apakah update tersedia untuk aplikasi Anda. Untuk memeriksa update, gunakan AppUpdateManager, seperti yang ditunjukkan di bawah ini:

// Creates instance of the manager.
    AppUpdateManager appUpdateManager = AppUpdateManagerFactory.create(context);
    // Returns an intent object that you use to check for an update.
    Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
    // Checks that the platform will allow the specified type of update.
    appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
        if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
              // For a flexible update, use AppUpdateType.FLEXIBLE
              && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
                  // Request the update.
        }
    });

Hasilnya berisi status ketersediaan update. Jika update tersedia dan update diizinkan, AppUpdateInfo yang ditampilkan juga berisi intent untuk memulai update. Lihat bagian berikut untuk mengetahui cara memulai update.

Jika update dalam aplikasi sedang berlangsung, hasilnya juga akan melaporkan status dari update yang sedang berlangsung.

Memulai update

Setelah memeriksa bahwa Anda dapat mengupdate aplikasi, Anda dapat meminta update menggunakan AppUpdateManager.startUpdateFlowForResult(), seperti yang ditunjukkan di bawah ini. Namun, Anda harus memperhatikan seberapa sering Anda meminta update agar tidak mengganggu dan membuat pengguna jenuh. Dengan demikian, Anda harus membatasi permintaan update dalam aplikasi hanya untuk perubahan yang dibutuhkan untuk fungsi aplikasi.

  appUpdateManager.startUpdateFlowForResult(
        // Pass the intent that is returned by 'getAppUpdateInfo()'.
        appUpdateInfo,
        // Or 'AppUpdateType.FLEXIBLE' for flexible updates.
        AppUpdateType.IMMEDIATE,
        // The current activity making the update request.
        this,
        // Include a request code to later monitor this update request.
        MY_REQUEST_CODE);
    

Setiap instance AppUpdateInfo hanya dapat digunakan untuk memulai update sekali saja. Untuk mencoba update kembali jika gagal, Anda harus meminta AppUpdateInfo baru dan memeriksa lagi apakah update tersedia dan diizinkan.

Jenis update yang Anda minta menentukan langkah selanjutnya yang perlu Anda lakukan. Untuk mempelajari lebih lanjut, baca bagian tentang cara Menangani update langsung atau Menangani update fleksibel.

Mendapatkan callback untuk status update

Setelah memulai update, Anda dapat menggunakan callback onActivityResult() untuk menangani kegagalan atau pembatalan update, seperti yang ditunjukkan di bawah ini.

 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
      if (requestCode == MY_REQUEST_CODE) {
        if (resultCode != RESULT_OK) {
          log("Update flow failed! Result code: " + resultCode);
          // If the update is cancelled or fails,
          // you can request to start the update again.
        }
      }
    }

Yang berikut menjelaskan nilai berbeda yang mungkin Anda terima dari callback onActivityResult():

  • RESULT_OK: Pengguna telah menyetujui update. Untuk update langsung, Anda mungkin tidak menerima callback ini karena seharusnya update telah diselesaikan oleh Google Play saat kontrol dikembalikan ke aplikasi Anda.
  • RESULT_CANCELED: Pengguna telah menolak atau membatalkan update.
  • ActivityResult.RESULT_IN_APP_UPDATE_FAILED: Beberapa error lain mencegah pengguna memberikan izin atau mencegah update dilanjutkan.

Menangani update fleksibel

Saat Anda memulai update fleksibel, dialog terlebih dahulu akan muncul kepada pengguna untuk meminta izin. Jika pengguna mengizinkan, download akan dimulai di latar belakang, dan pengguna dapat melanjutkan berinteraksi dengan aplikasi. Bagian ini menjelaskan cara memantau dan menyelesaikan update dalam aplikasi fleksibel.

Memantau status update aplikasi

Setelah pengguna menyetujui update fleksibel, Google Play mulai mendownload update di latar belakang. Setelah download dimulai, aplikasi Anda perlu memantau status update untuk mengetahui kapan update dapat diinstal dan menampilkan progres di UI aplikasi.

Anda dapat memantau status update yang sedang berlangsung dengan mendaftarkan pemroses untuk menginstal update status.

 // Create a listener to track request state updates.
    InstallStateUpdatedListener listener = state -> {
        // Show module progress, log state, or install the update.
      };
    // Before starting an update, register a listener for updates.
    appUpdateManager.registerListener(listener);
    // Start an update.
    // When status updates are no longer needed, unregister the listener.
    appUpdateManager.unregisterListener(listener);
    

Menginstal update fleksibel

Jika Anda memantau status update fleksibel dan Anda mendeteksi status InstallStatus.DOWNLOADED, Anda perlu memulai ulang aplikasi untuk menginstal update.

Tidak seperti update langsung, Google Play tidak memicu mulai ulang aplikasi untuk Anda. Itu karena, selama proses update fleksibel, pengguna berharap untuk terus menggunakan aplikasi hingga memutuskan apakah pengguna ingin menginstal update.

Jadi sebaiknya Anda memberi notifikasi (atau beberapa indikasi UI lain) yang memberi tahu pengguna bahwa penginstalan telah siap dan meminta konfirmasi pengguna untuk memulai ulang aplikasi.

Misalnya, Anda dapat menerapkan konfirmasi permintaan snackbar dengan Desain Materialdari pengguna untuk memulai ulang aplikasi, seperti yang ditunjukkan pada gambar 1.

Contoh kode berikut menampilkan notifikasi snackbar kepada pengguna setelah update fleksibel didownload.

@Override
    public void onStateUpdate(InstallState state) {
      if (state.installStatus() == InstallStatus.DOWNLOADED) {
        // After the update is downloaded, show a notification
        // and request user confirmation to restart the app.
        popupSnackbarForCompleteUpdate();
      }
      ...
    }
    /* Displays the snackbar notification and call to action. */
    private void popupSnackbarForCompleteUpdate() {
      Snackbar snackbar =
          Snackbar.make(
              findViewById(R.id.activity_main_layout),
              "An update has just been downloaded.",
              Snackbar.LENGTH_INDEFINITE);
      snackbar.setAction("RESTART", view -> appUpdateManager.completeUpdate());
      snackbar.setActionTextColor(
          getResources().getColor(R.color.snackbar_action_text_color));
      snackbar.show();
    }

Saat Anda memanggil appUpdateManager.completeUpdate() di latar depan, platform menampilkan UI layar penuh yang memulai ulang aplikasi di latar belakang. Setelah platform menginstal update, aplikasi memulai ulang dalam aktivitas utamanya.

Jika Anda memanggil appUpdateManager.completeUpdate() di latar belakang, maka update akan diinstal secara otomatis tanpa menghalangi UI perangkat.

Saat pengguna membawa aplikasi ke latar depan, sebaiknya Anda memeriksa apakah aplikasi tidak memiliki update yang menunggu untuk diinstal. Jika aplikasi memiliki update di status DOWNLOADED, tampilkan notifikasi untuk meminta pengguna menginstal update, seperti yang ditunjukkan di bawah ini. Jika tidak, data update akan terus memenuhi penyimpanan perangkat pengguna.

 // Checks that the update is not stalled during 'onResume()'.
    // However, you should execute this check at all app entry points.
    @Override
    protected void onResume() {
      super.onResume();
      appUpdateManager
          .getAppUpdateInfo()
          .addOnSuccessListener(appUpdateInfo -> {
                  ...
                  // If the update is downloaded but not installed,
                  // notify the user to complete the update.
                  if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) {
                      popupSnackbarForCompleteUpdate();
                  }
              });
    }

Menangani update langsung

Jika Anda melakukan update langsung, dan pengguna menyetujui penginstalan update, Google Play menampilkan progres update di UI aplikasi teratas selama durasi update. Selama proses update, jika pengguna menutup atau menghentikan aplikasi, update akan melanjutkan download dan menginstal di latar belakang tanpa menunggu konfirmasi tambahan dari pengguna.

Namun, jika aplikasi kembali ke latar depan, Anda harus mengonfirmasi bahwa update tidak dihentikan di status UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS. Jika update terhenti dalam status ini, lanjutkan update, seperti yang ditunjukkan di bawah ini:

// Checks that the update is not stalled during 'onResume()'.
    // However, you should execute this check at all entry points into the app.
    @Override
    protected void onResume() {
      super.onResume();
      appUpdateManager
          .getAppUpdateInfo()
          .addOnSuccessListener(
              appUpdateInfo -> {
                ...
                if (appUpdateInfo.updateAvailability()
                    == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {
                    // If an in-app update is already running, resume the update.
                    appUpdateManager.startUpdateFlowForResult(
                        appUpdateInfo,
                        IMMEDIATE,
                        this,
                        MY_REQUEST_CODE);
                }
              });
    }

Memecahkan masalah

Bagian ini menjelaskan beberapa kemungkinan solusi untuk situasi saat update dalam aplikasi tidak berfungsi seperti yang diharapkan selama pengujian.

  • Update dalam aplikasi hanya tersedia untuk akun pengguna yang memiliki aplikasi. Jadi, pastikan akun yang Anda gunakan telah mendownload aplikasi dari Google Play setidaknya sekali sebelum menggunakan akun untuk menguji update dalam aplikasi.
  • Pastikan bahwa aplikasi, tempat Anda menguji update dalam aplikasi, memiliki ID aplikasi dan ditandatangani dengan kunci penandatanganan yang sama dengan yang tersedia dari Google Play.
  • Karena Google Play hanya dapat mengupdate aplikasi ke kode versi yang lebih tinggi, pastikan aplikasi yang Anda uji kode versinya lebih rendah daripada kode versi update-nya.
  • Pastikan akun memenuhi syarat dan cache Google Play sudah yang paling baru. Untuk melakukannya, saat login ke akun Google Play Store di perangkat pengujian, lanjutkan seperti berikut:
    1. Pastikan Anda menutup Aplikasi Google Play Store sepenuhnya.
    2. Buka aplikasi Google Play Store dan buka tab Aplikasi & Game Saya .
    3. Jika aplikasi yang sedang Anda uji tidak muncul dengan update yang tersedia, periksa apakah Anda telah menyiapkan track pengujian dengan benar.