Aller au contenu
WebViewGold Du vibe coding à l'App Store
Français
Obtenir WebViewGold

v0 + contacts

L'accès aux contacts pour votre app v0, sans refus pour confidentialité

Les écrans « Retrouvez vos amis », les invitations de groupe et les apps de partage de dépenses veulent souvent accéder au carnet d'adresses. Dans une app WebViewGold, votre app v0 demande l'autorisation avec requestcontactpermission:// et reçoit les noms et numéros de téléphone en JSON dans la variable contacts après readcontacts://. Le code prend quelques minutes ; c'est l'usage que vous faites des données qui décide si l'app passe l'examen.

Dès $109 en paiement unique par plateforme, ou notre équipe s'occupe de tout dès $698.

  • Garantie d'approbation – ou remboursement sous 14 jours
  • Aucun codage requis
  • Paiement unique, mises à jour gratuites
  • Support humain 24/7
  • Conçu en Allemagne depuis 2014 · ISO 27001

Quand la lecture des contacts en vaut la peine

Retrouver les amis qui utilisent déjà l'app

Comparez les numéros de téléphone normalisés avec les comptes de votre backend et affichez « 3 de vos contacts sont déjà là » au lieu d'une liste d'amis vide.

Inviter une personne à la fois

L'utilisateur choisit un contact, l'app prépare une invitation personnelle et ouvre la feuille de partage. Pas d'invitations en masse, pas de surprise pour le destinataire.

Ajouter rapidement un client ou un collègue

Les apps de CRM, de réservation et d'équipe peuvent préremplir une nouvelle fiche à partir d'un contact choisi, au lieu de faire retaper noms et numéros.

Souvent, vous n'en avez pas besoin

Un simple lien d'invitation via la feuille de partage native (shareapp://) ne demande aucune autorisation et passe bien plus facilement l'examen. Ne demandez l'accès aux contacts que si la mise en relation ou la sélection apporte une vraie valeur.

Prompt pour v0

Collez ceci dans v0 pour implémenter la partie app web. Vérifiez le résultat, publiez, puis testez dans l'app WebViewGold.

Prompt à coller dans v0
Ajoutez à cette app Next.js l'accès aux contacts pour le wrapper d'app WebViewGold. 1) Créez components/contacts-picker.tsx comme client component ; quand navigator.userAgent contient WebViewGold, son bouton Continuer (affiché après une courte explication) navigue vers requestcontactpermission://, et un bouton « Charger les contacts » définit window.contacts = undefined, navigue vers readcontacts:// et interroge window.contacts toutes les 100 ms pendant 5 secondes au maximum. 2) Traitez null comme une absence d'autorisation et proposez un bouton vers settingsapp://. 3) Affichez une liste avec recherche, sans rien de présélectionné ni Tout sélectionner. 4) Créez une Server Action matchContacts(numbers: string[]) qui vérifie la session, accepte au maximum 2000 numéros E.164 normalisés, les compare à users.phone, ne stocke rien et renvoie les noms affichés correspondants ; ajoutez une limite de débit par utilisateur. 5) Les boutons Inviter ouvrent shareapp://message?=TEXT&url=INVITE_URL, en affichant le texte avant l'envoi. 6) Hors de l'app, affichez uniquement le lien d'invitation.

Je suis très content d'avoir acheté cette application ! Extrêmement facile et excellente documentation. J'ai été en contact avec le service client, ils ont répondu très rapidement et très amicalement. Ils ont résolu ma question en un jour. 10/10 recommanderaient.

Nelis Geiger · CodeCanyon

Demander, lire et utiliser les contacts de façon responsable

Une heure pour le code, un peu plus pour les textes de confidentialité.

  1. Déclarez l'autorisation

    Android : ajoutez android.permission.READ_CONTACTS à AndroidManifest.xml, comme l'exige la documentation WebViewGold. iOS : le texte d'explication de l'accès aux contacts dans Info.plist doit dire pourquoi, par exemple « pour vous montrer lesquels de vos contacts utilisent déjà l'app ».

  2. Expliquez d'abord, demandez ensuite

    Affichez votre propre écran qui explique le bénéfice, avec un bouton Continuer, puis naviguez vers requestcontactpermission://. Ne demandez jamais l'accès au premier lancement ni avant que l'utilisateur atteigne la fonctionnalité.

  3. Lisez le carnet d'adresses

    Une fois l'autorisation accordée, naviguez vers readcontacts://. WebViewGold remplit la variable globale contacts avec un objet qui associe des noms à des tableaux de numéros de téléphone ; sans autorisation, elle vaut null.

  4. Laissez l'utilisateur choisir

    Affichez une liste avec recherche, sans rien de présélectionné ni bouton Tout sélectionner, et montrez le texte exact de l'invitation avant tout envoi.

  5. N'envoyez que ce dont la fonctionnalité a besoin

    Pour retrouver des amis, normalisez les numéros et envoyez-les à votre backend pour une comparaison ponctuelle ; ne conservez pas les numéros sans correspondance. Pour les invitations, n'envoyez rien du tout : ouvrez la feuille de partage.

Demander, lire et structurer les contacts

Deux taps distincts : un pour l'autorisation, un pour charger la liste. La variable contacts arrive de façon asynchrone. La recherche d'amis, si vous en avez besoin, s'exécute côté serveur et uniquement pour les utilisateurs connectés ; dans votre projet v0, cela se passe ici : Route handlers et server actions Next.js, Postgres via Neon ou Supabase.

