App Center Distribute – Pembaruan Dalam Aplikasi Android

Penting

Visual Studio App Center dijadwalkan untuk dihentikan pada 31 Maret 2025. Meskipun Anda dapat terus menggunakan Visual Studio App Center hingga sepenuhnya dihentikan, ada beberapa alternatif yang direkomendasikan yang dapat Anda pertimbangkan untuk bermigrasi.

Pelajari selengkapnya tentang garis waktu dukungan dan alternatif.

App Center Distribute akan memungkinkan pengguna Anda menginstal versi baru aplikasi saat Anda mendistribusikannya melalui App Center. Dengan versi baru aplikasi yang tersedia, SDK akan menyajikan dialog pembaruan kepada pengguna untuk mengunduh atau menunda versi baru. Setelah mereka memilih untuk memperbarui, SDK akan mulai memperbarui aplikasi Anda.

Peringatan

Google Play menganggap kode pembaruan dalam aplikasi sebagai perilaku berbahaya meskipun tidak digunakan saat runtime. Gunakan varian SDK Distribusikan seperti yang diarahkan di bagian ini atau hapus sepenuhnya SDK Distribusi yang berisi kode pembaruan dalam aplikasi sebelum mengirimkan aplikasi Anda ke Google Play. Kegagalan untuk melakukannya dapat menyebabkan ketidakpatuhan dan penghapusan aplikasi dari Google Play.

Catatan

Jika Anda menjalankan pengujian UI otomatis, pembaruan dalam aplikasi yang diaktifkan akan memblokir pengujian UI otomatis Anda karena mereka akan mencoba mengautentikasi terhadap backend App Center. Kami menyarankan untuk tidak mengaktifkan App Center Distribute untuk pengujian UI Anda.

Menambahkan pembaruan dalam aplikasi ke aplikasi Anda

Ikuti bagian Memulai jika Anda belum menyiapkan dan memulai SDK di aplikasi Anda.

1. Tambahkan modul Distribusi App Center

App Center SDK dirancang dengan pendekatan modular – pengembang hanya perlu mengintegrasikan modul layanan yang mereka minati.

  1. Buka file build.gradle tingkat aplikasi proyek (app/build.gradle) dan tambahkan baris berikut setelah apply plugin.

    dependencies {
       def appCenterSdkVersion = '5.0.4'
       implementation "com.microsoft.appcenter:appcenter-distribute:${appCenterSdkVersion}"
    }
    

    Catatan

    Jika versi plugin Android Gradle Anda lebih rendah dari 3.0.0, Anda perlu mengganti implementasi dengan kompilasi.

  2. Simpan file build.gradle Anda dan pastikan untuk memicu sinkronisasi Gradle di Android Studio.

  3. DownloadManager digunakan untuk mengunduh pembaruan. App Center SDK memberlakukan TLS 1.2 untuk meningkatkan keamanan.

2. Mulai Distribusi App Center

Untuk menggunakan App Center, pilih modul yang ingin Anda gunakan. Secara default tidak ada modul yang dimulai dan Anda harus secara eksplisit memanggil masing-masing modul saat memulai SDK.

Tambahkan kelas Distribusikan ke metode Anda AppCenter.start() untuk memulai layanan Distribusi App Center.

AppCenter.start(getApplication(), "{Your App Secret}", Distribute.class);
AppCenter.start(application, "{Your App Secret}", Distribute::class.java)

Pastikan Anda telah mengganti {Your App Secret} dalam sampel kode di atas dengan Rahasia Aplikasi Anda. Android Studio secara otomatis menyarankan pernyataan impor yang diperlukan setelah Anda menambahkan referensi ke kelas ke Distributestart() metode , tetapi jika Anda melihat kesalahan bahwa nama kelas tidak dikenali, tambahkan baris berikut ke pernyataan impor di kelas aktivitas Anda:

import com.microsoft.appcenter.AppCenter;
import com.microsoft.appcenter.distribute.Distribute;
import com.microsoft.appcenter.AppCenter
import com.microsoft.appcenter.distribute.Distribute

