Zum Inhalt springen
WebViewGold Vibe Coding in den App Store
Deutsch
WebViewGold holen

Cursor + Kontakte

Kontaktzugriff für deine Cursor-App, ohne Ablehnung wegen Datenschutz

Freunde-finden-Bildschirme, Gruppeneinladungen und Apps zum Aufteilen von Rechnungen wollen oft ans Adressbuch. In einer WebViewGold-App fragt deine Cursor-App mit requestcontactpermission:// nach der Berechtigung und bekommt nach readcontacts:// Namen und Telefonnummern als JSON in der Variable contacts. Der Code ist in Minuten geschrieben; ob die App das Review besteht, entscheidet, wie du die Daten nutzt.

Ab $109 einmalig pro Plattform, oder unser Team erledigt alles ab $698.

  • Genehmigungsgarantie – oder Geld zurück innerhalb von 14 Tagen
  • Kein Programmieren nötig
  • Einmalzahlung, kostenlose Updates
  • 24/7 Support von echten Menschen
  • Made in Germany seit 2014 · ISO 27001

Wann sich der Zugriff auf Kontakte lohnt

Freunde finden, die die App schon nutzen

Gleich normalisierte Telefonnummern mit den Accounts in deinem Backend ab und zeig „3 deiner Kontakte sind schon hier“ statt einer leeren Freundesliste.

Eine Person nach der anderen einladen

Der Nutzer wählt einen Kontakt, die App bereitet eine persönliche Einladung vor und öffnet das Share Sheet. Keine Masseneinladungen, keine Überraschungen für den Empfänger.

Kunden oder Teammitglieder schnell anlegen

CRM-, Buchungs- und Team-Apps können einen neuen Datensatz aus einem gewählten Kontakt vorausfüllen, statt Nutzer Namen und Nummern abtippen zu lassen.

Oft brauchst du ihn gar nicht

Ein einfacher Einladungslink über das native Share Sheet (shareapp://) braucht überhaupt keine Berechtigung und ist der leichtere Weg durchs Review. Frag nur nach Kontakten, wenn Abgleich oder Auswahl echten Mehrwert bringen.

Prompt für Cursor

Füge das in Cursor ein, um die Web-App-Seite umzusetzen. Prüfe das Ergebnis, veröffentliche und teste dann in der WebViewGold-App.

Prompt für den Cursor-Agenten
Prompt für den Cursor-Agenten: Implementiere Kontaktzugriff für den WebViewGold-App-Wrapper. 1) Erstelle lib/webviewgold/contacts.ts mit isWebViewGold() (navigator.userAgent enthält meinen eigenen WebViewGold-Token), requestPermission(), das zu requestcontactpermission:// navigiert, und readContacts(timeoutMs = 5000), das window.contacts = undefined setzt, zu readcontacts:// navigiert und mit dem Objekt aus Namen und Telefonnummern oder mit null auflöst. 2) Füge normalizeNumber() mit libphonenumber-js hinzu, auf Basis des Landes des Nutzers. 3) Baue eine Komponente ContactsPicker: Erklärung, Weiter (Berechtigung), Kontakte laden (lesen), Suche, keine Vorauswahl, kein „Alle auswählen“. 4) Füge einen Server-Endpunkt hinzu, der bis zu 2000 normalisierte Nummern mit users abgleicht, nur Treffer zurückgibt, nichts speichert oder loggt und ein Rate-Limit hat. 5) Verschick Einladungen über shareapp://message?=TEXT&url=INVITE_URL. 6) Füge Tests hinzu und dokumentiere die Datenschutzregeln in .cursor/rules.

Großartige Arbeit! Ich habe noch nie etwas programmiert, aber ich konnte damit arbeiten. Einfach und schnell! Auch mit großartiger Hilfe von den Erstellern!

Lucas Dubois · CodeCanyon

Kontakte verantwortungsvoll abfragen, lesen und nutzen

