A partire da Android 10, l'accesso ai dati relativi ai contatti, gestiti dal componente Provider di contatti (la fonte dei dati rilevata nell'app Contatti di un dispositivo), è diverso rispetto ad Android 9 e versioni precedenti.
Prima di Android 10, le app utilizzavano il fornitore di contatti per accedere ai dati e trasferirli tra un dispositivo e i servizi online. Modifiche alle funzionalità di Android 10 relative all'accessibilità dei dati per garantire una maggiore privacy degli utenti in tutti i dispositivi Android 10 che utilizzano il provider di contatti. Ad esempio, il database sottostante non contiene dati sulle affinità di contatto. Di conseguenza, le app non possono scrivere o leggere da questo file. Le modifiche includono quanto segue:
- Il fornitore di contatti non registra i dati correlati all'affinità con i contatti, ad esempio il numero di volte in cui un utente è stato contattato, l'ultima volta di contatto, l'app utilizzata, la persona contattata o eventuali dati storici correlati.
- La classe
MultiAutoCompleteTextView
nell'API di completamento automatico del fornitore di contatti non ordina i risultati della query in base al contatore delle interazioni. - Il framework Android non fornisce un ranking implicito dei contatti. Tuttavia, rimane il ranking dei contatti espliciti controllato dall'utente (ad esempio i contatti contrassegnati).
Per implementare queste modifiche, procedi in uno dei seguenti modi:
- Utilizza il provider di contatti più recente.
- Aggiorna la versione (se utilizzi una versione derivata).
Inoltre, aggiorna tutte le app che si basano sulle funzionalità del provider di contatti ritirate. Le versioni API progettate per essere soluzioni alternative alle funzioni deprecate non sono consentite.
Per Android 9 e versioni precedenti, i dati relativi alle interazioni con i contatti del fornitore di servizi di contatto non sono stati rimossi. I dati delle interazioni con i contatti vengono invece cancellati periodicamente (circa una volta al giorno) per simulare l'equivalente in Android 10. Il fornitore di contatti archivia queste informazioni, ma solo temporaneamente.
Modifiche all'API
Queste modifiche dovrebbero avere un impatto significativo sulle API. Ad esempio, il ranking del completamento automatico non avrà lo stesso rendimento. I potenziali impatti sul comportamento dell'API includeranno quanto segue:
- Il fornitore di contatti non memorizza le preferenze o le interazioni di un utente con il contatto nelle colonne della tabella
ContactsContract.Contacts
. - L'API di completamento automatico non ordina i risultati in base al contatore delle interazioni.
- Le colonne
TIMES_CONTACTED
/TIMES_USED
eLAST_TIME_CONTACTED
/LAST_TIME_USED
non verranno aggiornate. - Questi valori vengono cancellati (impostati su
null
o su 0, a seconda delle colonne interessate) durante l'upgrade ad Android 10. - Il ranking nelle API di query di completamento automatico restituisce i risultati in ordine alfabetico, mai in base alle informazioni di affinità.
- Le chiamate API per i contatti frequenti (ad esempio, utilizzando la stringa di filtro
CONTENT_FREQUENT_URI
) non restituiscono risultati.
In genere, se uno degli elementi dell'API Provider di contatti deprecata utilizza contatori, questi contatori (se utilizzati in Android 10) contengono 0 e restituiscono 0 quando viene eseguita una query. Le richieste di aggiornamento provenienti dalle API interessate vengono ignorate. Ad esempio, la classe ContactsContract.DataUsageFeedback
è stata ritirata, 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 comportamenti di restituzione dei campi dell'API ritirati sono elencati di seguito. Poiché uno di questi campi ritirati 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 dal modo in cui vengono utilizzate. I tentativi di modificarli vengono ignorati. |
Contacts
|
markAsContacted() |
Nessuna operazione. |
ContactsContract.DataUsageFeedback
|
|
Nessuna operazione. |
ContactsContract.Contacts
|
Strequent (speciali + frequenti)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
|
API di filtro (chiamate anche di completamento automatico)
|
Risultati non ordinati in base all'affinità. e sono ordinati per speciali e nome. |
Alternative
Non sono disponibili alternative ai campi dell'API ritirati. Non sono consentite soluzioni alternative progettate per eludere queste restrizioni, sotto forma di nuove API o nuovi campi.
Implementazione
Non devi 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à ritirate, potrebbe essere opportuno aggiornarle per compensare eventuali modifiche. Inoltre, se utilizzi una versione forcata del fornitore di contatti, devi aggiornarlo.
Nessuna personalizzazione
Non personalizzare o aggirare le modifiche alle informazioni sull'affinità dei contatti. Sono integrati nel framework e qualsiasi modifica comporta la mancata conformità. Non modificare mai le impostazioni predefinite e non fornire alternative di backdoor.