Catatan

Android 10 atau lebih tinggi memiliki batasan aktivitas peluncuran dari latar belakang. Silakan lihat artikel tentang pembatasan memulai aktivitas dari latar belakang.

Catatan

Aplikasi yang berjalan di Android 10 (edisi Go) tidak dapat menerima izin SYSTEM_ALERT_WINDOW . Silakan lihat artikel tentang SYSTEM_ALERT_WINDOW di perangkat Go.

Catatan

Dimulai dengan Android 11, ACTION_MANAGE_OVERLAY_PERMISSION niat selalu membawa pengguna ke layar Pengaturan tingkat atas, di mana pengguna dapat memberikan atau mencabut SYSTEM_ALERT_WINDOW izin untuk aplikasi. Silakan lihat artikel tentang pembaruan izin di Android 11.

Menyiapkan build Google Play Anda

Google Play menganggap kode pembaruan dalam aplikasi sebagai perilaku berbahaya meskipun tidak digunakan saat runtime. Gunakan varian SDK Distribusikan seperti yang diarahkan di bagian ini atau hapus sepenuhnya SDK Distribusi yang berisi kode pembaruan dalam aplikasi sebelum mengirimkan aplikasi Anda ke Google Play. Kegagalan untuk melakukannya dapat menyebabkan ketidakpatuhan dan penghapusan aplikasi dari Google Play. Untuk mempermudah, kami menyediakan versi App Center Distribute SDK dengan API yang di-stubbing, sehingga satu-satunya perubahan untuk Anda adalah pertukaran dependensi.

  1. Buka file build.gradle tingkat aplikasi proyek (app/build.gradle).

  2. Konfigurasikan varian build dengan menambahkan ragam produk:

    android {
        flavorDimensions "distribute"
        productFlavors {
            appCenter {
                dimension "distribute"
            }
            googlePlay {
                dimension "distribute"
            }
        }
    }
    
  3. Ubah blok dependensi untuk mengonsumsi dependensi yang berbeda berdasarkan ragam produk:

    dependencies {
        def appCenterSdkVersion = "5.0.4"
        appCenterImplementation "com.microsoft.appcenter:appcenter-distribute:${appCenterSdkVersion}"
        googlePlayImplementation "com.microsoft.appcenter:appcenter-distribute-play:${appCenterSdkVersion}"
    }
    
  4. Simpan file build.gradle Anda dan pastikan untuk memicu sinkronisasi Gradle di Android Studio.

  5. Anda dapat mengubah varian build di menu drop-down Build > Select Build Variant atau Build Variants di bilah jendela alat.

Anda dapat membaca selengkapnya tentang mengonfigurasi varian build dalam dokumentasi Android.

Menggunakan grup distribusi privat

Secara default, Distribusikan menggunakan grup distribusi publik. Jika Ingin menggunakan grup distribusi privat, Anda harus mengaturnya secara eksplisit melalui setUpdateTrack API.

Distribute.setUpdateTrack(UpdateTrack.PRIVATE);
Distribute.setUpdateTrack(UpdateTrack.PRIVATE)

Catatan

Nilai defaultnya adalah UpdateTrack.PUBLIC. Metode ini hanya dapat dipanggil sebelum AppCenter.start panggilan metode. Perubahan pada trek pembaruan tidak bertahan ketika proses aplikasi dimulai ulang, dan jadi jika metode tidak selalu dipanggil sebelum AppCenter.start panggilan, itu akan menjadi publik, secara default.

Saat aplikasi berada di latar depan (setelah Distribute.setUpdateTrack(UpdateTrack.PRIVATE); dan AppCenter.start), jendela browser terbuka untuk mengautentikasi pengguna. Semua pemeriksaan pembaruan berikutnya akan mendapatkan rilis terbaru di trek privat.

