Mulai Android 10, data terkait afinitas kontak, yang dikelola oleh komponen Penyedia Kontak (sumber data yang terlihat di aplikasi kontak perangkat), diakses secara berbeda dibandingkan di Android 9 dan yang lebih rendah.
Sebelum Android 10, aplikasi menggunakan Penyedia Kontak untuk mengakses data dan mentransfernya antara perangkat dan layanan online. Android 10 menghadirkan perubahan terkait aksesibilitas data untuk memastikan peningkatan privasi pengguna di semua perangkat Android 10 yang menggunakan Penyedia Kontak. Pertama, database yang mendasarinya tidak berisi data ketertarikan kontak. Oleh karena itu, aplikasi tidak dapat menulis atau membaca darinya. Perubahan tersebut antara lain sebagai berikut:
- Penyedia Kontak tidak mencatat data terkait afinitas kontak, seperti berapa kali pengguna dihubungi, terakhir kali melakukan kontak, aplikasi yang digunakan, orang yang dihubungi, atau data historis apa pun yang terkait.
- Kelas
MultiAutoCompleteTextView
di API pelengkapan otomatis Penyedia Kontak tidak mengurutkan hasil kueri berdasarkan penghitung interaksi. - Kerangka kerja Android tidak memberikan peringkat kontak implisit. (Namun, peringkat kontak eksplisit yang dikontrol pengguna (seperti kontak berbintang ) tetap ada).
Untuk menerapkan perubahan ini, lakukan salah satu hal berikut:
- Gunakan Penyedia Kontak terbaru.
- Perbarui versi Anda (jika Anda menggunakan versi bercabang).
Selain itu, perbarui aplikasi apa pun yang mengandalkan fitur Penyedia Kontak yang tidak digunakan lagi . Versi API yang dirancang sebagai solusi terhadap fungsi yang tidak digunakan lagi tidak diperbolehkan.
Untuk Android 9 dan lebih rendah, data interaksi kontak dari Penyedia Kontak belum dihapus. Sebaliknya, data interaksi kontak dihapus secara berkala (kira-kira sekali sehari) untuk melakukan simulasi serupa di Android 10. Penyedia Kontak menyimpan informasi ini, namun hanya sementara.
Perubahan API
Perubahan ini diperkirakan akan berdampak besar pada API. Misalnya, peringkat pelengkapan otomatis tidak akan berfungsi dengan baik. Potensi dampak terhadap perilaku API mencakup hal berikut:
- Penyedia Kontak tidak akan menyimpan preferensi pengguna, atau interaksi dengan, kontak di kolom tabel
ContactsContract.Contacts
. - API pelengkapan otomatis tidak akan mengurutkan hasil berdasarkan penghitung interaksi.
- Kolom
TIMES_CONTACTED
/TIMES_USED
danLAST_TIME_CONTACTED
/LAST_TIME_USED
tidak akan diperbarui. - Ini dihapus (ke
null
atau disetel ke 0, bergantung pada kolom yang terpengaruh) setelah ditingkatkan ke Android 10. - Pemeringkatan dalam API kueri pelengkapan otomatis mengembalikan hasil yang diurutkan menurut abjad, tidak pernah berdasarkan informasi afinitas.
- Panggilan API untuk kontak yang sering dihubungi (misalnya, menggunakan string filter
CONTENT_FREQUENT_URI
) tidak memberikan hasil.
Secara umum, jika salah satu elemen API Penyedia Kontak yang tidak digunakan lagi menggunakan penghitung, penghitung tersebut (bila digunakan di Android 10) berisi 0, dan menampilkan 0 saat ditanyai. Permintaan pembaruan dari API yang terpengaruh akan diabaikan. Misalnya, kelas ContactsContract.DataUsageFeedback
tidak digunakan lagi, sehingga panggilan pembaruan dan penghapusan ke kelas ini diabaikan.
Bidang yang memengaruhi API
Bidang berikut 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 pada tabel di bawah. Bidang API yang tidak digunakan lagi akan mengembalikan perilaku seperti yang tercantum. Karena salah satu kolom yang tidak digunakan lagi ini mungkin digunakan di beberapa API Anda, verifikasi kasus penggunaan Anda.
Kelas | bidang API | 10 pengembalian |
---|---|---|
ContactsContract.Contacts ContactsContract.RawContacts ContactsContract.Data ContactsContract.Entity | ContactOptionsColumns TIMES_CONTACTED LAST_TIME_CONTACTED | Kolom ini selalu berisi 0, apa pun cara penggunaannya. Upaya untuk mengubahnya diabaikan. |
Contacts | markAsContacted() | Tidak ada operasi. |
ContactsContract.DataUsageFeedback | | Tidak ada operasi. |
ContactsContract.Contacts | Sering ( berbintang + sering)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI | Hanya mengembalikan kontak berbintang . Tidak ada kontak yang sering dikembalikan. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable | Filter (juga disebut pelengkapan otomatis) API | Hasil tidak diurutkan berdasarkan afinitas. Ini diurutkan berdasarkan bintang dan nama . |
Alternatif
Tidak ada alternatif selain bidang API yang tidak digunakan lagi. Solusi yang dirancang untuk menghindari pembatasan ini, baik dalam bentuk API baru atau kolom baru, tidak diperbolehkan.
Penerapan
Anda tidak perlu melakukan apa pun untuk menerapkan perubahan ini. Ini adalah bagian dari inisiatif untuk meningkatkan privasi pengguna di platform OS Android. Namun, jika aplikasi Anda mengandalkan fitur yang tidak digunakan lagi, Anda mungkin ingin memperbarui aplikasi Anda untuk mengimbangi perubahan apa pun. Selain itu, jika Anda menggunakan Penyedia Kontak versi bercabang, Anda harus memperbarui Penyedia Kontak Anda.
Tidak ada penyesuaian
Jangan menyesuaikan atau menyiasati perubahan informasi afinitas kontak. Aturan-aturan tersebut sudah ada dalam kerangka kerja, dan melakukan perubahan apa pun akan membuat Anda keluar dari kepatuhan. Jangan pernah mengubah pengaturan default atau memberikan alternatif pintu belakang.