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

Paiements

Stripe ou achat intégré ? Le guide de décision pour les web apps sur les stores

Votre app Lovable ou Bolt a déjà un paiement Stripe. Sur l'App Store et Google Play, certains de ces achats doivent passer à l'achat intégré et d'autres peuvent rester exactement tels quels. La règle est plus simple qu'il n'y paraît, dès que l'on se pose la bonne question : qu'est-ce que l'utilisateur achète réellement ?

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

La seule question : qu'achète-t-on ?

La guideline 3.1.1 d'Apple et la politique de paiements de Google disent la même chose en d'autres termes : si l'utilisateur achète quelque chose qui s'utilise dans l'app (fonctionnalités, abonnements, crédits, contenu premium), l'achat doit passer par le système de facturation du store. S'il achète quelque chose qui s'utilise en dehors de l'app (un produit physique, une coupe de cheveux, un ménage, un repas livré), le système de facturation du store ne doit pas être utilisé, et Stripe est le bon outil.

Apple ajoute quelques exceptions nommées dans la 3.1.3 : les services multiplateformes peuvent permettre aux utilisateurs d'accéder à du contenu acheté sur votre site web, à condition que les mêmes éléments soient aussi vendus dans l'app via IAP ; les services en temps réel de personne à personne (cours particuliers, consultations) peuvent utiliser d'autres moyens de paiement ; les apps de type « reader » ont leurs propres règles. Google exempte les biens et services physiques ainsi que quelques cas particuliers comme les dons et les paiements entre particuliers. Tout ce qui est numérique et consommé dans l'app relève de Play Billing.

Tableau de décision

Vous vendez…Dans l'app iOSDans l'app AndroidSur votre site web
Un abonnement aux fonctionnalités de l'app (offre SaaS, niveau premium)IAP obligatoire (3.1.1, 3.1.2)Play Billing obligatoireStripe, comme avant
Crédits IA, jetons, générationsIAP (consommable)Play Billing (consommable)Stripe
Cours, templates, téléchargements utilisés dans l'appIAPPlay BillingStripe
Produits physiques (boutique)Stripe obligatoire ; IAP non autoriséStripe ; Play Billing non autoriséStripe
Services consommés en personne (réservations, ménage, réparations)StripeStripeStripe
Services individuels en direct (appel de soutien scolaire, consultation)Stripe autorisé selon la 3.1.3(d) ; IAP facultatifEn général hors Play Billing ; vérifiez la politique pour votre créneauStripe
Dons à une association reconnueAutres moyens autorisés pour les associations approuvéesExemptés dans de nombreux cas ; vérifiez la politiqueStripe

Détecter l'app et basculer le paiement

La même web app sert les deux canaux ; seul le bouton de paiement change.

  1. Donnez à l'app un user agent reconnaissable

    Dans Config.swift, définissez useragent_iphone et useragent_ipad, dans Config.java USER_AGENT, avec une chaîne qui contient un jeton unique, par exemple le user agent par défaut suivi de WebViewGoldApp/1.0. Laissez en place l'assistant de connexion Google ; il conserve son propre user agent accepté pour l'étape OAuth.

  2. Créez une bifurcation dans la web app

    const inApp = navigator.userAgent.includes("WebViewGoldApp"). Affichez le bouton IAP dans l'app et le bouton Stripe sur le web. Ne masquez pas le prix ; affichez celui du store.

  3. Déclenchez l'achat via RevenueCat

    Dans l'app, le bouton navigue vers revenuecat://purchase?external_id=USER_ID&product=PRODUCT_ID (ou revenuecat://launchPaywall?external_id=USER_ID&offering=OFFERING pour un paywall RevenueCat). WebViewGold ouvre la feuille d'achat native.

  4. Unifiez les droits d'accès sur le serveur

    Les webhooks Stripe et RevenueCat écrivent dans la même table d'abonnements. La web app demande seulement « cet utilisateur est-il actif ? » et ne se soucie jamais du store qui a encaissé.

  5. Évitez toute incitation dans l'app

    En dehors des exceptions régionales, l'app ne doit pas inviter les utilisateurs à acheter sur le site web, afficher les prix web ni renvoyer vers le paiement Stripe. Les abonnés web existants se connectent simplement et sont actifs, ce que la 3.1.3(b) autorise tant que l'IAP est aussi proposé.

Avec une bonne version optimisée de votre application Web, vous pouvez avoir une superbe application mobile en quelques minutes. De plus, le service client est très agréable et très utile! Je ne peux que recommander WebViewGold :-)