Jika pengguna berada di trek privat, artinya setelah autentikasi berhasil, mereka akan mendapatkan rilis terbaru dari grup distribusi privat tempat mereka menjadi anggotanya. Jika pengguna berada di trek publik, artinya mereka akan mendapatkan rilis terbaru dari grup distribusi publik apa pun.

Nonaktifkan Pemeriksaan Otomatis untuk Pembaruan

Secara default, SDK secara otomatis memeriksa rilis baru:

  • Ketika aplikasi dimulai.
  • Ketika aplikasi masuk ke latar depan setelah pergi ke latar belakang.
  • Saat mengaktifkan modul Distribusikan jika sebelumnya dinonaktifkan.

Jika Anda ingin memeriksa rilis baru secara manual, Anda dapat menonaktifkan pemeriksaan otomatis untuk pembaruan. Untuk melakukan ini, panggil metode berikut sebelum SDK dimulai:

Distribute.disableAutomaticCheckForUpdate();
Distribute.disableAutomaticCheckForUpdate()

Catatan

Metode ini harus dipanggil sebelum AppCenter.start panggilan metode.

Kemudian Anda dapat menggunakan checkForUpdate API, yang dijelaskan di bagian berikut.

Periksa Pembaruan secara Manual

Distribute.checkForUpdate();
Distribute.checkForUpdate()

Ini mengirimkan permintaan ke App Center dan menampilkan dialog pembaruan jika ada rilis baru yang tersedia.

Catatan

Pemeriksaan manual untuk panggilan pembaruan berfungsi bahkan ketika pembaruan otomatis diaktifkan. Pemeriksaan manual untuk pembaruan diabaikan jika pemeriksaan lain sudah dilakukan. Pemeriksaan manual untuk pembaruan tidak akan diproses jika pengguna telah menunda pembaruan (kecuali versi terbaru adalah pembaruan wajib).

Menyesuaikan atau melokalisasi dialog pembaruan dalam aplikasi

1. Menyesuaikan atau melokalisasi teks

Anda dapat dengan mudah menyediakan string sumber daya Anda sendiri jika Anda ingin mengubah atau melokalisasi teks yang ditampilkan dalam dialog pembaruan. Lihatlah file string dalam file sumber daya ini. Gunakan nama/kunci string yang sama dan tentukan nilai yang dilokalkan untuk direfleksikan dalam dialog dalam file sumber daya aplikasi Anda sendiri.

2. Sesuaikan dialog pembaruan

Anda dapat menyesuaikan tampilan dialog pembaruan default dengan mengimplementasikan DistributeListener antarmuka. Anda perlu mendaftarkan pendengar sebelum memanggil AppCenter.start seperti yang ditunjukkan dalam contoh berikut:

Distribute.setListener(new MyDistributeListener());
AppCenter.start(...);
Distribute.setListener(MyDistributeListener())
AppCenter.start(...)

Berikut adalah contoh implementasi pendengar yang menggantikan dialog SDK dengan yang kustom:

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.net.Uri;

import com.microsoft.appcenter.distribute.Distribute;
import com.microsoft.appcenter.distribute.DistributeListener;
import com.microsoft.appcenter.distribute.ReleaseDetails;
import com.microsoft.appcenter.distribute.UpdateAction;

public class MyDistributeListener implements DistributeListener {

    @Override
    public boolean onReleaseAvailable(Activity activity, ReleaseDetails releaseDetails) {

        // Look at releaseDetails public methods to get version information, release notes text or release notes URL
        String versionName = releaseDetails.getShortVersion();
        int versionCode = releaseDetails.getVersion();
        String releaseNotes = releaseDetails.getReleaseNotes();
        Uri releaseNotesUrl = releaseDetails.getReleaseNotesUrl();

        // Build our own dialog title and message
        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activity);
        dialogBuilder.setTitle("Version " + versionName + " available!"); // you should use a string resource instead, this is just a simple example
        dialogBuilder.setMessage(releaseNotes);

