Zum Hauptinhalt springen

Google Play Contacts Policy 2027: Capacitor Guide

Google Play erlaubt ab Januar 2027 nur noch die Leserechte für Kontakte. Erfahren Sie, welche Änderungen für Capacitor-Apps vorliegen und wie Sie den Kontakt-Wähler verwenden.

Beitragscredits

Martin Donadieu

Schreiber

Valeria

Reviewer

Jordan

Editor

Google Play Kontakte-Richtlinie 2027: Capacitor Leitfaden

Google Play kontaktberechtigungsrichtlinie bedeutet, dass Apps, die ab dem 27. Januar 2027 Android 17 (API Stufe 37) oder höher als Ziel haben, nur noch die Berechtigung zum Zugriff auf Kontakte anfragen dürfen. READ_CONTACTS if the Android Contact Picker cannot support a core feature, and must justify it with a Play Console declaration. For most Capacitor apps that read contacts to invite a friend, share a file or fill in a phone number, the fix is to switch to the Contact Picker and remove the permission. This guide explains the policy, shows how to do that with @capgo/capacitor-contacts, und beschreibt, was zu tun ist, wenn Sie wirklich das vollständige Adressbuch benötigen.

Was die Richtlinie besagt

Google announced the policy on April 15, 2026, as part of a set of privacy updates. The key points, from the Play Console Help pages:

  • Scope: Anwendungen, die auf Android 17 (API 37) oder höher zielen und anfragen READ_CONTACTS.
  • Regel: Sie dürfen nur dann die Erlaubnis anfragen, READ_CONTACTS wenn der Android Kontakt Picker nicht ausreicht für eine Kernfunktion Ihrer App.
  • Erklärung: Apps, die die Erlaubnis behalten, müssen in Play Console eine Erklärung abgeben, in der beschrieben wird, welche Funktionen sie benötigen und warum der Picker nicht ausreicht.
  • Zeitplan: Play Console begann, Apps, die eine Erklärung abgeben, READ_CONTACTS ab September 2026 anzusprechen. Die Einhaltung ist am 27. Januar 2027 verpflichtend. Google erwähnt eine 30-tägige Selbstbedienungserweiterung in Play Console.
  • Ausschließungen: private Apps und Apps für die Unternehmensgerätemanagement sind außerhalb des Geltungsbereichs.
  • Daten: Kontaktinformationen sind persönlich und sensibel unter der Benutzerdatenrichtlinie, und Sie dürfen keine nichtöffentlichen Kontaktinformationen ohne Genehmigung der betreffenden Personen veröffentlichen.

Verwendungsfälle, die READ_CONTACTS beibehalten können

Google listet die Kernfunktionen wie Kontaktverwaltung, Dialer und SMS-Anwendungen, Anrufverlauf und Anruffilter, CRM, Barrierefreiheitsfunktionen, persönliche Assistenten, Freundesmatch, Backup und Wiederherstellung und Tastaturen oder Autocomplete.

Verwendungsfälle, die auf den Picker umschalten sollten

Einladen oder jemanden empfehlen, Dateien teilen, zusammenarbeiten oder einen Kontakt auswählen, um Geld zu senden. Wenn Ihr App Kontakte liest, wird die Erklärung nicht akzeptiert. Verwenden Sie den Picker.

Welche Änderungen auf Android 17

Android 17 ships a new system Contact Picker. Apps get a temporary, read-only session URI that only exposes the contacts and fields the user selected, without any permission. For apps targeting Android 17, the system automatically upgrades the classic Intent.ACTION_PICK Bei älteren Android-Versionen hat das Auswählen eines bestimmten Datenzeilen (z.B. einer Telefonnummer) durch den Kontakte-Picker immer eine URI zurückgegeben, die der App ohne

On older Android versions, picking a specific data row (for example a phone number) through the contacts picker has always returned a URI the app can read without READ_CONTACTSDas ist, was eine permission-freie Fluss auf jedem Android-Version ermöglicht.

Warum "einen Kontakt auswählen" früher READ_CONTACTS benötigte

