Perubahan perilaku: semua aplikasi

Platform Android 13 menyertakan perubahan perilaku yang dapat memengaruhi aplikasi Anda. Perubahan perilaku berikut ini berlaku untuk semua aplikasi saat dijalankan di Android 13, terlepas dari targetSdkVersion. Sebaiknya uji aplikasi Anda, lalu modifikasi sesuai kebutuhan untuk mendukung perubahan ini dengan tepat, jika memungkinkan.

Selain itu, pastikan Anda meninjau daftar perubahan perilaku yang hanya memengaruhi aplikasi yang menargetkan Android 13.

Performa dan baterai

Pengelola Tugas

Di bagian bawah panel samping notifikasi terdapat tombol yang menunjukkan
  jumlah aplikasi yang sedang berjalan di latar belakang. Saat Anda menekan
  tombol ini, akan muncul dialog yang mencantumkan nama berbagai aplikasi. Tombol
  Berhenti berada di sebelah kanan setiap aplikasi
Gambar 1. Alur kerja untuk Pengelola Tugas, yang memungkinkan pengguna menghentikan aplikasi yang memiliki layanan latar depan yang sedang berlangsung. Alur kerja ini hanya muncul pada perangkat yang menjalankan Android 13 atau yang lebih tinggi.

Mulai Android 13 (API level 33), pengguna dapat menyelesaikan alur kerja dari panel samping notifikasi untuk menghentikan aplikasi yang memiliki layanan latar depan yang sedang berjalan, seperti yang ditunjukkan pada gambar 1. Kemampuan ini dikenal sebagai Pengelola Tugas. Aplikasi harus dapat menangani penghentian yang dimulai oleh pengguna ini.

Meningkatkan penanganan tugas pengambilan data menggunakan JobScheduler

JobScheduler menyediakan cara bagi aplikasi untuk menandai tugas tertentu sebagai tugas "pengambilan data" (menggunakan JobInfo.Builder.setPrefetch()), yang berarti aplikasi tersebut idealnya harus dijalankan mendekati, dan sebelum, peluncuran aplikasi berikutnya untuk meningkatkan pengalaman pengguna. Secara historis, JobScheduler hanya menggunakan sinyal untuk memungkinkan tugas pengambilan data secara oportunistik menggunakan data gratis atau berlebih.

Di Android 13 (API level 33) dan yang lebih tinggi, sistem mencoba menentukan kapan aplikasi akan diluncurkan lagi, dan menggunakan estimasi tersebut untuk menjalankan tugas pengambilan data. Aplikasi harus mencoba menggunakan tugas pengambilan data untuk pekerjaan apa pun yang ingin dilakukannya sebelum peluncuran aplikasi berikutnya.

Pemakaian Resource Baterai

Android 13 (API level 33) menyediakan cara berikut agar sistem dapat mengelola masa pakai baterai di perangkat dengan lebih baik:

Saat menguji aplikasi dengan perubahan ini, pastikan untuk memeriksa hal-hal berikut:

  • Uji respons aplikasi Anda saat sistem menempatkannya di Bucket Aplikasi Standby yang"dibatasi". Gunakan perintah Android Debug Bridge (ADB) berikut untuk menetapkan aplikasi Anda ke bucket ini:

    adb shell am set-standby-bucket PACKAGE_NAME restricted
    
  • Uji respons aplikasi Anda terhadap batasan berikut yang biasanya berlaku untuk aplikasi yang berada dalam status "dibatasi" untuk penggunaan baterai di latar belakang:

    • Tidak dapat meluncurkan layanan latar depan
    • Layanan latar depan yang ada dihapus dari latar depan
    • Alarm tidak terpicu
    • Tugas tidak dijalankan

    Gunakan perintah ADB berikut untuk menempatkan aplikasi Anda dalam status "dibatasi" ini:

    adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
    

Kuota Firebase Cloud Message (FCM) Prioritas Tinggi

Android 13 (API level 33) memperbarui kuota Firebase Cloud Messaging (FCM) untuk meningkatkan keandalan pengiriman FCM prioritas tinggi bagi aplikasi yang menampilkan notifikasi sebagai respons terhadap FCM prioritas tinggi. Hal berikut telah berubah di Android 13 (API level 33):

  • Bucket Aplikasi Standby tidak lagi menentukan berapa banyak FCM prioritas tinggi yang dapat digunakan aplikasi.
  • Skala kuota FCM prioritas tinggi sebanding dengan jumlah notifikasi yang ditampilkan kepada pengguna sebagai respons terhadap FCM Prioritas Tinggi.

Seperti pada versi Android sebelumnya, FCM prioritas tinggi yang melebihi kuota akan didowngrade ke prioritas normal. Saat memulai Layanan Latar Depan (FGS) sebagai respons terhadap FCM, sebaiknya Anda memeriksa hasil RemoteMessage.getPriority() dan memastikannya PRIORITY_HIGH dan/atau menangani setiap potensi pengecualian ForegroundServiceStartNotAllowedException.