        // Mimic default SDK buttons
        dialogBuilder.setPositiveButton(com.microsoft.appcenter.distribute.R.string.appcenter_distribute_update_dialog_download, new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {

                // This method is used to tell the SDK what button was clicked
                Distribute.notifyUpdateAction(UpdateAction.UPDATE);
            }
        });

        // We can postpone the release only if the update isn't mandatory
        if (!releaseDetails.isMandatoryUpdate()) {
            dialogBuilder.setNegativeButton(com.microsoft.appcenter.distribute.R.string.appcenter_distribute_update_dialog_postpone, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {

                    // This method is used to tell the SDK what button was clicked
                    Distribute.notifyUpdateAction(UpdateAction.POSTPONE);
                }
            });
        }
        dialogBuilder.setCancelable(false); // if it's cancelable you should map cancel to postpone, but only for optional updates
        dialogBuilder.create().show();

        // Return true if you're using your own dialog, false otherwise
        return true;
    }
    
    @Override
    public void onNoReleaseAvailable(Activity activity) {
        Toast.makeText(activity, activity.getString(R.string.no_updates_available), Toast.LENGTH_LONG).show();
    }
}
import android.app.Activity
import android.app.AlertDialog
import com.microsoft.appcenter.distribute.Distribute
import com.microsoft.appcenter.distribute.DistributeListener
import com.microsoft.appcenter.distribute.ReleaseDetails
import com.microsoft.appcenter.distribute.UpdateAction

class MyDistributeListener : DistributeListener {

    override fun onReleaseAvailable(activity: Activity, releaseDetails: ReleaseDetails): Boolean {

        // Look at releaseDetails public methods to get version information, release notes text or release notes URL
        val versionName = releaseDetails.shortVersion
        val versionCode = releaseDetails.version
        val releaseNotes = releaseDetails.releaseNotes
        val releaseNotesUrl = releaseDetails.releaseNotesUrl

        // Build our own dialog title and message
        val dialogBuilder = AlertDialog.Builder(activity)
        dialogBuilder.setTitle("Version $versionName available!") // you should use a string resource instead, this is just a simple example
        dialogBuilder.setMessage(releaseNotes)

        // Mimic default SDK buttons
        dialogBuilder.setPositiveButton(
            com.microsoft.appcenter.distribute.R.string.appcenter_distribute_update_dialog_download
        ) { dialog, which ->
            // This method is used to tell the SDK what button was clicked
            Distribute.notifyUpdateAction(UpdateAction.UPDATE)
        }

        // We can postpone the release only if the update isn't mandatory
        if (!releaseDetails.isMandatoryUpdate) {
            dialogBuilder.setNegativeButton(
                com.microsoft.appcenter.distribute.R.string.appcenter_distribute_update_dialog_postpone
            ) { dialog, which ->
                // This method is used to tell the SDK what button was clicked
                Distribute.notifyUpdateAction(UpdateAction.POSTPONE)
            }
        }
        dialogBuilder.setCancelable(false) // if it's cancelable you should map cancel to postpone, but only for optional updates
        dialogBuilder.create().show()

        // Return true if you're using your own dialog, false otherwise
        return true
    }

    override fun onNoReleaseAvailable(activity: Activity) {
        Toast.makeText(activity, activity.getString(R.string.no_updates_available), Toast.LENGTH_LONG).show()
    }
}

Seperti yang ditunjukkan dalam contoh, Anda harus memanggil Distribute.notifyUpdateAction(UpdateAction.UPDATE); atau Distribute.notifyUpdateAction(UpdateAction.POSTPONE); jika pendengar Anda mengembalikan true.

Jika Anda tidak memanggil notifyUpdateAction, panggilan balik akan diulang pada setiap perubahan aktivitas.

Pendengar dapat dipanggil lagi dengan rilis yang sama jika aktivitas berubah sebelum tindakan pengguna diberi tahu ke SDK.