Many Capacitor plugins implement “pick contact” by opening the picker for a whole contact, then querying the address book for that contact’s phone numbers and emails. That second query needs READ_CONTACTSSo selbst Apps, die nur eine Telefonnummer wollten, erklärten letztendlich die Berechtigung, genau das, was die Richtlinie anvisiert.

Die Lösung besteht darin, dem Picker die spezifische Feld zu fragen, das Sie benötigen, so dass das Ergebnis-URI bereits die Daten enthält.

Wählen Sie eine Telefonnummer, E-Mail-Adresse oder Adresse ohne READ_CONTACTS

@capgo/capacitor-contacts hinzugefügt ein property eine Option in Version 8.1.0. Wenn sie aktiviert ist, öffnet Android den Picker gegen die Telefonnummer, E-Mail-Adresse oder die postalische Adresse-Tabelle und liest die ausgewählte Zeile aus der gewährten URI. Keine READ_CONTACTS ist erforderlich auf jeder Android-Version. Auf iOS benötigt der System-Picker nie eine Kontakte-Erlaubnis.

bun add @capgo/capacitor-contacts
bunx cap sync
import { CapacitorContacts, ContactProperty } from '@capgo/capacitor-contacts';

export async function pickPhoneNumber(): Promise<string | undefined> {
  const { contacts } = await CapacitorContacts.pickContacts({
    property: ContactProperty.PhoneNumber,
  });
  const picked = contacts[0];
  return picked?.phoneNumbers?.[0]?.value;
}

export async function pickEmail(): Promise<string | undefined> {
  const { contacts } = await CapacitorContacts.pickContacts({
    property: ContactProperty.EmailAddress,
  });
  return contacts[0]?.emailAddresses?.[0]?.value;
}

Mit property, enthält das Ergebnis den Kontakt id, displayName und die ausgewählte Eigenschaft nur. Mehrfachauswahl wird ignoriert, Eigenschaften-Picking gibt immer nur einen Wert zurück. Wenn der Benutzer abbricht, überprüfen Sie eine leere Array.

Der Plugin deklariert READ_CONTACTS oder WRITE_CONTACTS in seinem eigenen Manifest, so dass, wenn Sie nur Eigenschaften-Picking verwenden, Ihr kombiniertes Manifest sauber bleibt.

When Sie noch READ_CONTACTS benötigen