Jika aplikasi Anda tidak selalu memposting notifikasi sebagai respons atas FCM Prioritas Tinggi, sebaiknya ubah prioritas FCM ini ke normal sehingga pesan yang menghasilkan notifikasi tidak didowngrade.

Privasi

Izin runtime untuk notifikasi

Android 13 (API level 33) memperkenalkan izin notifikasi runtime: POST_NOTIFICATIONS. Perubahan ini membantu pengguna untuk berfokus pada notifikasi yang paling penting bagi mereka.

Sebaiknya Anda menargetkan Android 13 atau yang lebih tinggi sesegera mungkin untuk mendapatkan efek kontrol dan fleksibilitas tambahan dari fitur ini.

Pelajari praktik terbaik izin aplikasi lebih lanjut.

Menyembunyikan konten sensitif dari papan klip

Jika aplikasi Anda mengizinkan pengguna untuk menyalin konten sensitif, seperti sandi atau informasi kartu kredit, Anda harus menambahkan flag ke ClipDescription ClipData di papan klip sebelum memanggil ClipboardManager#setPrimaryClip(). Menambahkan flag ini akan mencegah konten sensitif muncul dalam pratinjau konten.

Pratinjau teks yang disalin tanpa menambahkan flag pada konten sensitif
Pratinjau teks yang disalin tanpa menambahkan flag pada konten sensitif.
Pratinjau teks yang disalin dengan menambahkan flag pada konten sensitif.
Pratinjau teks yang disalin dengan menambahkan flag pada konten sensitif.

Untuk menambahkan flag pada konten sensitif, sertakan tambahan boolean ke ClipDescription. Semua aplikasi harus melakukan ini, apa pun API level yang ditargetkan.


// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
    }
}

// If your app is compiled with a lower SDK
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean("android.content.extra.IS_SENSITIVE", true)
    }
}

Untuk mempelajari UI papan klip baru lebih lanjut, kunjungi halaman fitur Salin dan tempel.

Keamanan

Bermigrasi dari ID pengguna bersama

Jika aplikasi Anda menggunakan atribut android:sharedUserId yang tidak digunakan lagi dan tidak lagi bergantung pada fungsi atribut, Anda dapat menetapkan atribut android:sharedUserMaxSdkVersion ke 32, seperti yang ditampilkan dalam cuplikan kode berikut:

<manifest ...>
    <!-- To maintain backward compatibility, continue to use
         "android:sharedUserId" if you already added it to your manifest. -->
    android:sharedUserId="SHARED_PACKAGE_NAME"
    android:sharedUserMaxSdkVersion="32"
    ...
</manifest>

Atribut ini memberi tahu sistem bahwa aplikasi Anda tidak lagi bergantung pada ID pengguna bersama. Jika aplikasi Anda mendeklarasikan android:sharedUserMaxSdkVersion dan baru diinstal di perangkat yang menjalankan Android 13 atau lebih tinggi, aplikasi akan berperilaku seolah-olah Anda tidak pernah menentukan android:sharedUserId. Aplikasi yang diupdate tetap menggunakan ID pengguna bersama yang ada.

ID pengguna bersama menyebabkan perilaku nondeterministik dalam pengelola paket. Aplikasi Anda sebaiknya menggunakan mekanisme komunikasi yang tepat, seperti layanan dan penyedia konten, untuk memfasilitasi interoperabilitas antara komponen bersama.

Pengalaman pengguna

Notifikasi layanan latar depan yang dapat ditutup

Pada perangkat yang menjalankan Android 13 atau yang lebih tinggi, pengguna dapat menutup notifikasi yang terkait dengan layanan latar depan secara default.

Fungsi inti

Salinan implementasi layanan ucapan lama dihapus

Android 13 menghapus implementasi SpeechService—termasuk IME Voice, RecognitionService dan API berbasis intent —dari aplikasi Google.

Di Android 12, perubahan berikut terjadi:

  • Fungsi SpeechService dimigrasikan ke Layanan Ucapan dari aplikasi Google, yang menjadi penyedia SpeechService default.
  • Fungsi RecognitionService dipindahkan ke aplikasi Android System Intelligence untuk mendukung pengenalan ucapan di perangkat.

Untuk membantu mempertahankan kompatibilitas aplikasi di Android 12, aplikasi Google menggunakan trampolin untuk mengalihkan traffic ke aplikasi Layanan Ucapan dari Google. Di Android 13, trampolin ini dihapus.

Aplikasi harus menggunakan penyedia default perangkat untuk SpeechService, bukan melakukan hard code pada aplikasi tertentu.