Mulai di Android 10, data kontak-afinitas terkait, dikelola oleh Kontak Penyedia komponen (sumber data terlihat pada aplikasi kontak perangkat ini), diakses berbeda dari di Android 9 dan menurunkan.
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 yang mendasarinya tidak berisi data afinitas kontak. Oleh karena itu, aplikasi tidak dapat menulis atau membaca darinya. Perubahan tersebut antara lain sebagai berikut:
- Penyedia Kontak tidak merekam data terkait afinitas kontak, seperti berapa kali pengguna dihubungi, terakhir kali kontak, aplikasi yang digunakan, orang yang dihubungi, atau data historis terkait apa pun.
- The
MultiAutoCompleteTextView
kelas dalam Kontak Penyedia autocomplete API tidak semacam hasil query dengan interaksi counter. - Kerangka kerja Android tidak memberikan peringkat kontak implisit. (Namun, peringkat yang dikendalikan oleh pengguna, kontak eksplisit (seperti kontak berbintang) sisa-sisa).
Untuk menerapkan perubahan ini, lakukan salah satu hal berikut:
- Gunakan Penyedia Kontak terbaru.
- Perbarui versi Anda (jika Anda menggunakan versi bercabang).
Selain itu, memperbarui aplikasi yang mengandalkan fitur Kontak Provider usang . Versi API dirancang untuk menjadi workarounds untuk fungsi usang tidak diperbolehkan.
Untuk Android 9 dan yang lebih rendah, data interaksi kontak dari Penyedia Kontak belum dihapus. Sebagai gantinya, data interaksi kontak dihapus secara berkala (kira-kira sekali per hari) untuk mensimulasikan yang setara di Android 10. Penyedia Kontak menyimpan informasi ini, tetapi hanya untuk sementara.
Perubahan API
Perubahan ini diharapkan berdampak besar pada API. Misalnya, peringkat pelengkapan otomatis tidak akan berfungsi dengan baik. Dampak potensial pada perilaku API mencakup hal-hal berikut:
- Kontak Penyedia tidak akan menyimpan preferensi pengguna untuk, atau interaksi dengan, kontak dalam
ContactsContract.Contacts
kolom tabel. - API pelengkapan otomatis tidak akan mengurutkan hasil berdasarkan penghitung interaksi.
- The
TIMES_CONTACTED
/TIMES_USED
danLAST_TIME_CONTACTED
/LAST_TIME_USED
kolom tidak akan diperbarui. - Ini jelas (baik
null
atau set ke 0, tergantung pada kolom yang terkena) setelah upgrade ke Android 10. - Pemeringkatan dalam API kueri pelengkapan otomatis mengembalikan hasil yang diurutkan menurut abjad, tidak pernah berdasarkan informasi afinitas.
- API panggilan untuk sering kontak (misalnya, menggunakan string filter
CONTENT_FREQUENT_URI
) kembali tidak ada hasil.
Umumnya, jika salah satu elemen API Penyedia Kontak yang tidak digunakan lagi menggunakan penghitung, penghitung tersebut (bila digunakan di Android 10) berisi 0, dan mengembalikan 0 saat dikueri. Permintaan pembaruan dari API yang terpengaruh diabaikan. Sebagai contoh, ContactsContract.DataUsageFeedback
kelas itu usang, sehingga update dan delete panggilan ke kelas ini diabaikan.
Bidang yang memengaruhi API
Bidang 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 pada tabel di bawah. Bidang API yang tidak digunakan lagi mengembalikan perilaku seperti yang tercantum. Karena salah satu bidang 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, terlepas dari bagaimana mereka digunakan. Upaya untuk mengubahnya diabaikan. |
Contacts | markAsContacted() | Tidak ada operasi. |
ContactsContract.DataUsageFeedback | | Tidak ada operasi. |
ContactsContract.Contacts | Strequent (dibintangi + sering)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI | Pengembalian membintangi kontak saja. 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 menurut berbintang dan nama. |
Alternatif
Tidak ada alternatif untuk bidang API yang tidak digunakan lagi. Solusi yang dirancang untuk menghindari pembatasan ini, baik dalam bentuk API baru atau bidang baru, tidak diizinkan.
Penerapan
Anda tidak perlu melakukan apa pun untuk menerapkan perubahan ini. Mereka 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 untuk mengimbangi perubahan apa pun. Selain itu, jika Anda menggunakan Penyedia Kontak versi bercabang, Anda harus memperbarui Penyedia Kontak Anda.
Tidak ada kustomisasi
Jangan menyesuaikan atau mengatasi perubahan informasi afinitas kontak. Mereka dibangun ke dalam kerangka kerja, dan membuat perubahan apa pun membuat Anda keluar dari kepatuhan. Jangan pernah mengubah pengaturan default atau memberikan alternatif pintu belakang.