Mulai Android 10, data terkait afinitas kontak, yang dikelola oleh komponen Penyedia Kontak (sumber data yang terlihat di aplikasi kontak perangkat), diakses secara berbeda dari pada Android 9 dan yang lebih lama.
Sebelum Android 10, aplikasi menggunakan Penyedia Kontak untuk mengakses data dan mentransfernya antara perangkat dan layanan online. Android 10 menampilkan perubahan terkait aksesibilitas data untuk memastikan peningkatan privasi pengguna di semua perangkat Android 10 yang menggunakan Penyedia Kontak. Pertama, database pokok tidak berisi data afinitas kontak. Oleh karena itu, aplikasi tidak dapat menulis ke atau membaca darinya. Perubahan tersebut meliputi:
- Penyedia Kontak tidak mencatat data terkait minat kontak, seperti berapa kali pengguna dihubungi, terakhir kali kontak, aplikasi yang digunakan, orang yang dihubungi, atau data historis terkait.
- Class
MultiAutoCompleteTextView
di API Autocomplete Penyedia Kontak tidak mengurutkan hasil kueri menurut penghitung interaksi. - Framework Android tidak menyediakan peringkat kontak implisit. (Namun, peringkat kontak vulgar yang dikontrol pengguna (seperti kontak berbintang) tetap ada).
Untuk menerapkan perubahan ini, lakukan salah satu hal berikut:
- Gunakan Penyedia Kontak terbaru.
- Update versi Anda (jika Anda menggunakan versi bercabang).
Selain itu, update aplikasi apa pun yang mengandalkan fitur Penyedia Kontak yang tidak digunakan lagi. Versi API yang dirancang untuk menjadi solusi untuk fungsi yang tidak digunakan lagi tidak diizinkan.
Untuk Android 9 dan yang lebih lama, data interaksi kontak dari Penyedia Kontak belum dihapus. Sebagai gantinya, data interaksi kontak dihapus secara berkala (sekitar sekali per hari) untuk menyimulasikan hal yang setara di Android 10. Penyedia Kontak menyimpan informasi ini, tetapi hanya untuk sementara.
Perubahan API
Perubahan ini diperkirakan akan berdampak besar pada API. Misalnya, peringkat pelengkapan otomatis tidak akan berperforma sebaik itu. Potensi dampak pada perilaku API meliputi hal berikut:
- Penyedia Kontak tidak akan menyimpan preferensi pengguna untuk, atau interaksi
dengan, kontak di kolom tabel
ContactsContract.Contacts
. - Autocomplete API tidak akan mengurutkan hasil menurut penghitung interaksi.
- Kolom
TIMES_CONTACTED
/TIMES_USED
danLAST_TIME_CONTACTED
/LAST_TIME_USED
tidak akan diperbarui. - Nilai ini akan dihapus (ke
null
atau ditetapkan ke 0, bergantung pada kolom yang terpengaruh) setelah mengupgrade ke Android 10. - Peringkat di API kueri pelengkapan otomatis menampilkan hasil yang diurutkan alfabetis, bukan berdasarkan informasi afinitas.
- Panggilan API untuk kontak yang sering digunakan (misalnya, menggunakan string filter
CONTENT_FREQUENT_URI
) tidak menampilkan hasil.
Umumnya, jika ada elemen Contact Provider API yang tidak digunakan lagi menggunakan penghitung,
penghitung tersebut (jika digunakan di Android 10) berisi 0, dan
menampilkan 0 saat dikueri. Permintaan pembaruan dari API yang terpengaruh akan diabaikan. Misalnya, class ContactsContract.DataUsageFeedback
tidak digunakan lagi, sehingga panggilan update dan hapus ke class ini akan diabaikan.
Kolom yang memengaruhi API
Kolom ini telah berubah di Android 10:
ContactsContract.ContactOptionsColumns#TIMES_CONTACTED
ContactsContract.ContractOptionsColumns.LAST_TIME_CONTACTED
ContactsContract.DataUsageStatColumns#TIMES_USED
ContactsContract.DataUsageStatColumns#LAST_TIME_USED
ContactsContract#CONTENT_STREQUENT_FILTER_URI
ContactsContract.Contacts#CONTENT_STREQUENT_URI
ContactsContract.Contacts#CONTENT_FREQUENT_URI
ContactsContract.Contacts#ENTERPRISE_CONTENT_FILTER_URI
ContactsContract.Contacts#CONTENT_FILTER_URI
Kolom yang terpengaruh di Android 10 mungkin ada di API yang berbeda, seperti yang ditunjukkan dalam tabel di bawah. Kolom API yang tidak digunakan lagi menampilkan perilaku seperti yang tercantum. Karena salah satu kolom yang tidak digunakan lagi ini mungkin digunakan di beberapa API Anda, verifikasi kasus penggunaan Anda.
Class | Kolom API | 10 hasil |
---|---|---|
ContactsContract.Contacts ContactsContract.RawContacts ContactsContract.Data ContactsContract.Entity
|
ContactOptionsColumns TIMES_CONTACTED LAST_TIME_CONTACTED
|
Kolom ini selalu berisi 0, terlepas dari cara penggunaannya. Upaya untuk mengubahnya akan diabaikan. |
Contacts
|
markAsContacted() |
Tidak ada operasi. |
ContactsContract.DataUsageFeedback
|
|
Tidak ada operasi. |
ContactsContract.Contacts
|
Strequent (berbintang + sering)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI
|
Hanya menampilkan kontak yang berbintang. Tidak ada kontak yang sering dihubungi. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable
|
API filter (juga disebut autocomplete)
|
Hasil tidak diurutkan berdasarkan afinitas. Video ini diurutkan menurut diberi bintang dan nama. |
Alternatif
Tidak ada alternatif untuk kolom API yang tidak digunakan lagi. Solusi yang dirancang untuk menghindari batasan ini, baik dalam bentuk API baru atau kolom baru, tidak diizinkan.
Implementasi
Anda tidak perlu melakukan apa pun untuk menerapkan perubahan ini. Fitur ini merupakan bagian dari inisiatif untuk meningkatkan privasi pengguna di platform Android OS. Namun, jika aplikasi Anda mengandalkan fitur yang tidak digunakan lagi, Anda dapat mengupdate aplikasi untuk mengimbangi perubahan apa pun. Selain itu, jika Anda menggunakan versi forked Penyedia Kontak, Anda harus mengupdate Penyedia Kontak.
Tidak ada penyesuaian
Jangan menyesuaikan atau mengakali perubahan informasi afinitas kontak. Pembatasan ini sudah terintegrasi dalam framework, dan membuat perubahan apa pun akan membuat Anda tidak mematuhi persyaratan. Jangan pernah mengubah setelan default atau memberikan alternatif backdoor.