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.
Replit + Kontakte
Freunde-finden-Bildschirme, Gruppeneinladungen und Apps zum Aufteilen von Rechnungen wollen oft ans Adressbuch. In einer WebViewGold-App fragt deine Replit-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.
Gleich normalisierte Telefonnummern mit den Accounts in deinem Backend ab und zeig „3 deiner Kontakte sind schon hier“ statt einer leeren Freundesliste.
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.
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.
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.
Füge das in Replit ein, um die Web-App-Seite umzusetzen. Prüfe das Ergebnis, veröffentliche und teste dann in der WebViewGold-App.
Baue eine Funktion „Freunde aus Kontakten einladen oder finden“ für den nativen WebViewGold-App-Wrapper ein. 1) Frontend: Navigiere nach einem Erklärbildschirm nur dann zu requestcontactpermission://, wenn navigator.userAgent WebViewGold enthält; ein Button „Kontakte anzeigen“ setzt window.contacts = undefined, navigiert zu readcontacts:// und fragt window.contacts bis zu 5 Sekunden lang alle 100 ms ab; null bedeutet keine Berechtigung. 2) Zeig eine durchsuchbare Liste der Namen mit ihren Nummern, ohne Vorauswahl, ohne „Alle auswählen“. 3) Backend: Füge POST /api/contacts/match hinzu, das den eingeloggten Nutzer voraussetzt, bis zu 2000 Nummern mit libphonenumber-js auf E.164 normalisiert, sie mit users.phone vergleicht, gefundene User-IDs und Namen zurückgibt und die Eingabe nie loggt oder speichert; begrenz die Route pro Nutzer. 4) Jeder Kontakt bekommt einen Einladen-Button, der shareapp://message?=TEXT&url=APP_URL/join?ref=CODE öffnet. 5) Fehlt die Berechtigung, biete settingsapp:// und den einfachen Einladungslink an.

WebViewGold hat uns die kürzeste und effizienteste Time-to-Market ermöglicht, die jemals möglich war, verglichen mit allen anderen App-Plattformen, die wir in den letzten 5 Jahren ausprobiert haben. Ich weiß nicht, warum ich euch nicht schon früher entdeckt habe, aber ich bin wirklich, wirklich froh, dass ich es getan habe. Wir nähern uns derzeit fast 6000 App-Downloads im iOS App Store & Google Play Store ohne Probleme!
Eine Stunde für den Code, etwas länger für die Datenschutztexte.
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“.
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.
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.
Zeig eine durchsuchbare Liste ohne Vorauswahl und ohne Button „Alle auswählen“, und zeig den genauen Einladungstext, bevor irgendetwas verschickt wird.
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.
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 Replit-Projekt passiert das in Express-/Flask-/FastAPI-Backends mit Replit Postgres oder externen Datenbanken.
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://"; }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.
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.
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.
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.
Gleiches Ergebnis, unterschiedlich viel Arbeit auf deiner Seite. Alle drei kommen mit Genehmigungsgarantie und 24/7 Support von echten Menschen.
$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$349 pro Lizenz, einmaliges Add-on
Kein Mac, kein Xcode, kein Android Studio: Du konfigurierst im Browser, wir bauen beide Apps in der Cloud und übergeben sie an App Store Connect und die Play Console.
So funktioniert der Cloud Builder Kostenlose Demo ausprobieren$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 byWinter-Sale-Preise gültig bis 31. Dezember 2026.
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.