Perilaku ini diperlukan untuk mencakup skenario berikut:

  • Aplikasi Anda dikirim ke latar belakang (seperti menekan HOME) lalu dilanjutkan dalam aktivitas yang berbeda.
  • Aktivitas Anda dicakup oleh yang lain tanpa meninggalkan aplikasi (seperti mengklik beberapa pemberitahuan).
  • Skenario serupa lainnya.

Dalam hal ini, aktivitas yang menghosting dialog mungkin diganti tanpa interaksi pengguna. Jadi SDK memanggil pendengar lagi sehingga Anda dapat memulihkan dialog kustom.

Dalam kasus ketika SDK memeriksa pembaruan dan tidak menemukan pembaruan apa pun yang tersedia lebih baru dari yang saat ini digunakan, onNoReleaseAvailable panggilan balik antarmuka dari DistributeListener dipanggil. Ini memungkinkan Anda untuk menjalankan kode kustom dalam skenario tersebut. Contoh di atas menunjukkan cara menampilkan pesan toast ketika tidak ada pembaruan yang ditemukan.

Mengaktifkan atau menonaktifkan Distribusi App Center saat runtime

Anda dapat mengaktifkan dan menonaktifkan Distribusi App Center saat runtime. Jika Anda menonaktifkannya, SDK tidak akan menyediakan fungsionalitas pembaruan dalam aplikasi tetapi Anda masih dapat menggunakan layanan Distribusi di portal App Center.

Distribute.setEnabled(false);
Distribute.setEnabled(false)

Untuk mengaktifkan Distribusi App Center lagi, gunakan API yang sama tetapi teruskan true sebagai parameter.

Distribute.setEnabled(true);
Distribute.setEnabled(true)

Status ini bertahan di penyimpanan perangkat di seluruh peluncuran aplikasi.

API ini asinkron, Anda dapat membaca lebih lanjut tentang itu di panduan API Asinkron App Center kami.

Catatan

Metode ini hanya boleh digunakan setelah Distribute dimulai.

Periksa apakah Distribusi App Center diaktifkan

Anda juga dapat memeriksa apakah Distribusi App Center diaktifkan atau tidak:

Distribute.isEnabled();
Distribute.isEnabled()

API ini asinkron, Anda dapat membaca lebih lanjut tentang itu di panduan API Asinkron App Center kami.

Catatan

Metode ini hanya boleh digunakan setelah Distribute dimulai, metode ini akan selalu kembali false sebelum dimulai.

Mengaktifkan pembaruan dalam aplikasi untuk build debug

Secara default App Center memungkinkan pembaruan dalam aplikasi hanya untuk build rilis.

Untuk mengaktifkan pembaruan dalam aplikasi di build debug, panggil metode berikut sebelum AppCenter.start:

Distribute.setEnabledForDebuggableBuild(true);
Distribute.setEnabledForDebuggableBuild(true)

Catatan

Metode ini hanya memengaruhi build debug, dan tidak berdampak pada build rilis. Build debug berarti bahwa android:debuggable bendera diatur ke true (yang biasanya secara otomatis diatur oleh varian build debug gradle yang telah ditentukan sebelumnya). Jika tidak, ini adalah build rilis.

Bagaimana cara kerja pembaruan dalam aplikasi?

Catatan

Agar pembaruan dalam aplikasi berfungsi, build aplikasi harus diunduh dari tautan. Ini tidak akan berfungsi jika diinstal dari IDE atau secara manual.

