À 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
etLAST_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 :
-
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 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 | | 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 | 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.