Informazioni sul fornitore di contatti e sulle affinità

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 e LAST_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 filtroCONTENT_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:

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

update
delete

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)

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

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.