Eine Stunde für den Code, etwas länger für die Datenschutztexte.

  1. Die Berechtigung deklarieren

    Android: Ergänze android.permission.READ_CONTACTS in der AndroidManifest.xml, wie es die WebViewGold-Doku verlangt. iOS: Die Nutzungsbeschreibung für Kontakte in der Info.plist muss den Grund nennen, zum Beispiel „um dir zu zeigen, welche deiner Kontakte die App schon nutzen“.

  2. Erst erklären, dann fragen

    Zeig einen eigenen Bildschirm, der den Nutzen erklärt, mit einem Weiter-Button, und navigiere dann zu requestcontactpermission://. Frag nie beim ersten Start oder bevor der Nutzer das Feature erreicht.

  3. Das Adressbuch lesen

    Nach der Berechtigung navigierst du zu readcontacts://. WebViewGold füllt die globale Variable contacts mit einem Objekt aus Namen und Arrays von Telefonnummern; ohne Berechtigung ist sie null.

  4. Den Nutzer auswählen lassen

    Zeig eine durchsuchbare Liste ohne Vorauswahl und ohne Button „Alle auswählen“, und zeig den genauen Einladungstext, bevor irgendetwas verschickt wird.

  5. Nur senden, was das Feature braucht

    Für den Freunde-Abgleich normalisierst du die Nummern und schickst sie für einen einmaligen Vergleich an dein Backend; nicht gefundene Nummern speicherst du nicht. Für Einladungen schickst du gar nichts: Öffne das Share Sheet.

Kontakte anfragen, lesen und aufbereiten

Zwei getrennte Fingertipps: einer für die Berechtigung, einer zum Laden der Liste. Die Variable contacts kommt asynchron an. Ein Freunde-Abgleich, falls du ihn brauchst, läuft serverseitig und nur für angemeldete Nutzer; in deinem Cursor-Projekt passiert das in Deine eigenen API-Routen oder Dienste.

javascript
var IN_APP = navigator.userAgent.indexOf("WebViewGold") !== -1; // dein eigener User-Agent-Token

function waitFor(name, timeoutMs, done) {
  var start = Date.now();
  (function check() {
    if (typeof window[name] !== "undefined") { done(window[name]); }
    else if (Date.now() - start < timeoutMs) { setTimeout(check, 100); }
    else { done(undefined); }
  })();
}

// Tipp 1: nach deinem eigenen Erklärbildschirm
function askForContacts() {
  if (!IN_APP) { showInviteLink(); return; }
  window.location.href = "requestcontactpermission://";
}

// Tipp 2: "Meine Kontakte anzeigen"
function loadContacts() {
  window.contacts = undefined;
  window.location.href = "readcontacts://";
  waitFor("contacts", 5000, function (list) {
    if (!list) { showPermissionHint(); return; } // null = keine Berechtigung
    // Format: { "John Appleseed": ["888-555-5512", "888-555-1212"], ... }
    var people = Object.keys(list).map(function (n) { return { name: n, phones: list[n] }; });
    renderPicker(people); // nichts vorausgewählt, kein "Alle auswählen"
  });
}

// Früher abgelehnt? Lass den Nutzer es in den Einstellungen ändern
function openAppSettings() { window.location.href = "settingsapp://"; }