javascript
var IN_APP = navigator.userAgent.indexOf("WebViewGold") !== -1; // votre token de user agent personnalisé

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); }
  })();
}

// Tap 1 : après votre propre écran d'explication
function askForContacts() {
  if (!IN_APP) { showInviteLink(); return; }
  window.location.href = "requestcontactpermission://";
}

// Tap 2 : « Afficher mes contacts »
function loadContacts() {
  window.contacts = undefined;
  window.location.href = "readcontacts://";
  waitFor("contacts", 5000, function (list) {
    if (!list) { showPermissionHint(); return; } // null = pas d'autorisation
    // forme : { "John Appleseed": ["888-555-5512", "888-555-1212"], ... }
    var people = Object.keys(list).map(function (n) { return { name: n, phones: list[n] }; });
    renderPicker(people); // rien de présélectionné, pas de « Tout sélectionner »
  });
}

// Accès refusé plus tôt ? Laissez l'utilisateur le modifier dans les Réglages
function openAppSettings() { window.location.href = "settingsapp://"; }

Ce que vérifient Apple et Google

  • Guideline 5.1.1 d'Apple : demandez l'accès en contexte, uniquement pour les fonctionnalités qui en ont besoin, avec un texte d'explication qui décrit l'usage. Les textes vagues sont un motif de refus fréquent.
  • Guideline 5.1.2 d'Apple : n'utilisez pas les contacts pour constituer une base de données de contacts ni pour la transmettre à des tiers, et ne contactez des personnes qu'à l'initiative explicite et individuelle de l'utilisateur : pas de Tout sélectionner, pas de contacts présélectionnés, et montrez ce que dira le message. Vérifiez le texte actuel de la guideline avant de soumettre.
  • Règles de Google Play relatives aux données utilisateur : les données du carnet d'adresses sont personnelles et sensibles. Si vous les envoyez sur un serveur, affichez dans l'app une information bien visible (prominent disclosure) avant la demande d'autorisation et déclarez les contacts dans le formulaire Data safety.
  • Hacher les numéros de téléphone n'est pas une anonymisation, car l'espace des numéros possibles est restreint. Traitez les hachages comme des données personnelles, ne les conservez que le temps nécessaire et couvrez-les dans votre politique de confidentialité et dans la suppression de compte (voir le guide de la suppression de compte).
  • Depuis iOS 18, les utilisateurs peuvent ne partager que certains contacts. Vérifiez que la fonctionnalité marche avec une liste courte et ne harcelez pas l'utilisateur pour obtenir l'accès complet.

Questions fréquentes

Que renvoie readcontacts:// ?

Un objet JSON indexé par nom de contact, chacun avec un tableau de numéros de téléphone, stocké dans la variable globale contacts. Sans autorisation, la variable vaut null. Les adresses e-mail, les adresses postales et les photos ne font pas partie du format documenté.

Apple refuse-t-il une app qui lit les contacts ?

Pas pour le fait de les lire, mais souvent pour la manière. Demandez l'accès en contexte avec un texte d'explication clair, laissez les utilisateurs choisir des personnes une par une, n'invitez jamais tout le monde d'un coup, et ne conservez pas le carnet d'adresses sur votre serveur, sauf si la fonctionnalité l'exige et que votre politique de confidentialité le mentionne.

Ai-je besoin de l'accès aux contacts pour une fonction d'invitation ?

Souvent, non. Une feuille de partage avec un lien d'invitation personnel atteint WhatsApp, Messages et l'e-mail sans aucune autorisation, et c'est bien plus simple à expliquer lors de l'examen. Utilisez l'accès aux contacts quand vous retrouvez des amis ou constituez des groupes à partir de contacts existants.

Que se passe-t-il si l'utilisateur refuse ?

readcontacts:// laisse alors la variable contacts à null. Proposez plutôt le lien d'invitation et, si l'utilisateur change d'avis plus tard, ouvrez les réglages de l'app avec settingsapp:// pour qu'il puisse accorder l'accès.

Trois façons de mettre votre app dans les stores

Même résultat, charge de travail différente de votre côté. Les trois formules incluent la garantie d'approbation et le support humain 24/7.

Faites-le vous-même

$109 par plateforme, paiement unique

La licence WebViewGold : un projet Xcode ou Android Studio prêt à l'emploi. Collez votre URL, définissez le nom et l'icône, activez les fonctionnalités, compilez et soumettez. Mises à jour gratuites à vie.

Voir les offres sur la page principale

Full Service

$698 par plateforme $798

Envoyez-nous votre URL et votre icône. Notre équipe configure, compile et livre votre app sous 72 heures, en marque blanche, projets sources inclus. Les deux plateformes pour $1,158.

Détails du Full Service Propulsé par WeSetupYourWebViewApp

Prix Soldes d'hiver valables jusqu'au 31 décembre 2026.

Prêt à publier votre app v0 ?

Garantie d'approbation App Store & Google Play – ou remboursement sous 14 jours

Vous préférez déléguer ? Full Service : nous configurons, compilons et livrons sous 72 heures, dès $698 par plateforme. Des questions ? Chattez avec nous 24/7.

Les remboursements sont accordés aux conditions indiquées dans notre FAQ : un refus non lié au contenu par Apple et/ou Google, demandé dans les 14 jours suivant l'achat.