À 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
etLAST_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:
ContactsContract.ContactOptionsColumns#TIMES_CONTACTED
ContactsContract.ContractOptionsColumns.LAST_TIME_CONTACTED
ContactsContract.DataUsageStatColumns#TIMES_USED
ContactsContract.DataUsageStatColumns#LAST_TIME_USED
ContactsContract#CONTENT_STREQUENT_FILTER_URI
ContactsContract.Contacts#CONTENT_STREQUENT_URI
ContactsContract.Contacts#CONTENT_FREQUENT_URI
ContactsContract.Contacts#ENTERPRISE_CONTENT_FILTER_URI
ContactsContract.Contacts#CONTENT_FILTER_URI
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
|
|
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")
|
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.