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

Paiements

Configurer RevenueCat dans une app web encapsulée, de bout en bout

RevenueCat transforme deux systèmes de facturation des stores en un seul catalogue de produits, un seul webhook et une seule réponse à la question « cet utilisateur est-il abonné ? ». WebViewGold intègre RevenueCat d'origine : collez deux clés, déclenchez les achats depuis un lien de votre web app et laissez le webhook mettre à jour votre backend. Ce guide vous mène des produits des stores à un paywall fonctionnel.

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

1. Créez les produits sur les deux stores

Utilisez des IDs de produits identiques sur les deux plateformes ; cela simplifie RevenueCat et votre backend.

  1. App Store Connect

    Votre app → Monétisation → Abonnements → créez un groupe d'abonnements, puis les produits (nom de référence, ID de produit comme premium_monthly, durée, prix, nom d'affichage localisé, capture d'écran pour la validation). Les achats uniques se créent sous Achats intégrés, en consommable ou non consommable.

  2. Google Play Console

    Monétiser → Produits → Abonnements → ID de produit premium_monthly → un forfait de base (mensuel, à renouvellement automatique) et des offres facultatives comme un essai gratuit. Les achats uniques sous Produits intégrés. Activez-les.

  3. Vérification du statut

    Les produits Apple doivent atteindre le statut « Prêt pour la soumission » ; le premier achat intégré est validé en même temps qu'un build, donc associez-le à la version dans App Store Connect. Les produits Play doivent être actifs et l'app doit être publiée au moins sur un canal de test.

2. Configurez le projet RevenueCat

Quinze minutes dans le tableau de bord RevenueCat.

  1. Ajoutez l'app App Store

    Project → Apps → App Store : saisissez le bundle ID (il doit correspondre exactement au projet Xcode et à App Store Connect), le secret partagé propre à l'app ou une clé In-App Purchase d'App Store Connect et, en option, une clé API App Store Connect pour pouvoir importer les produits.

  2. Ajoutez l'app Play Store

    Le package name plus le JSON d'un compte de service Google Cloud ayant accès à la Play Developer API, comme le décrit la documentation de RevenueCat.

  3. Produits, entitlement, offering

    Importez ou ajoutez les IDs de produits pour les deux apps. Créez un entitlement appelé premium et rattachez-y tous les produits. Créez une offering (default) avec des packages comme mensuel et annuel ; si vous voulez le paywall hébergé de RevenueCat, concevez-le sous Paywalls pour cette offering.

  4. Copiez les clés

    Project settings → API keys : la clé SDK publique par plateforme (appl_… pour iOS, goog_… pour Android) et l'ID du projet dans les paramètres du projet. Ce sont les deux valeurs dont WebViewGold a besoin.

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

3. Les clés de configuration dans WebViewGold

Deux lignes par plateforme, puis un nouveau build. La documentation iOS sur les achats intégrés et la documentation Android montrent les options associées.

text
// Config.swift (iOS)
static let revenueCatAPIKey = "appl_xxxxxxxxxxxxxxxxxxxx"
static let revenueCatProjectID = "projxxxxxxxx"

// Config.java (Android)
public static final String REVENUECAT_API_KEY = "goog_xxxxxxxxxxxxxxxxxxxx";
public static final String REVENUECAT_PROJECT_ID = "projxxxxxxxx";

4. Déclenchez les achats depuis la web app

external_id devient l'app user ID de RevenueCat : transmettez donc votre propre ID utilisateur stable (pas une adresse e-mail qui peut changer). N'appelez ces liens que dans l'app ; sur le web, affichez Stripe.

javascript
const userId = currentUser.id;   // votre ID utilisateur Supabase / Firebase
const inApp = /WebViewGoldApp/.test(navigator.userAgent);

// Acheter un produit précis (ID tel qu'affiché dans le tableau de bord RevenueCat) ; fonctionne sur iOS et Android
function buy(productId) {
  if (!inApp) return showStripeCheckout(productId);
  window.location.href = "revenuecat://purchase?external_id=" + encodeURIComponent(userId) + "&product=" + productId;
}

// Ou ouvrir un paywall RevenueCat construit à partir d'une offering
function openPaywall() {
  window.location.href = "revenuecat://launchPaywall?external_id=" + encodeURIComponent(userId) + "&offering=default";
}