Julian Koch · Co-fondateur de DuelDonkey · CodeCanyon

La bascule en JavaScript

Une version minimale. En production, lisez les IDs de produits depuis votre backend pour qu'ils restent synchronisés avec les deux stores.

javascript
const inApp = /WebViewGoldApp/.test(navigator.userAgent);

function subscribe(userId) {
  if (inApp) {
    // Feuille d'achat native via WebViewGold + RevenueCat (iOS et Android)
    window.location.href = "revenuecat://purchase?external_id=" + encodeURIComponent(userId) + "&product=premium_monthly";
  } else {
    // Web : votre session Stripe Checkout existante
    window.location.href = "/api/stripe/checkout?plan=premium_monthly";
  }
}

// Une fois la feuille native fermée, interrogez votre backend jusqu'à l'arrivée du webhook
async function waitForEntitlement(userId, tries = 10) {
  for (let i = 0; i < tries; i++) {
    const r = await fetch("/api/me/subscription").then(x => x.json());
    if (r.active) return true;
    await new Promise(res => setTimeout(res, 1000));
  }
  return false;
}

Les pièges de la double tarification

  • Les prix peuvent différer entre le web et le store, mais l'app ne doit pas mettre en avant le prix web plus bas. Gardez les e-mails marketing et le site web honnêtes et séparés de l'interface de l'app.
  • Apple vend à des paliers de prix fixes et les deux stores collectent la taxe de vente ou la TVA dans de nombreux pays. Comparez les revenus nets, pas les prix affichés, avant de fixer un prix sur le store.
  • Les essais gratuits et les offres de lancement appartiennent au produit du store (offres d'abonnement), pas aux coupons Stripe. Un champ de code promo dans l'app qui débloque des fonctionnalités payantes contourne l'IAP et entraîne un refus.
  • Gestion et résiliation par canal : portail client Stripe pour les abonnements web, cancelinapppurchase:// pour les abonnements des stores (il ouvre l'écran d'abonnements du système).
  • Les remboursements des IAP sont gérés par Apple et Google, pas par vous. Construisez vos réponses au support en conséquence.
  • Ne faites pas tourner les deux systèmes en même temps pour un même utilisateur ; si un abonné web achète à nouveau dans l'app, votre gestionnaire de webhooks doit détecter le double droit d'accès et prévenir le support.
  • La commission ne s'applique pas aux ventes Stripe sur le web, mais elle s'applique à chaque IAP. Lisez le guide des programmes à 15 % avant de fixer vos prix.

RevenueCat relie les deux stores

Un seul catalogue

Les produits d'App Store Connect et de la Play Console correspondent à un seul entitlement : votre backend n'a jamais besoin de distinguer les plateformes.

Intégré à WebViewGold

Deux clés dans Config.swift et Config.java, puis des liens revenuecat:// depuis la web app. Aucun code natif. Les achats intégrés nécessitent la licence étendue (Extended License) de WebViewGold.

Webhooks

Les événements d'achat initial, de renouvellement, de résiliation, de problème de facturation et d'expiration arrivent dans votre edge function Supabase ou votre Cloud Function. Le guide de configuration RevenueCat vous guide pas à pas.

Questions fréquentes

Puis-je retirer le paiement de l'app et dire aux utilisateurs de s'abonner sur le site web ?

C'est justement le fait de le leur dire qui pose problème : en dehors des exceptions régionales, cela compte comme une incitation au sens de la 3.1.1. Une app limitée à la connexion, sans aucun parcours d'achat, est parfois acceptée, mais les reviewers demandent souvent comment un nouvel utilisateur devient un utilisateur payant. Proposer l'IAP est la réponse fiable.

Stripe est-il parfois obligatoire dans l'app ?

Oui, pour les biens physiques et les services consommés hors de l'app. Apple n'autorise pas du tout l'IAP dans ces cas.

Est-ce que je paie la commission du store sur les ventes web ?

Non. La commission ne s'applique qu'aux achats effectués via la facturation d'Apple ou de Google.

Qu'en est-il des pourboires aux créateurs ou du coaching vendu dans mon app ?

Les pourboires numériques et le contenu de coaching dans l'app relèvent de l'IAP. Les sessions individuelles en temps réel entre deux personnes peuvent utiliser d'autres moyens de paiement sur iOS selon la 3.1.3(d). Précisez votre cas dans les notes pour la validation.

WebViewGold nécessite-t-il une licence spéciale pour l'IAP ?

Oui, l'Extended License. Tout le reste de ce guide fonctionne avec la licence standard.

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 ?

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.