Informazioni sul fornitore di contatti e sulle affinità

A partire da Android 10, i dati relativi all'affinità con i contatti, gestiti dal componente Provider di contatti (l'origine dei dati visualizzati nell'app Contatti di un dispositivo), sono accessibili in modo 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. Android 10 include modifiche relative all'accessibilità dei dati per garantire una maggiore privacy degli utenti su tutti i dispositivi Android 10 che utilizzano il provider di contatti. Ad esempio, il database sottostante non contiene dati sulle affinità dei contatti. Di conseguenza, le app non possono scrivere o leggere dati. 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, esegui una delle seguenti operazioni:

  • 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à ritirate del fornitore di contatti. Le versioni dell'API progettate come soluzioni alternative alle funzioni ritirate 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. Invece, i dati relativi alle interazioni con i contatti vengono 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 risultati ordinati alfabeticamente, mai in base alle informazioni di affinità.
    • Le chiamate API per i contatti frequenti (ad esempio, utilizzando la stringa filtro CONTENT_FREQUENT_URI) non restituiscono risultati.

In genere, se uno degli elementi dell'API Provider di contatti non più supportati 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, pertanto 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 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à. Sono ordinate per con stelle e nome.

Alternative

Non sono disponibili alternative ai campi dell'API ritirati. Le soluzioni alternative progettate per aggirare queste limitazioni, sotto forma di nuove API o nuovi campi, non sono consentite.

Implementazione

Non è richiesta alcuna azione da parte tua 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 o fornire alternative backdoor.