À 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 visible dans l'application Contacts d'un appareil), sont accessibles différemment que dans Android 9 et les 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 d'affinités de contact. Par conséquent, les applications ne peuvent ni y écrire ni y lire. Les modifications 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é, la dernière fois qu'il a été contacté, l'application utilisée, la personne contactée ou toute autre donnée historique connexe.
- 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 explicite des contacts contrôlé par l'utilisateur (tel 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 dérivé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 les 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 seulement 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 ou les interactions avec le contact dans les colonnes de la table
ContactsContract.Contacts
. - L'API de saisie semi-automatique ne triera pas les résultats par compteur d'interaction.
- Les
TIMES_CONTACTED
/TIMES_USED
etLAST_TIME_CONTACTED
/LAST_TIME_USED
ne seront pas mises à jour. - Celles-ci s'effacent (à
null
ou à 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 des 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.
En règle générale, 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
était obsolète, donc 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 d'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.
Classer | 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 leur utilisation. Les tentatives de modification sont ignorées. |
Contacts | markAsContacted() | Pas d'opération. |
ContactsContract.DataUsageFeedback | | Pas d'opération. |
ContactsContract.Contacts | Fréquent ( étoilé + fréquent)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI | Renvoie uniquement les contacts suivis. Aucun contact fréquent n'est revenu. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable | API de filtrage (également appelées saisie semi-automatique) | Résultats non triés par affinité. Ceux-ci sont triés par étoile et par nom . |
Alternatives
Il n'y a pas d'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.
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 dérivé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 vous met hors conformité. Ne modifiez jamais les paramètres par défaut et ne fournissez jamais d'alternatives par porte dérobée.