Aller au contenu
Narvy

READ_CONTACTS sur Google Play : sélecteur de contacts ou déclaration dans la Play Console

Votre build demande READ_CONTACTS. Selon la règle Google Play sur les contacts, une application qui cible l'API 37 ou plus ne peut la conserver que si le sélecteur de contacts d'Android ne permet pas d'assurer sa fonction principale, et doit en donner la raison dans une déclaration de la Play Console. Si l'application n'a besoin que des contacts choisis par l'utilisateur, passez au sélecteur de contacts et retirez la permission.

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.

Kotlin (sélecteur de contacts d'Android 17)
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

AndroidManifest.xml (xmlns:tools="http://schemas.android.com/tools")
<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é.

Contrôler un build dans le navigateur

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.