Fitur pembaruan dalam aplikasi berfungsi sebagai berikut:

  1. Fitur ini hanya berfungsi dengan build RILIS (secara default) yang didistribusikan menggunakan layanan Distribusi App Center .

  2. Setelah mengintegrasikan SDK, buat versi rilis aplikasi Anda dan unggah ke App Center, pengguna di grup distribusi tersebut akan diberi tahu untuk rilis baru melalui email.

  3. Ketika setiap pengguna membuka tautan dalam email mereka, aplikasi akan diinstal di perangkat mereka. Penting bahwa mereka menggunakan tautan email untuk menginstal - kami tidak mendukung pemuatan samping. Ketika aplikasi diunduh dari tautan, SDK menyimpan informasi penting dari cookie untuk memeriksa pembaruan nanti, jika tidak, SDK tidak memiliki informasi utama tersebut.

  4. Jika aplikasi mengatur trek ke privat, browser akan terbuka untuk mengautentikasi pengguna dan mengaktifkan pembaruan dalam aplikasi. Browser tidak akan terbuka lagi selama informasi autentikasi tetap valid bahkan ketika beralih kembali ke trek publik dan kembali ke privat lagi nanti. Jika autentikasi browser berhasil, pengguna dialihkan kembali ke aplikasi secara otomatis. Jika trek bersifat publik (yang merupakan default), langkah berikutnya terjadi secara langsung.

  5. Rilis baru aplikasi menunjukkan dialog pembaruan dalam aplikasi yang meminta pengguna untuk memperbarui aplikasi Anda jika:

    • nilai versionCode atau yang lebih tinggi
    • nilai yang sama tetapi versionCode nilai yang berbeda dari versionName.

Tip

Jika Anda mengunggah APK yang sama untuk kedua kalinya, dialog TIDAK akan muncul karena versinya identik.

Bagaimana cara menguji pembaruan dalam aplikasi?

Anda perlu mengunggah build rilis (yang menggunakan modul Distribusi SDK App Center) ke Portal App Center untuk menguji pembaruan dalam aplikasi, meningkatkan nomor versi setiap saat.

  1. Buat aplikasi Anda di Portal App Center jika Anda belum melakukannya.
  2. Buat grup distribusi baru dan beri nama, sehingga Anda dapat mengenali bahwa grup tersebut dimaksudkan untuk menguji fitur pembaruan dalam aplikasi.
  3. Tambahkan diri Anda sendiri (atau semua orang yang ingin Anda sertakan pada pengujian fitur pembaruan dalam aplikasi). Gunakan alamat email baru atau buang untuk ini, yang tidak digunakan untuk aplikasi tersebut di App Center. Ini memastikan bahwa pengalaman Anda dekat dengan pengalaman penguji nyata Anda.
  4. Buat build baru aplikasi Anda yang menyertakan Distribusi App Center dan berisi logika penyiapan seperti yang dijelaskan di atas. Jika grup bersifat privat, jangan lupa untuk mengatur trek pembaruan dalam aplikasi privat sebelum mulai menggunakan API setUpdateTrack.
  5. Klik tombol Distribusikan rilis baru di portal dan unggah build aplikasi Anda.
  6. Setelah pengunggahan selesai, klik Berikutnya dan pilih Grup distribusi yang Anda buat sebagai Tujuan distribusi aplikasi tersebut.
  7. Tinjau Distribusi dan distribusikan build ke grup pengujian dalam aplikasi Anda.
  8. Orang dalam grup tersebut akan menerima undangan untuk menjadi penguji aplikasi. Setelah menerima undangan, mereka dapat mengunduh aplikasi dari Portal App Center dari perangkat seluler mereka. Setelah mereka menginstal pembaruan dalam aplikasi, Anda siap untuk menguji pembaruan dalam aplikasi.
  9. Benturkan versionCode aplikasi Anda.
  10. Buat versi rilis aplikasi Anda dan unggah build baru aplikasi seperti yang Anda lakukan di langkah sebelumnya dan distribusikan ini ke Grup Distribusi yang Anda buat sebelumnya. Anggota Grup Distribusi akan dimintai versi baru saat aplikasi dimulai lagi.

Tip

Lihat informasi tentang cara menggunakan App Center Distribute untuk informasi lebih rinci tentang Grup Distribusi , dll. Meskipun dimungkinkan untuk menggunakan App Center Distribute untuk mendistribusikan versi baru aplikasi Anda tanpa menambahkan kode apa pun, menambahkan App Center Distribute ke kode aplikasi Anda akan menghasilkan pengalaman yang lebih mulus bagi penguji dan pengguna saat mereka mendapatkan pengalaman pembaruan dalam aplikasi.