Contatti fornitore e informazioni sulle affinità

A partire da Android 10, i dati relativi all'affinità dei contatti, gestiti dal componente Provider di contatti (l'origine dei dati visualizzata nell'app dei contatti di un dispositivo), sono accessibili in modo diverso rispetto ad Android 9 e versioni precedenti.

Prima di Android 10, le app utilizzavano il provider di 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 degli utenti in tutti i dispositivi Android 10 che utilizzano il provider di contatti. Per uno, 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 fornitore di contatti non registra i dati relativi all'affinità dei contatti, come il numero di volte in cui un utente è stato contattato, l'ultimo contatto, l'app utilizzata, la persona contattata o qualsiasi dato storico correlato.
  • La classe MultiAutoCompleteTextView nell'API di completamento automatico del provider di contatti non ordina i risultati delle query in base al contatore di interazione.
  • Il framework Android non fornisce il ranking dei contatti implicito. (Tuttavia, la classifica esplicita dei contatti controllata dall'utente (come i contatti speciali) rimane).

Per implementare queste modifiche, eseguire una delle seguenti operazioni:

  • Usa l'ultimo fornitore di contatti.
  • Aggiorna la tua versione (se stai utilizzando una versione biforcuta).

Inoltre, aggiorna tutte le app che si basano sulle funzionalità del provider di contatti deprecate . Non sono consentite versioni dell'API progettate per essere soluzioni alternative alle funzioni deprecate.

Per Android 9 e versioni precedenti, i dati di interazione dei contatti del provider di contatti non sono stati rimossi. Al contrario, 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 alle API

Si prevede che queste modifiche avranno un grande impatto sulle API. Ad esempio, la classifica di completamento automatico non funzionerà altrettanto bene. I potenziali impatti sul comportamento dell'API includono quanto segue:

  • Il fornitore di contatti non memorizzerà le preferenze o le interazioni di un utente per il contatto nelle colonne della tabella ContactsContract.Contacts .
  • L'API di completamento automatico non ordina i risultati in base al contatore di interazione.
  • Le TIMES_CONTACTED / TIMES_USED e LAST_TIME_CONTACTED / LAST_TIME_USED non verranno aggiornate.
    • Questi vengono cancellati (su null o impostati su 0, a seconda delle colonne interessate) durante l'aggiornamento ad Android 10.
    • La classificazione nelle API delle query di completamento automatico restituisce i risultati ordinati in ordine alfabetico, mai in base alle informazioni sull'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 del provider di contatti deprecato 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 stati modificati in Android 10:

I campi interessati in Android 10 possono essere presenti in diverse API, come indicato nella tabella seguente. I campi API obsoleti restituiscono comportamenti come elencato. Poiché uno di questi campi obsoleti può essere utilizzato in molte delle tue API, verifica i tuoi casi d'uso.

Classe Campi API 10 ritorni
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

update
delete

Nessuna operazione.
ContactsContract.Contacts Strequente ( stellato + 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).

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

Risultati non ordinati per affinità. Questi sono ordinati per stellato e nome .

Alternative

Non ci sono alternative ai campi API deprecati. Non sono consentite soluzioni alternative progettate per aggirare queste restrizioni, sotto forma di nuove API o di 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à obsolete, 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 apportare modifiche ti porta fuori dalla conformità. Non modificare mai le impostazioni predefinite né fornire alternative backdoor.