Ce que cela signifie
Apps that target Android 17 or higher (API level 37+) may only request the READ_CONTACTS permission if the Android Contact Picker is not sufficient for your app to provide core functionality.
Play Console Help, permissions and APIs that access sensitive information
Cette règle est nouvelle et ne concerne que les applications qui ciblent l'API 37 (Android 17) ou plus. Google liste les usages qui justifient un accès large : gestion des contacts, appels ou SMS, historique d'appels, CRM, filtrage d'appels, accessibilité, assistants personnels, mise en relation avec des contacts déjà inscrits, sauvegarde et restauration, saisie automatique. Inviter un contact choisi par l'utilisateur ou partager avec lui relève du sélecteur de contacts.
Le contrôle signale la permission et l'API cible lues dans le manifeste. Il ne peut pas dire si le sélecteur suffit à votre fonctionnalité, ni si la déclaration a été envoyée : le résultat est un avertissement, jamais un point bloquant.
Échéance
À partir du 27 janvier 2027, selon le calendrier des règles Google Play. Le contrôle applique la règle à partir de cette date ; avant, le résultat est intitulé « Exigé à partir du » cette date. Il n'est jamais bloquant : ce qu'exige Google ne figure pas dans le binaire. Google indique aussi qu'une prolongation automatique de 30 jours sera disponible dans la Play Console, et la règle ne s'applique qu'à partir d'une API cible 37.
Corriger
1. Utiliser le sélecteur de contacts pour les contacts choisis par l'utilisateur
Sur Android 17, le sélecteur de contacts ne renvoie que les champs demandés, pour les contacts sélectionnés par l'utilisateur, sans aucune permission. Pour les applications qui ciblent l'API 37+, le système remplace aussi l'ancien Intent.ACTION_PICK par le nouveau sélecteur.
val pickContact = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
val uri = result.data?.data ?: return@registerForActivityResult
// read the fields the user shared from this Uri
}
val intent = Intent(ACTION_PICK_CONTACTS).apply {
putStringArrayListExtra(
EXTRA_PICK_CONTACTS_REQUESTED_DATA_FIELDS,
arrayListOf(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
)
}
pickContact.launch(intent)2. Retirer READ_CONTACTS, y compris des bibliothèques
<uses-permission android:name="android.permission.READ_CONTACTS" tools:node="remove" />3. Si l'application a vraiment besoin de tout le carnet d'adresses
Conservez la permission et remplissez la déclaration Contacts dans la Play Console : quelle fonctionnalité visible par l'utilisateur en a besoin, et pourquoi le sélecteur de contacts ne suffit pas.
Vérifier avant de soumettre
Déposez l'APK, AAB ou lot d'APK fractionnés (XAPK, APKS, APKM) sur la page de contrôle des stores. Elle exécute PLAY-CONTACTS-PERMISSION avec les dates de cette page, puis supprime le fichier : rien de l'application n'est conservé.
Questions fréquentes
Mon application cible l'API 36. Est-elle concernée le 27 janvier 2027 ?
Pas par cette règle : elle s'applique aux applications qui ciblent l'API 37 ou plus. Le contrôle la signale comme non applicable et l'indique. Elle s'appliquera quand vous relèverez l'API cible.
WRITE_CONTACTS est-elle concernée ?
Le texte de Google ne cite que READ_CONTACTS : le contrôle ne signale donc que READ_CONTACTS.