// Restaurer après une réinstallation ou sur un nouvel appareil (exigé par Apple pour les abonnements et les non-consommables)
function restore() { window.location.href = "restoreinapppurchases://"; }

// Gérer ou résilier : ouvre l'écran d'abonnements du store
function manage() { window.location.href = "cancelinapppurchase://"; }

5. Les webhooks vers votre backend

La feuille d'achat est native ; votre base de données en est informée par le webhook de RevenueCat. Dans RevenueCat, allez dans Integrations → Webhooks, saisissez l'URL d'une edge function Supabase, d'une Cloud Function ou d'une route d'API, et définissez une valeur d'en-tête Authorization que votre endpoint vérifie. Traitez au minimum INITIAL_PURCHASE, RENEWAL, PRODUCT_CHANGE, CANCELLATION, BILLING_ISSUE, EXPIRATION et TRANSFER. Chaque événement contient app_user_id (votre ID utilisateur issu de external_id), le produit, le store et la date d'expiration ; écrivez-les dans une table subscriptions et laissez la web app y lire la date « actif jusqu'au ». Ne vous fiez jamais à un indicateur stocké sur l'appareil.

Une fois la feuille native fermée, le webhook arrive généralement en quelques secondes. Faites interroger votre backend par la web app pendant dix secondes au maximum, puis débloquez l'accès, avec un message de secours du type « traitement en cours, tirez pour actualiser ». Pour les cas de support, l'API REST de RevenueCat renvoie à la demande l'état de l'abonné, et la vue client du tableau de bord montre chaque transaction. Si vous vendez aussi sur le web via Stripe, ses webhooks écrivent dans la même table : une seule vérification des droits d'accès sert les deux canaux.

6. Restauration, tests sandbox et validation

  • Un bouton Restaurer les achats bien visible (dans les réglages ou sur le paywall) qui appelle restoreinapppurchases://. Apple le vérifie.
  • Affichez sur le paywall le prix, la durée, les conditions de renouvellement et les liens vers les conditions d'utilisation et la politique de confidentialité ; les refus au titre de la guideline 3.1.2 viennent surtout d'un texte manquant sur le paywall. Voir le guide 3.1.2.
  • Sandbox iOS : App Store Connect → Utilisateurs et accès → Testeurs Sandbox ; sur l'iPhone de test, connectez-vous sous Réglages → App Store → Compte Sandbox. Les builds TestFlight utilisent automatiquement la sandbox ; les abonnements s'y renouvellent toutes les quelques minutes, ce qui permet de tester l'expiration.
  • Android : Play Console → Configuration → Test de licence, ajoutez les comptes Gmail des testeurs, installez depuis le canal de test interne ; les achats de test ne sont pas facturés.
  • RevenueCat affiche les transactions sandbox via un interrupteur sandbox dans le tableau de bord ; votre webhook les reçoit avec un indicateur d'environnement, si bien que votre table peut les ignorer ou les marquer.
  • Pour la validation, donnez à Apple un compte de démonstration sans abonnement actif et décrivez le paywall dans les notes (modèle dans le guide des notes pour la validation). Les reviewers achètent en sandbox.
  • Prix localisés : appelez getstorelocation:// (ou activez l'injection automatique) pour lire storeLocation et afficher sur votre paywall web le prix de la vitrine de l'utilisateur.

Questions fréquentes

RevenueCat remplace-t-il Stripe ?

Non. Stripe reste sur le site web pour les achats web. RevenueCat gère les achats sur les stores, et les deux écrivent dans la même table de droits d'accès de votre backend.

Que doit contenir external_id ?

Un identifiant utilisateur stable issu de votre système d'authentification. Si un utilisateur peut acheter avant de se connecter, utilisez un identifiant d'appareil fourni par l'API UUID de WebViewGold (get-uuid://) et associez-le au compte plus tard.

Le webhook est-il obligatoire ?

Fortement recommandé. Sans lui, votre backend devrait interroger RevenueCat à chaque vérification. Avec lui, votre base de données fait foi.

Un même produit peut-il avoir des prix différents sur les deux stores ?

Oui. Les prix se définissent par store ; RevenueCat les rattache tous deux au même entitlement.

Que se passe-t-il si quelqu'un ouvre le lien d'achat sur le site web ?

Rien ; revenuecat:// n'est compris que par l'app. Protégez le bouton avec la vérification du user agent et affichez Stripe sur le web.

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.