Sélecteur de contacts Android

Le sélecteur de contacts Android fournit une interface standard qui préserve la confidentialité et permet aux utilisateurs de partager des contacts spécifiques avec des applications. Introduite dans Android 17, cette fonctionnalité constitue une alternative sans autorisation à l'autorisation générale READ_CONTACTS.

Grâce au sélecteur de contacts, les applications peuvent demander l'accès à des données de contact spécifiques, telles que des numéros de téléphone ou des adresses e-mail. L'utilisateur sélectionne les contacts qu'il souhaite partager, et le système accorde à l'application un accès en lecture temporaire à ces informations uniquement.

Architecture

Le sélecteur de contacts comprend deux composants principaux :

  • Application d'interface utilisateur du sélecteur : ce composant sert d'interface utilisateur pour la sélection des contacts.
  • Fournisseur de session : ce composant fait office de service backend qui gère la session d'accès temporaire.

Diagramme de séquence du sélecteur de contacts

Figure 1. Diagramme de séquence

Interface utilisateur du sélecteur

L'interface utilisateur du sélecteur gère l'interface utilisateur pour la sélection des contacts et interroge directement le fournisseur de contacts afin de remplir les vues en fonction des types de données demandés. Les vues compatibles incluent les suivantes :

  • Numéros de téléphone uniquement : l'interface utilisateur affiche les contacts contenant des numéros de téléphone.
  • E-mails uniquement : l'interface utilisateur affiche les contacts contenant des adresses e-mail.
  • Informations de contact personnalisées : l'interface utilisateur affiche les contacts correspondant aux champs de données spécifiques demandés.

De plus, l'interface utilisateur est compatible avec les fonctionnalités suivantes :

  • Liste triée par ordre alphabétique : les contacts sont triés par ordre alphabétique avec déduplication.
  • Avatars de contact : l'interface utilisateur affiche les photos ou les avatars des contacts.
  • Favoris : une catégorie "Favoris" s'affiche en haut de la liste de contacts.
  • Sélecteur de profil : cette fonctionnalité permet aux utilisateurs de sélectionner des contacts à partir de différents profils utilisateur (par exemple, professionnel ou privé).
  • Sélection unique et multiple : le système est compatible avec les modes de sélection unique et multiple (la limite par défaut est de 50 et la limite maximale est de 100).
  • Aperçu de la sélection : les utilisateurs peuvent prévisualiser et gérer les contacts sélectionnés avant de confirmer.
  • Défilement rapide : cette fonctionnalité permet de parcourir rapidement la liste de contacts.
  • Recherche : une barre de recherche permet de trouver des contacts spécifiques.
  • Bannière de confidentialité et page de détails sur la confidentialité : une notification obligatoire informe les utilisateurs des champs de données exacts (par exemple, numéros de téléphone, e-mails) que l'application demande.

Fournisseur de session

Le fournisseur de session (packages/providers/ContactsProvider) sert d'intermédiaire sécurisé entre l'application cliente et le fournisseur de contacts.

  • Rôle : n'utilisez le fournisseur de session que lorsque vous lancez le sélecteur à l'aide de Intent.ACTION_PICK_CONTACTS.
  • Gestion des sessions : lorsqu'un utilisateur sélectionne des contacts, l'interface utilisateur du sélecteur écrit les données de sélection (mappées à l'UID du client) dans le fournisseur de session.
  • Accès aux données : le fournisseur renvoie un URI content://com.android.providers.contacts.picker.sessions au sélecteur. Le sélecteur applique les indicateurs de lecture appropriés avant de renvoyer l'URI à l'application cliente. Cet URI accorde un accès en lecture temporaire et précis aux champs de données spécifiques sélectionnés par l'utilisateur, sans exposer toutes les données du contact.
  • Accès privilégié : la signature android.permission.MANAGE_CONTACTS_PICKER_SESSION et les autorisations privilégiées protègent l'accès en écriture au fournisseur de session, ce qui garantit que seul le sélecteur système de confiance peut créer des sessions.

Intégration

Les fabricants de matériel et les partenaires doivent inclure le sélecteur de contacts Android dans les builds avec Android 17 et versions ultérieures.

Intents compatibles

  • Intent.ACTION_PICK_CONTACTS: l'intent recommandé pour les applications ciblant Android 17 et versions ultérieures.
  • Intent.ACTION_PICK : conservé pour la rétrocompatibilité. Le système achemine automatiquement ces requêtes vers le nouveau sélecteur pour les types MIME compatibles (e-mail, téléphone ou contact).

Gestion de la session

Pour préserver l'intégrité et la confidentialité des appareils, le fournisseur de session applique une stratégie stricte de nettoyage des données :

  • Job de nettoyage : un job système (CleanupJobService) s'exécute régulièrement pour supprimer les données de session datant de plus de 24 heures.
  • Limite de lignes : pour éviter une utilisation excessive du stockage, le tableau du fournisseur de session est limité à 5 000 lignes maximum. Si le tableau atteint cette taille, le système supprime automatiquement les lignes les plus anciennes avant d'insérer de nouvelles données de session.
  • Persistance : les données de session sont temporaires. Les applications clientes sont censées conserver les données de contact renvoyées immédiatement après leur réception.

Autorisations

L'accès en écriture au fournisseur de session nécessite l'autorisation android.permission.MANAGE_CONTACTS_PICKER_SESSION, qui est limitée au package du sélecteur de contacts Android.

Personnalisation et conformité

Les partenaires peuvent personnaliser des éléments visuels tels que les polices et les couleurs, mais les implémentations doivent respecter la section 3.18.2 du CDD Android (Sélecteur de contacts système).

Validation

Les partenaires doivent valider leur implémentation à l'aide de la Compatibility Test Suite (CTS) et de la Google Mobile Services Test Suite (GTS).