Sélecteur de contacts Android

Le sélecteur de contacts Android fournit une interface standard protégeant la confidentialité qui permet aux utilisateurs de partager des contacts spécifiques avec des applications. Introduite dans Android 17, cette fonctionnalité sert d'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, comme 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 se compose de deux éléments 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 de backend pour gérer 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 pour remplir les vues en fonction des types de données demandés. Voici quelques vues compatibles :

  • Numéros de téléphone uniquement : l'UI 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.
  • Coordonnées personnalisées : l'UI affiche les contacts correspondant à des champs de données spécifiques demandés.

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

  • Liste triée par ordre alphabétique : les contacts sont triés par ordre alphabétique et les doublons sont supprimés.
  • Avatars des contacts : l'interface utilisateur affiche les photos ou les avatars des contacts.
  • Favoris : une catégorie "Favoris" s'affiche en haut de la liste des 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 des contacts.
  • Recherche : une barre de recherche est disponible pour trouver des contacts spécifiques.
  • Bannière et page d'informations sur la confidentialité : une notification obligatoire indique aux utilisateurs les champs de données (numéros de téléphone, adresses e-mail, etc.) 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 : utilisez le fournisseur de session uniquement lorsque vous lancez le sélecteur à l'aide de Intent.ACTION_PICK_CONTACTS.
  • Gestion des sessions : lorsqu'un utilisateur sélectionne des contacts, l'UI 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 versions avec Android 17 et versions ultérieures.

Intents acceptés

  • Intent.ACTION_PICK_CONTACTS : Intent recommandé pour les applications ciblant Android 17 et versions ultérieures.
  • Intent.ACTION_PICK : conservé pour des raisons de 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'état de l'appareil et la confidentialité, le fournisseur de session applique une règle stricte de nettoyage des données :

  • Tâche de nettoyage : une tâche 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 de l'espace de stockage, le nombre de lignes du tableau du fournisseur de session est limité à 5 000. Si la table 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 les avoir reçues.

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 Android Contact Picker.

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 (à déterminer) du CDD Android.

Validation

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