Diese Pluginmethoden lesen das Adressbuch und benötigen weiterhin die Erlaubnis:

  • pickContacts() oder pickContact() (für property, when you want the full contact record
  • getContacts(), getContactById(), countContacts()
  • getGroups(), getGroupById(), getAccounts()

If your app is a CRM, a backup tool or a friend matching feature, that is a legitimate core use. Add the permission yourself and file the declaration:

<!-- android/app/src/main/AndroidManifest.xml -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
import { CapacitorContacts } from '@capgo/capacitor-contacts';

const perm = await CapacitorContacts.requestPermissions({ permissions: ['readContacts'] });
if (perm.readContacts === 'granted' || perm.readContacts === 'limited') {
  const { contacts } = await CapacitorContacts.getContacts({
    fields: ['displayName', 'phoneNumbers'],
    limit: 200,
    offset: 0,
  });
  console.log(contacts.length);
}

Überprüfen Sie die kombinierte Manifestdatei. READ_CONTACTSSchreiben von Kontakten WRITE_CONTACTS (for createContact, updateContactById, deleteContactById) wird nicht Gegenstand dieser Richtlinie sein, sondern nur dann hinzugefügt, wenn Sie diese Methoden verwenden.

Migrationsplan für eine Capacitor-App

  1. . Kontakte schreiben mit Deine Veröffentlichung erstellen und öffnen android/app/build/intermediates/merged_manifest/ (oder verwende die Merged Manifest-Taste von Android Studio). Einige Plugins fügen es hinzu READ_CONTACTS ohne dass du es bemerkst. Wenn ein Plugin es hinzufügt und du es nicht benötigst, entferne es mit tools:node="remove":

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools">
        <uses-permission android:name="android.permission.READ_CONTACTS" tools:node="remove" />
    </manifest>
  2. Liste alle Orte, an denen du Kontakte berührst. Für jeden entscheide: Picker mit einer Eigenschaft oder vollständiger Adressbuch.

  3. Ersatz für Einladungs- und Teilen-Flows mit pickContacts({ property }).

  4. Halte die Berechtigung nur für Kernfunktionenund bereite die Erklärungstext vor: welches Feature, warum ist der Picker nicht ausreichend, ein Video, wenn das Feature schwer zu finden ist.

  5. Schicke eine native Veröffentlichung. Änderungen im Manifest und Plugin benötigen eine neue Play-Veröffentlichung. Wenn du in CI bauen Capgo Build kann signierte Android-Builds erstellen, und das Android-Keystore-Generator hilft, wenn Sie die Signierung zum ersten Mal einrichten.

  6. Schiffe UI-Änderungen über die Luft. Einmal, wenn das neue native Plugin live ist, können Wörter und Flussanpassungen um den Picker herum über Capgo Live-Updates.

Migration von einem anderen Kontakte-Plugin

Wenn Sie @capacitor-community/contacts (8.0.0 zum Zeitpunkt der Veröffentlichung), seine Android pickContact requests the contacts permission group before opening the picker, then reads the full contact from the address book. There is no property mode. The method names also differ (getContact vs getContactByIdprojection Objekte vs. ein fields Array). Unsere Vergleich der Community-Kontakte-Plugin und des Capgo-Plugins Mappen jede Anruf.

Wenn Sie noch immer ein Cordova-Kontakte-Plugin innerhalb von Capacitor verwenden, ist jetzt der beste Zeitpunkt, es zu ersetzen. Siehe Migrieren Sie von Cordova zu Capacitor.

Fehlerbehebung

Die Picker gibt einen Kontakt mit keinem Telefonnummer zurück. Sie haben pickContacts() ohne property und die App hat keine READ_CONTACTSNur id und displayName (und auf Android 17+, picker-granted Felder) kommen zurück. Fügen Sie hinzu property.

Die Play Console sagt immer noch, dass die App READ_CONTACTS deklariert. Ein Bibliothek hinzufügt es. Überprüfen Sie das fusionierte Manifest und entfernen Sie es mit tools:node="remove"Überprüfen Sie auch ältere Releases in anderen Tracks, jede aktive Artefakt zählt.

Deklaration abgelehnt. Einladungen, Referenzen und das Teilen sind als Fälle für den Picker aufgelistet. Überarbeiten Sie die Funktion oder zeigen Sie klar, warum die vollständige Liste Kern ist (z. B. Freundesabgleich, der gegen die gesamte Adressliste läuft).

iOS fragt nach Kontaktberechtigung. Sie rufen eine Methode auf, die die Adressbuch liest. Picking benötigt es nie. Entfernen Sie NSContactsUsageDescription wenn Sie nur auswählen.

Schlüsseldaten

Datum Was passiert
15. April 2026 Politik bekannt gegeben
September 2026 Play Console prompts apps declaring READ_CONTACTS Erklärung abgeben
27. Januar 2027 Zuverlässigkeit ist ab Android 17 ( API 37) oder später verpflichtend

Überprüfen Sie die Hilfe-Seite von Play Console, bevor Sie einreichen, da Google Fristen und Formulierungen ändern kann

Live-Updates für Capacitor-Apps

Wenn ein Web-Schicht-Bug live ist, schicken Sie die Reparatur über Capgo anstatt Tage zu warten, bis die App-Store-Zulassung erteilt wird. Die Benutzer erhalten die Aktualisierung im Hintergrund, während native Änderungen im normalen Review-Verfahren bleiben.

Unterstützung von Martin

Get Started Now

Neueste von unserem Blog

Capgo gibt Ihnen die besten Einblicke, die Sie benötigen, um ein wirklich professionelles Mobiltelefon-App zu erstellen.