Selettore di contatti Android

Il selettore di contatti Android fornisce un'interfaccia standard che tutela la privacy e consente agli utenti di condividere contatti specifici con le app. Introdotta in Android 17, questa funzionalità funge da alternativa senza autorizzazioni all'ampia autorizzazione READ_CONTACTS.

Utilizzando il selettore di contatti, le app possono richiedere l'accesso a dati di contatto specifici, come numeri di telefono o indirizzi email. L'utente seleziona i contatti che vuole condividere e il sistema concede all'app l'accesso temporaneo in lettura solo a questi dettagli.

Architettura

Il selettore di contatti è costituito da due componenti principali:

  • App UI Picker:questo componente funge da interfaccia rivolta all'utente per la selezione dei contatti.
  • Provider di sessione:questo componente funge da servizio di backend che gestisce la sessione di accesso temporaneo.

Diagramma di sequenza del selettore di contatti

Figura 1. Diagramma di sequenza

UI del selettore

L'interfaccia utente del selettore gestisce l'interfaccia utente per la selezione dei contatti ed esegue query sul provider di contatti direttamente per popolare le visualizzazioni in base ai tipi di dati richiesti. Le visualizzazioni supportate includono:

  • Solo numeri di telefono:l'interfaccia utente mostra i contatti contenenti numeri di telefono.
  • Solo email:l'interfaccia utente mostra i contatti che contengono indirizzi email.
  • Dati di contatto personalizzati:l'interfaccia utente mostra i contatti corrispondenti a campi di dati specifici richiesti.

Inoltre, l'interfaccia utente supporta le seguenti funzionalità:

  • Elenco in ordine alfabetico:i contatti sono in ordine alfabetico con eliminazione dei duplicati.
  • Avatar dei contatti:l'interfaccia utente mostra le foto o gli avatar dei contatti.
  • Preferiti:una categoria Preferiti viene visualizzata nella parte superiore dell'elenco dei contatti.
  • Cambio profilo:questa funzionalità consente agli utenti di selezionare i contatti da profili utente diversi (ad esempio, Lavoro e Privato).
  • Selezione singola e multipla:il sistema supporta le modalità di selezione singola e multipla (il limite predefinito è 50 e il massimo è 100).
  • Anteprima della selezione:gli utenti possono visualizzare in anteprima e gestire i contatti selezionati prima di confermare.
  • Scorrimento rapido:questa funzionalità consente di navigare rapidamente nell'elenco dei contatti.
  • Cerca:è disponibile una barra di ricerca per trovare contatti specifici.
  • Banner sulla privacy e pagina dei dettagli sulla privacy: un avviso obbligatorio informa gli utenti esattamente quali campi di dati (ad esempio, numeri di telefono, email) l'app sta richiedendo.

Provider di sessione

Il provider di sessione (packages/providers/ContactsProvider) funge da intermediario sicuro tra l'app client e il provider di contatti.

  • Ruolo:utilizza il fornitore di sessioni solo quando avvii il selettore utilizzando Intent.ACTION_PICK_CONTACTS.
  • Gestione delle sessioni:quando un utente seleziona i contatti, la UI del selettore scrive i dati di selezione (mappati all'UID del client) nel provider di sessioni.
  • Accesso ai dati:il fornitore restituisce un URI content://com.android.providers.contacts.picker.sessions al selettore. Il selettore applica i flag di lettura appropriati prima di restituire l'URI all'app client. Questo URI concede un accesso in lettura temporaneo e granulare ai campi di dati specifici selezionati dall'utente, senza esporre tutti i dati del contatto.
  • Accesso privilegiato:la firma android.permission.MANAGE_CONTACTS_PICKER_SESSION e le autorizzazioni privilegiate proteggono l'accesso in scrittura al provider di sessioni, garantendo che solo il selettore di sistema attendibile possa creare sessioni.

Integrazione

I produttori di hardware e i partner devono includere il Selettore di contatti Android nelle build con Android 17 e versioni successive.

Intent supportati

  • Intent.ACTION_PICK_CONTACTS: l'intent consigliato per le app che hanno come target Android 17 e versioni successive.
  • Intent.ACTION_PICK: Mantenuto per la compatibilità con le versioni precedenti. Il sistema instrada automaticamente queste richieste al nuovo selettore per i tipi MIME supportati (email, telefono o contatto).

Gestione sessione

Per mantenere l'integrità e la privacy del dispositivo, il fornitore della sessione applica una rigorosa norma di pulizia dei dati:

  • Job di pulizia:un job di sistema (CleanupJobService) viene eseguito periodicamente per rimuovere i dati di sessione più vecchi di 24 ore.
  • Limite di righe:per evitare un utilizzo eccessivo dello spazio di archiviazione, la tabella del fornitore di sessioni è limitata a un massimo di 5000 righe. Se la tabella raggiunge queste dimensioni, il sistema elimina automaticamente le righe meno recenti prima di inserire i nuovi dati di sessione.
  • Persistenza:i dati della sessione sono temporanei. Le app client devono persistenza dei dati di contatto restituiti immediatamente dopo la ricezione.

Autorizzazioni

L'accesso in scrittura al fornitore di sessioni richiede l'autorizzazione android.permission.MANAGE_CONTACTS_PICKER_SESSION, che è limitata al pacchetto del selettore di contatti Android.

Personalizzazione e conformità

I partner possono personalizzare elementi visivi come caratteri e colori, ma le implementazioni devono rispettare la sezione 3.18.2 Selettore contatti di sistema della CDD di Android.

Convalida

I partner devono verificare la propria implementazione utilizzando sia il Compatibility Test Suite (CTS) sia il Google Mobile Services Test Suite (GTS).