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 (la source de données affichée dans l'application Contacts d'un appareil), sont accessibles différemment que dans 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 propose des modifications concernant l'accessibilité des données pour garantir une confidentialité accrue des utilisateurs sur tous les appareils Android 10 qui utilisent le fournisseur de contacts. D'une part, 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 y lire. Les changements incluent les éléments suivants :

  • Le fournisseur de contacts n'enregistre pas les données liées à l'affinité des contacts, telles que le nombre de fois qu'un utilisateur a été contacté, l'heure du dernier 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 la requête par compteur d'interaction.
  • Le framework Android ne fournit pas de classement implicite des contacts. (Cependant, le classement des contacts explicites et contrôlés par l'utilisateur (tels que les contacts favoris ) demeure).

Pour mettre en œuvre ces modifications, effectuez l'une des opérations suivantes :

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

En outre, 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 d'interaction de contact du fournisseur de contacts n'ont pas été supprimées. Au lieu de cela, les données d'interaction de contact sont effacées périodiquement (environ une fois par jour) pour simuler l'équivalent dans Android 10. Le fournisseur de contacts stocke ces informations, mais uniquement temporairement.

Modifications de l'API

Ces changements devraient avoir un impact important sur les API. Par exemple, le classement par saisie semi-automatique ne fonctionnera pas aussi bien. Les impacts potentiels sur le comportement de l'API sont les suivants :

  • Le fournisseur de contacts ne stocke pas les préférences d'un utilisateur ni les interactions avec le contact dans les colonnes du tableau ContactsContract.Contacts .
  • L'API de saisie semi-automatique ne triera 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.
    • Ceux-ci sont effacés (soit null , soit définis sur 0, selon les colonnes concernées) lors de la mise à niveau vers Android 10.
    • Le classement dans les API de requête de saisie semi-automatique renvoie les résultats triés par ordre alphabétique, jamais par informations d'affinité.
    • Les appels d'API pour les contacts fréquents (par exemple, en utilisant la chaîne de filtre CONTENT_FREQUENT_URI ) ne renvoient aucun résultat.

Généralement, si l'un des éléments obsolètes de l'API du fournisseur de contacts utilise des compteurs, ces compteurs (lorsqu'ils sont utilisés dans Android 10) contiennent 0 et renvoient 0 lorsqu'ils sont interrogés. Les demandes de mise à jour des API concernées sont ignorées. Par exemple, la classe ContactsContract.DataUsageFeedback étant obsolète, les appels de mise à jour et de suppression à cette classe sont ignorés.

Champs ayant un impact sur les API

Ces champs ont changé 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 API obsolètes renvoient les comportements répertoriés. Étant donné que l’un de ces champs obsolètes peut être utilisé dans plusieurs de vos API, vérifiez vos cas d’utilisation.

Classe Champs 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 la manière dont elles sont utilisées. Les tentatives de modification sont ignorées.
Contacts markAsContacted() Pas d'opération.
ContactsContract.DataUsageFeedback

update
delete

Pas d'opération.
ContactsContract.Contacts Stréquent ( étoilé + fréquent)
CONTENT_STREQUENT_FILTER_URI
CONTENT_STREQUENT_URI
CONTENT_FREQUENT_URI
Renvoie uniquement les contacts favoris . Aucun contact fréquent n’est revenu.
ContactsContract.CommonDataKinds.Email
ContactsContract.CommonDataKinds.Phone
ContactsContract.CommonDataKinds.Callable
Filtrer (également appelé saisie semi-automatique) les API

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

Résultats non triés par affinité. Ceux-ci sont triés par favoris et par nom .

Alternatives

Il n'existe aucune alternative aux champs 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.

Mise en œuvre

Vous n’avez rien à faire pour mettre en œuvre ces modifications. Ils font partie de l'initiative visant à accroître la confidentialité des utilisateurs sur la plate-forme Android OS. Toutefois, si vos applications reposent sur des fonctionnalités obsolètes, vous souhaiterez peut-être mettre à jour vos applications pour compenser tout changement. De plus, si vous utilisez une version forkée du fournisseur de contacts, vous devez mettre à jour votre fournisseur de contacts.

Aucune personnalisation

Ne personnalisez pas et ne contournez pas les modifications des informations d’affinité des contacts. Ils sont intégrés au cadre et toute modification entraîne une non-conformité. Ne modifiez jamais les paramètres par défaut et ne proposez jamais d’alternatives de porte dérobée.