RevenueCat

Gebruikt je app RevenueCat, verbind dan de webhook ervan en Unolink ontvangt elke proefperiode, aankoop, verlenging, opzegging en terugbetaling direct van RevenueCat, ook verlengingen en terugbetalingen die gebeuren als de app niet eens open is. De omzet in je funnel wordt netto, na aftrek van terugbetalingen. Pro-abonnement en hoger.

1. Verbinden

Open in Unolink je app → Instellingen → RevenueCat → Verbinden. Kopieer de Webhook-URL en de Waarde van de authorization-header (wordt één keer getoond).

2. Voeg de webhook toe in RevenueCat

Open in RevenueCat je project → Integrations → Webhooks → Add new configuration:

  • Webhook URL en Authorization header value: plak ze.
  • Environment: beide. Sandbox-aankopen tellen als testapparaten, dus ze blijven buiten je echte cijfers.
  • App: deze app. Events: alle.

Sla op en klik dan op Send test event. De RevenueCat-kaart in Unolink laat zien wanneer het binnenkomt.

Aankopen worden gekoppeld aan de installatie (en de link waar die vandaan kwam) via de gebruikers-ID die je app meldt: de eigen app-gebruikers-ID van RevenueCat. Met SDK 0.3.2 of nieuwer houdt één regel die actueel. Roep hem één keer aan bij de start, vóór of na configure:

Unolink.connectRevenueCat { Purchases.isConfigured ? Purchases.shared.appUserID : nil }
Unolink.connectRevenueCat { Purchases.sharedInstance.appUserID }
import Purchases from "react-native-purchases"

Unolink.connectRevenueCat(Purchases)
Unolink.connectRevenueCat(
  () => Purchases.appUserID,
  addListener: Purchases.addCustomerInfoUpdateListener,
  removeListener: Purchases.removeCustomerInfoUpdateListener,
);

Unolink leest de ID bij de start, telkens wanneer de app terugkomt naar de voorgrond en telkens wanneer hij verandert, en verstuurt hem alleen als hij nieuw is. Het voegt RevenueCat niet toe aan je app: je geeft RevenueCat zelf mee. Roep op iOS en Android ook Unolink.revenueCatUserChanged() aan na Purchases.logIn en Purchases.logOut om de nieuwe ID meteen te versturen (anders gaat hij mee met het volgende event). React Native en Flutter merken de wijziging zelf op.

Zonder connectRevenueCat (een oudere SDK, of als je het liever zelf doet) roep je setUserId aan met de ID van RevenueCat na Purchases.configure, na elke Purchases.logIn en Purchases.logOut, en bij elke start. Gebruik het een of het ander, niet allebei:

Unolink.setUserId(Purchases.shared.appUserID)
Unolink.setUserId(Purchases.sharedInstance.appUserID)
Unolink.setUserId(await Purchases.getAppUserID())
Unolink.setUserId(await Purchases.appUserID);

Voor een gast is dat het anonieme ID van RevenueCat, dus een aankoop die vóór de aanmelding wordt gedaan, wordt meteen aan de installatie gekoppeld. Na logIn is het de ID van het account. Unolink bewaart elke ID die een installatie heeft gemeld, zodat de aankoop van de gast gekoppeld blijft.

Meldt je app alleen de account-ID, dan wordt de aankoop van een gast nog steeds gekoppeld, maar alleen bij het volgende event van RevenueCat voor die klant dat beide ID's noemt (bijvoorbeeld de eerste verlenging). Tot dan toont de persoon als nog niet betaald. Het ID van RevenueCat melden voorkomt die wachttijd.

Tikt iemand op "verder als gast", roep dan ook Unolink.signUpSkipped() aan (SDK 0.3.2 of nieuwer, React Native 0.3.1; oudere SDK's: track("sign_up_skipped")), zodat de funnelstap Verder als gast die persoon meetelt. Zie Gasten en accounts.

Unolink slaat de ID zelf nooit op, alleen een hash met sleutel die voor elk van je apps anders is. Een aankoop die binnenkomt voordat de app zijn gebruiker heeft gemeld, wacht, en wordt aan de installatie gekoppeld zodra dat gebeurt. Betalingen die dagen of weken later komen tellen nog steeds mee, en het Rapport laat zien hoe lang mensen erover doen: zie Betalingen en gebruikers-ID’s, waar ook privacy en de regels van Apple aan bod komen.

Wat er binnenkomt

RevenueCatIn Unolink
INITIAL_PURCHASE (proefperiode)Proefperiode gestart
INITIAL_PURCHASE, NON_RENEWING_PURCHASE, conversie van proefperiodeBetaald, met omzet
RENEWALVerlengd, met omzet
CANCELLATION (terugbetaling)Terugbetaald, omzet afgetrokken
CANCELLATION, EXPIRATION, BILLING_ISSUEAbonnement opgezegd, Abonnement verlopen, Betaalprobleem

Zodra RevenueCat is verbonden, is het de bron van waarheid voor aankopen en proefperiodes: als je app ook Unolink.purchase() of trialStarted() aanroept, worden die aanroepen genegeerd, dus niets wordt dubbel geteld. Verlengingen, opzeggingen en de rest kun je als funnelstappen toevoegen aan elke funnel (Funnel → Bewerken).