Was Apple und Google prüfen

  • Apple Guideline 5.1.1: Frag im Kontext nach Zugriff, nur für Features, die ihn brauchen, und mit einer Nutzungsbeschreibung, die den Zweck erklärt. Vage Beschreibungen sind ein häufiger Ablehnungsgrund.
  • Apple Guideline 5.1.2: Nutze Kontakte nicht, um eine Kontaktdatenbank aufzubauen oder sie an Dritte weiterzugeben, und kontaktiere Personen nur auf ausdrückliche, individuelle Initiative des Nutzers: kein „Alle auswählen“, keine vorausgewählten Kontakte, und zeig, was in der Nachricht stehen wird. Prüf vor dem Einreichen den aktuellen Wortlaut der Guideline.
  • Google-Play-Richtlinie zu Nutzerdaten: Adressbuchdaten sind persönlich und sensibel. Wenn du sie hochlädst, zeig vor der Berechtigungsabfrage einen deutlich sichtbaren Hinweis in der App und gib Kontakte im Datensicherheitsformular an.
  • Telefonnummern zu hashen ist keine Anonymisierung, weil der Zahlenraum klein ist. Behandle Hashes als personenbezogene Daten, bewahre sie nur so lange wie nötig auf und deck sie in deiner Datenschutzerklärung und bei der Kontolöschung ab (Guide zur Kontolöschung).
  • Seit iOS 18 können Nutzer nur ausgewählte Kontakte freigeben. Sorg dafür, dass das Feature auch mit einer kurzen Liste funktioniert, und dräng nicht auf vollen Zugriff.

Häufig gestellte Fragen

Was liefert readcontacts:// zurück?

Ein JSON-Objekt mit den Kontaktnamen als Schlüsseln und jeweils einem Array von Telefonnummern, gespeichert in der globalen Variable contacts. Ohne Berechtigung ist die Variable null. E-Mail-Adressen, Postanschriften und Fotos sind nicht Teil des dokumentierten Formats.

Lehnt Apple eine App ab, die Kontakte liest?

Nicht für das Lesen an sich, aber oft für das Wie. Frag im Kontext mit einer klaren Nutzungsbeschreibung, lass Nutzer einzelne Personen auswählen, lade nie alle auf einmal ein und speichere das Adressbuch nicht auf deinem Server, außer das Feature braucht es und deine Datenschutzerklärung sagt es.

Brauche ich für eine Einladungsfunktion Zugriff auf Kontakte?

Oft nicht. Ein Share Sheet mit persönlichem Einladungslink erreicht WhatsApp, Nachrichten und E-Mail ganz ohne Berechtigung und ist im Review viel leichter zu erklären. Nutze den Kontaktzugriff, wenn du Freunde abgleichst oder Gruppen aus vorhandenen Kontakten bildest.

Was passiert, wenn der Nutzer Nein sagt?

readcontacts:// lässt die Variable contacts dann auf null. Biete stattdessen den Einladungslink an, und wenn der Nutzer es sich später anders überlegt, öffne mit settingsapp:// die App-Einstellungen, damit er den Zugriff erlauben kann.

Drei Wege, deine App in die Stores zu bringen

Gleiches Ergebnis, unterschiedlich viel Arbeit auf deiner Seite. Alle drei kommen mit Genehmigungsgarantie und 24/7 Support von echten Menschen.

Selbst machen

$109 pro Plattform, einmalig

Die WebViewGold-Lizenz: ein fertiges Xcode- oder Android-Studio-Projekt. URL einfügen, Name und Icon setzen, Features einschalten, bauen und einreichen. Kostenlose Updates für immer.

Pakete auf der Hauptseite ansehen

Full Service

$698 pro Plattform $798

Schick uns deine URL und dein Icon. Unser Team konfiguriert, baut und liefert deine App innerhalb von 72 Stunden, White-Label, inklusive Quellprojekten. Beide Plattformen für $1,158.

Full-Service-Details Powered by WeSetupYourWebViewApp

Winter-Sale-Preise gültig bis 31. Dezember 2026.

Bereit, deine Cursor-App zu veröffentlichen?

App Store & Google Play Genehmigungsgarantie – oder Geld zurück innerhalb von 14 Tagen

Lieber abgeben? Full Service: Wir konfigurieren, bauen und liefern innerhalb von 72 Stunden, ab $698 pro Plattform. Fragen? Chatte mit uns – 24/7.

Erstattungen erfolgen zu den in unseren FAQ genannten Bedingungen: eine nicht inhaltsbedingte Ablehnung durch Apple und/oder Google, geltend gemacht innerhalb von 14 Tagen nach dem Kauf.