Fournisseur de contacts et informations sur les affinités

À partir d'Android 10, les données liées à l'affinité des contacts, gérées par le composant Fournisseur de contacts (source des données affichées dans l'application de contacts d'un appareil), sont accessibles différemment qu'avec Android 9 et versions antérieures.

Avant Android 10, les applications utilisaient le fournisseur de contacts pour accéder aux données et les transférer entre un appareil et des services en ligne. Android 10 apporte des modifications concernant l'accessibilité des données afin de renforcer la confidentialité des utilisateurs sur tous les appareils Android 10 qui utilisent le fournisseur de contacts. Par exemple, la base de données sous-jacente ne contient pas de données sur les affinités des contacts. Par conséquent, les applications ne peuvent pas y écrire ni le lire. Voici quelques-unes des modifications apportées:

  • Le fournisseur de contacts n'enregistre pas les données liées à l'affinité des contacts, telles que le nombre de fois où un utilisateur a été contacté, la dernière fois qu'il a été contacté, l'application utilisée, la personne contactée ou toute donnée historique associée.
  • La classe MultiAutoCompleteTextView de l'API de saisie semi-automatique du fournisseur de contacts ne trie pas les résultats de requête par compteur d'interactions.
  • Le framework Android ne fournit pas de classement implicite des contacts. (Toutefois, le classement des contacts explicite contrôlé par l'utilisateur (par exemple, les contacts mis en favori) reste inchangé.)

Pour implémenter ces modifications, effectuez l'une des opérations suivantes:

  • Utilisez le dernier fournisseur de contacts.
  • Mettez à jour votre version (si vous utilisez une version dérivée).

De plus, mettez à jour toutes les applications qui reposent sur les fonctionnalités obsolètes du fournisseur de contacts. Les versions d'API conçues pour contourner les fonctions obsolètes ne sont pas autorisées.

Pour Android 9 et versions antérieures, les données des interactions avec les contacts du fournisseur de contacts n'ont pas été supprimées. À la place, les données d'interaction avec les contacts sont effacées régulièrement (environ une fois par jour) pour simuler l'équivalent dans Android 10. Le fournisseur de contacts stocke ces informations, mais uniquement de manière temporaire.

Modifications apportées à l'API

Ces modifications devraient avoir un impact important sur les API. Par exemple, le classement de la saisie semi-automatique ne sera pas aussi performant. Voici les impacts potentiels sur le comportement de l'API:

  • Le fournisseur de contacts ne stocke pas les préférences ou les interactions d'un utilisateur avec le contact dans les colonnes du tableau ContactsContract.Contacts.
  • L'API de saisie semi-automatique ne trie pas les résultats par compteur d'interactions.
  • Les colonnes TIMES_CONTACTED / TIMES_USED et LAST_TIME_CONTACTED / LAST_TIME_USED ne seront pas mises à jour.
    • Ces valeurs sont effacées (définies sur null ou définies sur 0, en fonction des colonnes concernées) lors de la mise à niveau vers Android 10.
    • Le classement dans les API de requêtes de saisie semi-automatique renvoie des résultats triés par ordre alphabétique, et jamais par information d'affinité.
    • Les appels d'API pour les contacts fréquents (par exemple, à l'aide de la chaîne de filtre CONTENT_FREQUENT_URI) ne renvoient aucun résultat.

En règle générale, si l'un des éléments de l'API du fournisseur de contacts obsolète utilise des compteurs, ces compteurs (lorsqu'ils sont utilisés dans Android 10) contiennent 0 et renvoient 0 lors d'une requête. Les requêtes de mise à jour des API concernées sont ignorées. Par exemple, la classe ContactsContract.DataUsageFeedback a été abandonnée. Les appels de mise à jour et de suppression de cette classe sont donc ignorés.

Champs ayant un impact sur les API

Ces champs ont été modifiés dans Android 10:

Les champs concernés dans Android 10 peuvent être présents dans différentes API, comme indiqué dans le tableau ci-dessous. Les champs d'API obsolètes renvoient les comportements indiqués. Étant donné qu'un de ces champs obsolètes peut être utilisé dans plusieurs de vos API, vérifiez vos cas d'utilisation.

Classe Champs de l'API 10 retours
ContactsContract.Contacts
ContactsContract.RawContacts
ContactsContract.Data
ContactsContract.Entity
ContactOptionsColumns
TIMES_CONTACTED
LAST_TIME_CONTACTED
Ces colonnes contiennent toujours 0, quelle que soit leur utilisation. Les tentatives de modification sont ignorées.
Contacts markAsContacted() Aucune opération.
ContactsContract.DataUsageFeedback

update
delete

Aucune opération.
ContactsContract.Contacts Strequent (suivis + fréquents)
CONTENT_STREQUENT_FILTER_URI
CONTENT_STREQUENT_URI
CONTENT_FREQUENT_URI
Renvoie uniquement les contacts favoris. Aucun contact fréquent n'a été renvoyé.
ContactsContract.CommonDataKinds.Email
ContactsContract.CommonDataKinds.Phone
ContactsContract.CommonDataKinds.Callable
API de filtrage (également appelées "autocomplétion")

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

Les résultats ne sont pas triés par affinité. Elles sont triées par étoiles et nom.

Autres solutions

Il n'existe aucune alternative aux champs d'API obsolètes. Les solutions de contournement conçues pour contourner ces restrictions, que ce soit sous la forme de nouvelles API ou de nouveaux champs, ne sont pas autorisées.

Implémentation

Aucune action n'est requise de votre part pour implémenter ces modifications. Elles font partie de l'initiative visant à renforcer la confidentialité des utilisateurs sur la plate-forme de l'OS Android. Toutefois, si vos applications reposent sur des fonctionnalités obsolètes, vous pouvez les mettre à jour pour compenser les modifications. En outre, si vous utilisez une version dérivée du fournisseur de contacts, vous devez le mettre à jour.

Aucune personnalisation

Ne personnalisez pas et ne contournez pas les modifications apportées aux informations sur l'affinité des contacts. Ils sont intégrés au framework, et toute modification vous met en défaut. Ne modifiez jamais les paramètres par défaut ni ne fournissez d'alternatives de porte dérobée.