Contatti Fornitore e informazioni sulle affinità

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

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

update
delete

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).

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

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.