A partire da Android 10, l'accesso ai dati relativi all'affinità dei contatti, gestiti dal componente Fornitore di contatti (l'origine dei dati visualizzati nell'app Contatti di un dispositivo), è diverso rispetto ad Android 9 e versioni precedenti.
Prima di Android 10, le app utilizzavano il provider Contatti per accedere ai dati e trasferirli tra un dispositivo e i servizi online. Android 10 presenta modifiche relative all'accessibilità dei dati per garantire una maggiore privacy dell'utente in tutti i dispositivi Android 10 che utilizzano il provider Contatti. Innanzitutto, il database sottostante non contiene dati sulle affinità di contatto. Pertanto le app non possono scrivere o leggere da esso. Le modifiche includono quanto segue:
- Il provider di contatti non registra dati relativi all'affinità dei contatti, come il numero di volte in cui un utente è stato contattato, l'ora dell'ultimo contatto, l'app utilizzata, la persona contattata o eventuali dati storici correlati.
- La classe
MultiAutoCompleteTextView
nell'API di completamento automatico del provider di contatti non ordina i risultati delle query in base al contatore di interazioni. - Il framework Android non fornisce una classifica implicita dei contatti. (Tuttavia, rimane la classificazione dei contatti espliciti e controllata dall'utente (come i contatti speciali )).
Per implementare queste modifiche, effettuare una delle seguenti operazioni:
- Utilizza il provider di contatti più recente.
- Aggiorna la tua versione (se stai utilizzando una versione biforcuta).
Inoltre, aggiorna tutte le app che si basano sulle funzionalità deprecate del provider di contatti . Non sono consentite versioni API progettate per fornire soluzioni alternative alle funzioni deprecate.
Per Android 9 e versioni precedenti, i dati sull'interazione dei contatti dal provider di contatti non sono stati rimossi. Invece, i dati di interazione dei contatti vengono cancellati periodicamente (circa una volta al giorno) per simulare l'equivalente in Android 10. Il provider di contatti memorizza queste informazioni, ma solo temporaneamente.
Modifiche all'API
Si prevede che questi cambiamenti avranno un grande impatto sulle API. Ad esempio, la classificazione del completamento automatico non funzionerà altrettanto bene. I potenziali impatti sul comportamento dell'API includono quanto segue:
- Il provider di contatti non memorizzerà le preferenze di un utente o le interazioni con il contatto nelle colonne della tabella
ContactsContract.Contacts
. - L'API di completamento automatico non ordinerà i risultati in base al contatore di interazioni.
- Le colonne
TIMES_CONTACTED
/TIMES_USED
eLAST_TIME_CONTACTED
/LAST_TIME_USED
non verranno aggiornate. - Questi vengono cancellati (su
null
o impostati su 0, a seconda delle colonne interessate) dopo l'aggiornamento ad Android 10. - La classificazione nelle API di query con completamento automatico restituisce risultati ordinati alfabeticamente, mai in base alle informazioni di affinità.
- Le chiamate API per contatti frequenti (ad esempio, utilizzando la stringa di filtro
CONTENT_FREQUENT_URI
) non restituiscono risultati.
In genere, se uno qualsiasi degli elementi API del fornitore di contatti deprecati utilizza contatori, tali contatori (se utilizzati in Android 10) contengono 0 e restituiscono 0 quando richiesto. Le richieste di aggiornamento dalle API interessate vengono ignorate. Ad esempio, la classe ContactsContract.DataUsageFeedback
è stata deprecata, quindi le chiamate di aggiornamento ed eliminazione a questa classe vengono ignorate.
Campi che influiscono sulle API
Questi campi sono cambiati in 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
I campi interessati in Android 10 potrebbero essere presenti in API diverse, come indicato nella tabella seguente. I campi API deprecati restituiscono i comportamenti elencati. Poiché uno di questi campi obsoleti potrebbe essere utilizzato in diverse API, verifica i tuoi casi d'uso.
Classe | Campi API | 10 resi |
---|---|---|
ContactsContract.Contacts ContactsContract.RawContacts ContactsContract.Data ContactsContract.Entity | ContactOptionsColumns TIMES_CONTACTED LAST_TIME_CONTACTED | Queste colonne contengono sempre 0, indipendentemente da come vengono utilizzate. I tentativi di modificarli vengono ignorati. |
Contacts | markAsContacted() | Nessuna operazione. |
ContactsContract.DataUsageFeedback | | Nessuna operazione. |
ContactsContract.Contacts | Strequente ( contrassegnato + frequente)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI | Restituisce solo i contatti speciali . Nessun contatto frequente restituito. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable | Filtra le API (chiamate anche completamento automatico). | Risultati non ordinati per affinità. Questi sono ordinati per asterisco e nome . |
Alternative
Non esistono alternative ai campi API deprecati. Non sono consentite soluzioni alternative progettate per aggirare queste restrizioni, sotto forma di nuove API o nuovi campi.
Implementazione
Non è necessario fare nulla per implementare queste modifiche. Fanno parte dell'iniziativa per aumentare la privacy degli utenti sulla piattaforma del sistema operativo Android. Tuttavia, se le tue app si basano su funzionalità deprecate, potresti voler aggiornare le tue app per compensare eventuali modifiche. Inoltre, se utilizzi una versione biforcuta del provider di contatti, devi aggiornare il provider di contatti.
Nessuna personalizzazione
Non personalizzare o aggirare le modifiche alle informazioni sull'affinità dei contatti. Sono integrati nel framework e qualsiasi modifica comporta la non conformità. Non modificare mai le impostazioni predefinite né fornire alternative backdoor.