RevenueCat : abonnements dans Finance et Notifications

Brancher RevenueCat donne à Appwin les chiffres d'abonnement de ton app : MRR, revenus, churn, abonnés actifs, essais.

C'est la source de la quasi-totalité du produit Finance. Sans elle, la page reste vide et propose de connecter le compte.

Deux canaux, complémentaires :

CanalRôle
Reçois tous tes achats en temps réelWebhook : chaque achat, renouvellement ou remboursement dès qu'il a lieu
Importe tout ton historique RCScheduled Data Exports (S3) : tout le passé, puis une mise à jour quotidienne

Le webhook ne couvre que le futur. Le dépôt S3 ramène aussi le passé.

Réglages → Projets → ton app → Intégrations → RevenueCat.

1. Reçois tous tes achats en temps réel

Dans Appwin, la fiche RevenueCat → carte Reçois tous tes achats en temps réel affiche le Project ID RevenueCat, l'URL du webhook et un secret (préfixe whsec_…). Tu colles l'URL et le secret dans RevenueCat.

  1. 1

    Copie le Project ID

    Ouvre RevenueCat, sélectionne ton projet, puis Project settings → Project ID, et colle-le dans Appwin. Il figure aussi dans l'URL RevenueCat : app.revenuecat.com/projects/<Project ID>/….

    Project settings RevenueCat, champ Project ID.

  2. 2

    Relève URL et secret dans Appwin

    Génère le secret si besoin, puis copie l'URL et le secret depuis la carte.

    Carte Appwin avec URL et secret du webhook RevenueCat.

  3. 3

    Ouvre Integrations → Webhooks

    Ouvre RevenueCat, sélectionne ton projet, puis Integrations, et clique la carte Webhooks.

    Page Integrations de RevenueCat avec la carte Webhooks mise en évidence.

  4. 4

    Colle l'URL et le secret

    Ajoute un webhook. Sur Appwin, copie URL du webhook (forme https://ingestion.appwin.io/ingest/v1/revenuecat/<id>) et colle-la dans le champ Webhook URL de RevenueCat.

    Choisis l'auth Authorization header et colle le secret tel quel (préfixe whsec_ inclus), puis sauvegarde dans RevenueCat.

    Écran de configuration d'un webhook RevenueCat.

  5. 5

    Confirme dans Appwin

    Une fois le webhook sauvegardé chez RevenueCat, clique C'est bon dans RevenueCat sur la fiche Appwin. On ne peut pas vérifier l'envoi avant le premier achat : ce bouton enregistre seulement que tu as terminé la manip.

2. Importe tout ton historique RC

Sans export planifié, Finance ne voit que les événements reçus après l'activation du webhook. Le dépôt S3 comble le passé.

Avant de coller les champs dans RevenueCat, crée le dépôt sur la fiche RevenueCat → carte Importe tout ton historique RC → Créer mon dépôt S3. Appwin affiche Endpoint, Bucket, Access Key, Secret Key, et le bucket folder (l'id de ce projet).

  1. 1

    Ouvre Scheduled Data Exports

    Ouvre RevenueCat, sélectionne ton projet, puis Integrations et la carte Scheduled Data Exports.

    Page Integrations RevenueCat avec la carte Scheduled Data Exports mise en évidence.

  2. 2

    Choisis S3

    Sous Choose a cloud storage provider, clique Configure sur Scheduled Data Exports (S3).

    Choix du fournisseur Scheduled Data Exports, option S3.

  3. 3

    Credential type → S3-Compatible

    Dans le formulaire, Credential type → S3-Compatible (pas Access Key Amazon classique : le dépôt Appwin est un stockage S3-compatible).

    Menu Credential type avec S3-Compatible sélectionné.

  4. 4

    Colle les identifiants Appwin

    Remplis avec les valeurs de la carte Appwin :

    Champ RevenueCatValeur Appwin
    AWS Access Key IDAWS Access Key ID
    AWS Secret Access KeyAWS Secret Access Key
    Endpoint URLEndpoint URL
    Bucket nameNom du bucket
    Bucket folderBucket folder (ce projet) - l'id du projet, pas un chemin inventé

    Formulaire S3 RevenueCat : clés, endpoint, bucket et folder.

  5. 5

    Next export start time

    Renseigne Next export start time (maintenant ou bientôt). Attention au AM/PM : le sélecteur est en 12 heures UTC. Une heure PM saisie en AM retarde le premier export de 12 heures.

    Champ Next export start time avec le sélecteur 12 heures UTC.

  6. 6

    Décoche l'export incrémental

    Décoche Receive new and updated transactions only. Si tu le laisses coché, RevenueCat n'envoie que le futur, pas l'historique.

    Case Receive new and updated transactions only, laissée décochée.

  7. 7

    Active l'export

    Laisse la fréquence à 24 heures, le format en CSV, puis Add integration.

    Bas du formulaire S3 : planification, format CSV, bouton Add integration.

3. Notifications : subscription_status

Appwin tient à jour le statut d'abonnement de chaque utilisateur, même s'il ne rouvre jamais l'app. Un abonnement qui expire, est annulé ou échoue au renouvellement change l'audience de l'utilisateur dans Notifications et peut déclencher une automatisation.

Ce qui le tient à jour

ÉlémentRôleOù
identify() avec l'identifiant utilisateur RevenueCatDit à Appwin à quel utilisateur correspond un abonnéTon app (ci-dessous)
WebhookPousse chaque achat, renouvellement, annulation, échec de paiement et expiration en quelques secondes, app ferméeÉtape 1
Export S3Pose le statut des abonnés existants, puis rattrape chaque jour un webhook que RevenueCat aurait abandonnéÉtape 2

Relier l'abonné RevenueCat à l'utilisateur Appwin

Appelle identify() avec le même identifiant utilisateur que celui que tu donnes à RevenueCat avec logIn(). Appwin compare l'app_user_id RevenueCat (et ses alias) à cet identifiant.

swift
_ = try await Purchases.shared.logIn(user.id)
try await AppwinCore.identify(externalId: user.id)

Utilisateurs sans compte

Si ton app vend des abonnements à des utilisateurs anonymes (pas de logIn(), identifiant RevenueCat qui commence par $RCAnonymousID:), il n'y a pas d'identifiant commun. Pose plutôt l'identifiant d'appareil Appwin dans l'attribut d'abonné RevenueCat appwin_device_id :

swift
if let id = AppwinCore.deviceId {
  Purchases.shared.attribution.setAttributes(["appwin_device_id": id])
}

Ce que tu peux cibler

PropriétéValeurs
subscription_statustrial, active, cancelled (encore actif jusqu'à la fin de la période), billing_issue, paused, expired
subscription_expires_atFin de la période en cours
subscription_productIdentifiant produit du store
subscription_entitlementsEntitlements actifs, séparés par des virgules

Ces propriétés viennent du store : une fois remplies par RevenueCat pour un utilisateur, les valeurs envoyées par l'app pour les mêmes clés sont ignorées.

Déclencheurs d'automatisation

Avec le webhook branché, les changements de statut déclenchent des automatisations : Essai démarré, Abonnement souscrit, Essai converti, Abonnement renouvelé, Abonnement annulé, Échec de paiement, Abonnement expiré. Ils peuvent aussi faire sortir d'un parcours, par exemple quitter une reconquête sur Abonnement souscrit.

Chaque déclencheur atteint tous les appareils de l'utilisateur, comme si l'app avait envoyé l'événement.

Abonnés existants

Le webhook ne voit que ce qui se passe à partir de maintenant. L'export S3 pose le statut de tes abonnés existants à son premier dépôt, puis le rafraîchit chaque jour. Il ne déclenche pas d'automatisation : il enregistre où en sont les gens, il ne rejoue pas leur historique.

Ce que ça débloque

Les métriques de Finance alimentées par RevenueCat :

MétriqueContenu
MRRRevenu mensuel récurrent
ARRRevenu annuel récurrent
RevenueRevenus encaissés sur la période
ChurnTaux d'attrition
Active subscribersAbonnés actifs
Refund rateTaux de remboursement
LTV per customerValeur vie moyenne
New trialsEssais démarrés
Trial conversion rateConversion des essais en payant
New customersNouveaux clients

Chacune s'affiche en valeur unique ou en série temporelle, sur les périodes proposées par le produit (7 jours à 1 an, MTD, QTD, YTD, mois/trimestre/année précédents).

Fraîcheur

CanalDélai typique
WebhookQuasi immédiat après l'événement chez les stores
Export S3Quotidien une fois l'export activé ; le premier dépôt peut prendre plus longtemps

Les tableaux de bord peuvent encore mettre en cache quelques minutes une agrégation déjà calculée : un rafraîchissement de page ne relance pas forcément un recalcul.

Dépannage

SymptômeCause probable
Aucun nouvel achat n'apparaîtWebhook non sauvegardé, mauvaise URL, ou secret sans le préfixe whsec_
Historique vide, flux live OKDépôt S3 non créé, Scheduled Data Exports off, ou Receive new and updated transactions only resté coché
401 côté RevenueCat sur le webhookSecret incorrect ou auth autre que Authorization header
Page Finance videAucune donnée reçue sur la période choisie
Bucket folder refuséTu as inventé un dossier : utilise l'id du projet affiché dans Appwin
Statut jamais poséidentify() appelé avec un autre identifiant que le logIn() RevenueCat, ou utilisateur anonyme sans appwin_device_id
Statut posé, aucune automatisation déclenchéeWebhook pas branché (l'export S3 seul pose le statut sans rien déclencher), ou automatisation pas active
Le statut revient en arrière après une mise à jour de l'appTon app écrit elle-même des attributs subscription_* avant que RevenueCat les ait remplis : arrête de les envoyer

Suite

  • Finance - ce que le produit fait de ces chiffres
  • Notifications - audiences et automatisations sur le statut d'abonnement
  • Adjust - le versant dépenses, pour rapprocher coût et revenu