Liens externes et gestion des URL dans votre app Cursor
Sur le web, un lien vers Stripe, la connexion Google, WhatsApp ou votre centre d'aide fonctionne tout simplement. Dans une app, chaque lien a besoin d'une destination : l'app elle-même, un onglet de navigateur intégré, Safari ou Chrome, ou une autre app comme Mail, Téléphone ou WhatsApp. Si vous vous trompez, les utilisateurs se retrouvent bloqués sur une page tierce sans bouton retour, connectés au mauvais endroit, ou en train de payer dans un navigateur pendant que l'app attend.
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
9:41
CCursor
Liens externes et gestion des URLDésormais dans votre poche
App Store · Google Play Approuvée
Où chaque type de lien doit s'ouvrir
Lien
Meilleure destination
Pourquoi
Comment dans WebViewGold
Votre propre domaine
L'app (WebView principale)
C'est votre app
Les liens internes restent dans l'app
Stripe Checkout, liens de paiement, 3-D Secure, PayPal
L'app (WebView principale)
L'URL de succès revient sur votre domaine avec la session intacte
Gardez les liens externes dans l'app (option 0), ou listez ces hôtes comme exceptions à ne jamais ouvrir dans le navigateur (safariblacklist, BROWSER_BLACKLIST)
Connexion Google et Facebook
Social Login Helper
Google bloque les WebViews intégrées ; l'assistant exécute cette étape dans une fenêtre de connexion acceptée, puis revient
google_login_helper_triggers / GOOGLE_LOGIN_HELPER_TRIGGERS ; Android propose aussi le préfixe googlelogin:// pour un Chrome Custom Tab
CGU, centre d'aide, documentation, blog sur d'autres domaines
Onglet intégré
Barre d'adresse et bouton de fermeture ; l'app reste en dessous
alwaysOpenInInAppTab / ALWAYS_OPEN_IN_INAPP_TAB, ou target="_blank" avec l'option des liens spéciaux réglée sur 1
WhatsApp (wa.me), Instagram, YouTube, X, TikTok
Leur app ou le navigateur système
Les utilisateurs y sont connectés, pas dans votre WebView
safariwhitelist / BROWSER_WHITELIST
mailto:, tel:, sms:
Mail, Téléphone, Messages
Schémas système, gérés par le téléphone
Utilisez des liens standard ; WebViewGold les transmet au système
Liens App Store et Google Play
L'app du store
Mises à jour, notes, vos autres apps
apps.apple.com et play.google.com dans la liste des hôtes toujours externes
Prompt pour Cursor
Collez ceci dans Cursor pour implémenter la partie app web. Vérifiez le résultat, publiez, puis testez dans l'app WebViewGold.
Prompt pour l'agent Cursor
Cette app web tourne dans le wrapper natif WebViewGold (son user agent contient "WebViewGold").
1. Cherchez dans la base de code window.open, target="_blank", les liens http et https absolus, mailto:, tel:, wa.me et les redirections serveur.
2. Produisez un tableau : hôte, où il est utilisé, destination suggérée (app, onglet intégré, app système) et pourquoi.
3. À partir du tableau, fournissez les valeurs de safariwhitelist et alwaysOpenInInAppTab (iOS) et de BROWSER_WHITELIST et ALWAYS_OPEN_IN_INAPP_TAB (Android).
4. Faites naviguer les parcours de paiement et de connexion dans la même fenêtre (window.location.href ou redirections serveur).
5. Ajoutez un test Playwright avec un user agent WebViewGold qui vérifie que le bouton de paiement n'appelle pas window.open.
6. Ajoutez à .cursor/rules : jamais de window.open pour le paiement ou l'authentification ; les pages d'aide externes utilisent target="_blank".
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.
Trois classes de liens et les réglages qui les contrôlent
Liens internes
Même domaine que l'hôte configuré. Ils se chargent dans la WebView principale, c'est pourquoi l'URL de départ doit être votre domaine de production. Testez explicitement les sous-domaines que vous utilisez pour l'authentification, le paiement ou l'API : qu'ils comptent comme internes ou non dépend de l'hôte que vous avez configuré.
Liens externes
Tous les autres domaines. L'option 0 les garde dans l'app. iOS peut les envoyer vers Safari avec externalLinkHandlingOptions = 2 ; Android ajoute 1 (onglet intégré) et 2 (navigateur système) pour EXTERNAL_LINK_HANDLING_OPTIONS. Les listes par hôte priment sur le comportement par défaut : safariwhitelist, safariblacklist et alwaysOpenInInAppTab sur iOS, BROWSER_WHITELIST, BROWSER_BLACKLIST et ALWAYS_OPEN_IN_INAPP_TAB sur Android.
Liens spéciaux
Les liens avec target="_blank" (sur Android, aussi les liens qui se terminent par #). specialLinkHandlingOptions et SPECIAL_LINK_HANDLING_OPTIONS : 0 WebView principale, 1 onglet intégré, 2 navigateur. Sur Android, un préfixe newtab: impose ce comportement à un lien précis. Pour les liens à la fois spéciaux et externes, Android suit le réglage des liens spéciaux, tandis que sur iOS externalLinkHandlingOptions = 2 les envoie quand même vers Safari : gardez-le à 0 si vous voulez l'onglet intégré.
Configurer la gestion des liens d'une app Cursor
Environ 15 minutes avec un inventaire des liens, puis un test sur de vrais téléphones.
Listez chaque lien sortant de votre app Cursor
Cliquez partout ou cherchez dans le code : paiement et portail de facturation, fournisseurs de connexion, profils sociaux, chat de support, pages légales, badges des stores, liens mailto: et tel:, cartes. Notez la destination de chacun à l'aide du tableau ci-dessus.
Définissez le comportement par défaut
Pour la plupart des apps : gardez les liens externes dans l'app (option 0 sur les deux plateformes) et routez les exceptions. Envoyer tous les liens externes vers le navigateur casse les redirections de paiement et de connexion qui doivent revenir dans l'app.
Ajoutez les exceptions
Les apps sociales, WhatsApp et les liens des stores dans safariwhitelist (iOS) et BROWSER_WHITELIST (Android) ; les CGU, la documentation et le centre d'aide dans alwaysOpenInInAppTab et ALWAYS_OPEN_IN_INAPP_TAB ; les hôtes de paiement et d'authentification dans les listes « jamais dans le navigateur » si votre comportement par défaut est le navigateur. Saisissez les hôtes exactement comme dans vos liens, sans https://.
Activez l'assistant de connexion
Ajoutez https://accounts.google.com à google_login_helper_triggers (iOS) et GOOGLE_LOGIN_HELPER_TRIGGERS (Android). N'envoyez pas simplement Google vers Safari : la session se retrouverait dans Safari, pas dans l'app (la solution à l'erreur disallowed_useragent).
Traitez les achats numériques à part
Stripe pour des biens physiques et des services dans le monde réel peut rester dans l'app. Pour les abonnements ou les crédits utilisés dans l'app, Apple attend l'achat intégré (guideline 3.1.1) et Google attend Play Billing, hors exceptions régionales : masquez donc ce paiement dans l'app (Stripe ou achat intégré).
Testez chaque type de lien
Chargez https://www.webviewgold.com/demo/testlinks.php comme URL de départ temporaire pour voir comment se comporte chaque type de lien, puis touchez chaque lien sortant de votre vraie app sur un iPhone et sur un téléphone Android, paiement test complet compris.
Une configuration de départ typique
Valeurs uniquement : gardez la syntaxe qu'utilisent déjà les lignes de vos fichiers Config.swift et Config.java. Sur Android, ALWAYS_OPEN_IN_INAPP_TAB attend des préfixes d'URL ; les autres listes attendent des hôtes.
Les bugs de liens que livrent les apps vibe-codées
Le paiement dans le navigateur. Stripe s'ouvre dans Safari ou Chrome, le paiement réussit, la page de succès se charge dans le navigateur et l'app affiche toujours l'état non payé. Gardez le paiement dans l'app, ou ramenez l'URL de retour dans l'app grâce aux Universal Links (voir le guide des deep links).
Le paiement dans une pop-up. Un code qui ouvre le paiement avec window.open ou target="_blank" en fait un lien spécial : la page de succès se charge alors dans l'onglet intégré au lieu de l'app. Naviguez plutôt avec window.location.href.
Un lien vers le portail de facturation pour des offres numériques dans l'app iOS. Hors exceptions régionales, Apple peut y voir une incitation à contourner l'achat intégré (guideline 3.1.1). Ne l'affichez que sur le web.
Une page tierce sans retour possible. Les iPhone n'ont pas de bouton retour. Tout ce qui n'est pas votre app a sa place dans l'onglet intégré ou dans une autre app.
Des liens WhatsApp, Instagram ou de cartes qui chargent leur site web dans l'app, souvent derrière un mur de connexion. Envoyez ces hôtes au système pour que la vraie app s'ouvre.
Tout s'ouvre dans Safari. Une app qui ne cesse de se quitter elle-même ressemble à un favori, et c'est l'impression qui se cache derrière de nombreux refus au titre de la guideline 4.2.
Questions fréquentes
Pourquoi mon paiement Stripe perd-il la session dans l'app ?
Généralement parce que le paiement s'est ouvert dans Safari ou Chrome : le paiement fonctionne, mais l'URL de succès se charge dans le navigateur, où l'utilisateur n'est pas connecté. Gardez checkout.stripe.com dans la WebView principale (option 0 pour les liens externes) et naviguez avec window.location.href, pour que la redirection revienne dans l'app.
Les liens mailto:, tel: et WhatsApp fonctionnent-ils dans l'app ?
Les liens mailto:, tel: et sms: sont transmis à Mail, à l'app Téléphone et à Messages. Pour WhatsApp, ajoutez wa.me et api.whatsapp.com à la liste des hôtes toujours externes (safariwhitelist, BROWSER_WHITELIST), pour que l'app WhatsApp s'ouvre au lieu du site WhatsApp dans votre app. Testez chacun sur un vrai téléphone.
Qu'est-ce que l'onglet intégré ?
Une vue de navigateur qui s'ouvre par-dessus votre app, avec une barre d'adresse et des boutons de navigation. Les utilisateurs lisent la page, puis la ferment pour revenir exactement là où ils étaient. C'est le bon endroit pour les CGU, les articles d'aide et les autres contenus tiers.
Puis-je ouvrir tous les liens externes dans Safari ou Chrome ?
Vous le pouvez (externalLinkHandlingOptions = 2 sur iOS, EXTERNAL_LINK_HANDLING_OPTIONS = 2 sur Android), mais ajoutez alors chaque hôte de paiement, de connexion et d'API aux exceptions « jamais dans le navigateur » (safariblacklist, BROWSER_BLACKLIST), sinon les redirections destinées à votre app atterriront dans le navigateur.
L'app iOS peut-elle renvoyer vers ma page de tarifs web ?
Pour les biens numériques, Apple n'autorise généralement pas les boutons ou les liens vers des achats externes. Des exceptions existent pour certaines régions, comme la vitrine américaine après la décision de justice de 2025 et les conditions alternatives dans l'UE, et elles évoluent. Vérifiez le texte actuel de la guideline 3.1.1 dans App Store Connect avant de vous appuyer sur l'une d'elles.
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.
Ni Mac, ni Xcode, ni Android Studio : configurez dans le navigateur, nous compilons les deux apps dans le cloud et les transmettons à App Store Connect et à la Play Console.
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.
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.