Overzicht van events

Elke aanroep die de SDK biedt, per platform, met de eventnaam die bij Unolink aankomt. Funnels zijn per app: maak er zoveel als je wilt onder Funnel → Nieuwe funnel, en kies elk van deze namen als stap, ook je eigen. Elke stap telt installaties die het event ooit hebben verstuurd, dus apps waarvan de schermen in een andere volgorde komen, krijgen toch een zinvolle funnel. Zet Stappen alleen in deze volgorde tellen aan in een funnel om een stap alleen te tellen als die na de vorige gebeurt.

Standaardevents

EventnaamAndroidiOSReact NativeFlutterFunnelstap
onboarding_steponboardingStep(step, index, flow)onboardingStep(_:index:flow:)onboardingStep(step, { index, flow })onboardingStep(step, index:, flow:)Tabblad Onboarding, geen stap
onboarding_skippedonboardingSkipped(step)onboardingSkipped(_:)onboardingSkipped(step)onboardingSkipped(step)Tabblad Onboarding, geen stap
onboarding_completedonboardingCompleted()onboardingCompleted()onboardingCompleted()onboardingCompleted()Onboarding
paywall_viewedpaywallViewed(placement)paywallViewed(placement:)paywallViewed(placement)paywallViewed(placement:)Paywall
paywall_skippedpaywallSkipped(placement)paywallSkipped(placement:)paywallSkipped(placement)paywallSkipped(placement:)Als je hem toevoegt
sign_upsignUp(method)signUp(method:)signUp(method)signUp(method:)Aanmelding
sign_insignIn(method)signIn(method:)signIn(method)signIn(method:)Ingelogd
sign_up_skippedsignUpSkipped()signUpSkipped()signUpSkipped()signUpSkipped()Verder als gast
trial_startedtrialStarted(productId)trialStarted(productId:)trialStarted(productId)trialStarted(productId:)Proefperiode
purchasepurchase(amount, currency, productId)purchase(amount:currency:productId:)purchase(amount, currency, productId)purchase(amount, currency, productId:)Betaald
purchase_cancelledpurchaseCancelled(productId)purchaseCancelled(productId:)purchaseCancelled(productId)purchaseCancelled(productId:)Als je hem toevoegt
purchase_failedpurchaseFailed(productId, reason)purchaseFailed(productId:reason:)purchaseFailed(productId, reason)purchaseFailed(productId:reason:)Als je hem toevoegt
je eigentrack(name, properties)track(_:properties:)track(name, properties)track(name, properties)Als je hem toevoegt

Elk argument behalve het bedrag en de valuta van een aankoop is optioneel, en elke aanroep accepteert ook extra eigenschappen.

  • placement zegt welke paywall het is: onboarding, launch, feature_gate, settings of een eigen naam. Hij wordt verstuurd als de eigenschap placement. Funnel → Opsplitsen op Paywall toont voor elke plaatsing een eigen funnel.
  • method zegt hoe het account is aangemaakt: email, apple, google. Verstuurd als method.
  • productId is de product-ID uit je store. Verstuurd als product_id.
  • purchase bevat de prijs als decimaal getal (Android BigDecimal, iOS Decimal, React Native en Flutter een string zoals "49.99") en een valutacode van drie letters. Prijzen worden nooit afgerond.

Wanneer je elk event verstuurt

EventVerstuur het
onboarding_stepZodra elk onboardingscherm verschijnt, niet als er op de knop wordt getikt. Zie Onboardingschermen.
onboarding_skippedAls iemand op Overslaan tikt, met het scherm waarop dat gebeurde.
onboarding_completedAls de laatste onboardingvraag of het laatste onboardingscherm klaar is, vóór een paywall of aanmelding die erop volgt.
paywall_viewedElke keer dat er een paywall verschijnt, met de plaatsing. Niet voor abonnees: als je app hun geen paywall toont, verstuur je niets.
paywall_skippedAls iemand een paywall sluit zonder te kopen: met de sluitknop, door omlaag te vegen of met het terug-gebaar. Niet zolang een aankoop nog op goedkeuring wacht (Vraag om te kopen, de 3D Secure-controle van een bank).
sign_upDirect nadat een nieuw account is aangemaakt. Niet als iemand inlogt op een account dat hij al had.
sign_inAls iemand inlogt op een account dat hij al had: een terugkerende gebruiker (na een herinstallatie, op een nieuwe telefoon, na uitloggen). Trajecten markeert ze als terugkerend en kan daarop filteren. SDK 0.3.0 of hoger.
sign_up_skippedAls iemand op een aanmeldscherm kiest om zonder account verder te gaan (gastmodus). Trajecten markeert ze als gast, en een funnel met een aanmeldstap toont ze als iemand die een ander pad neemt, niet als afhaker.
trial_started, purchaseZodra de store het bevestigt. Sla allebei over als RevenueCat is verbonden.
purchase_cancelledAls iemand het aankoopvenster van de store sluit zonder te betalen.
purchase_failedAls de betaling mislukt. reason is je eigen korte omschrijving.

Onboardingschermen

Het tabblad Onboarding laat zien op welk scherm mensen afhaken en hoe lang elk scherm duurt. Verstuur één aanroep per scherm zodra het verschijnt, één bij Overslaan en onboardingCompleted aan het eind:

// iOS (SwiftUI)
GoalScreen().onAppear { Unolink.onboardingStep("goal", index: 0) }
Button("Skip") { Unolink.onboardingSkipped("goal") }
// Android (Compose)
LaunchedEffect(Unit) { Unolink.onboardingStep("goal", index = 0) }
// React Native
useOnboardingStep("goal", { index: 0 })   // or Unolink.onboardingStep("goal", { index: 0 }) in a useEffect
// Flutter, in initState
Unolink.onboardingStep('goal', index: 0);
  • step is een vaste ID per scherm: goal, notifications, plan. Dezelfde regels als voor eventnamen. Geef vertakkingen hun eigen ID's. Een pager of een onboarding op één scherm verstuurt er één per pagina.
  • Alleen de schermen van de onboarding zelf. De paywall en het aanmeldscherm zijn geen onboardingschermen, ook niet als ze stappen van dezelfde flow zijn: die versturen paywallViewed / paywallSkipped en signUp. Een paywall die zonder aankoop wordt gesloten, is paywallSkipped, nooit onboardingSkipped.
  • onboardingCompleted komt direct na het laatste onboardingscherm, vóór de paywall of aanmelding die erop volgt, ook als het account aan het eind van de flow wordt aangemaakt. Wie de paywall ziet, heeft de onboarding afgerond.
  • index (optioneel) is de positie van het scherm, 0 tot 999. Daarmee kan het tabblad zowel het verste bereikte scherm als het laatst geziene scherm tonen.
  • flow (optioneel) geeft de onboarding een naam, als je er meer dan één hebt: een A/B-variant, een nieuwe versie, een nieuwe onboarding voor bestaande gebruikers. Elke flow krijgt een eigen lijst.
  • Dit zijn de enige eigenschappen die deze events accepteren. Met iets anders wordt het event geweigerd.
  • Zet nooit gebruikersgegevens in step of flow. Het zijn schermnamen, en ze worden in het dashboard getoond.
  • Ze zijn gratis. Een onboarding kost één event, de onboardingCompleted, hoeveel schermen hij ook heeft. Elke installatie kan er tot 100 versturen, voor tot 40 verschillende schermen.
  • Teruggaan, een app die wordt afgesloten en opnieuw gestart: daar hoef je niets speciaals voor te doen. Unolink bepaalt de status van elke installatie: afgerond, overgeslagen op een scherm, afgehaakt op het laatste scherm (24 uur niets nieuws) of nog bezig. Een app die alleen onboardingCompleted verstuurt, laat nog steeds zien hoeveel mensen hem afrondden; schermen zijn nodig om te zien waar mensen afhaken. Installaties die helemaal geen onboardingevent verstuurden, worden getoond als niet gevolgd, nooit als afhakers.

Deze aanroepen hebben SDK 0.2.0 of hoger nodig. Op oudere versies verstuurt track("onboarding_step", { step: "goal" }) hetzelfde event.

Hoe events worden geteld

  • Funnels tellen mensen, geen events. Elke stap telt de installaties die het event minstens één keer verstuurden, dus een paywall die vijf keer is gezien, of een onboardingCompleted die na teruggaan opnieuw is verstuurd, telt één keer per persoon.
  • Standaard in elke volgorde. Een stap telt mee wanneer hij ook gebeurde. Zet Stappen alleen in deze volgorde tellen aan in een funnel als de volgorde ertoe doet; dan telt een stap alleen op of na de vorige.
  • Elk event telt nog steeds mee voor je abonnement. Herhalingen worden vastgelegd (Trajecten toont ze allemaal) en elke herhaling telt mee voor het maandelijkse tegoed, behalve de gratis events hieronder.
  • Tijden komen van de telefoon, tenzij ze meer dan 7 dagen oud zijn of meer dan een uur in de toekomst liggen; dan wordt het tijdstip van aankomst gebruikt.

Gasten en accounts

Meld de eigen app-gebruikers-ID van RevenueCat elke keer dat die verandert: voor een gast het anonieme ID van RevenueCat, en daarna de ID van het account dat hij aanmaakt of waarop hij inlogt. connectRevenueCat (SDK 0.3.2 of nieuwer) doet dat voor je; anders roep je setUserId ermee aan. Elke ID die een installatie heeft gemeld, telt mee, dus een aankoop als gast, de verlengingen ervan en aankopen die RevenueCat later naar een ander account verplaatst, blijven allemaal bij de installatie die kocht.

Wat er gebeurdeVerstuur
Een nieuw account aangemaakt (e-mail, Apple, Google, ook na een tijd als gast)signUp(method)
Ingelogd op een account dat hij al hadsignIn(method)
Gekozen om zonder account verder te gaansignUpSkipped() (SDK 0.3.2+, React Native 0.3.1+; oudere SDK's: track("sign_up_skipped"))
Een gast die zich later aanmeldt, vanuit de instellingensignUp(method): dit telt voor de aanmeldstap van de funnel, wanneer het ook gebeurt
Ingelogd met een opnieuw ingesteld wachtwoordsignIn(method): het account bestond al
Probeerde zich aan te melden met een e-mailadres dat al geregistreerd is, en logde daarna insignIn(method)
UitgelogdsetUserId(null)

Nieuw of terugkerend met Apple of Google? Het resultaat van het inloggen zegt het meestal. Firebase: additionalUserInfo.isNewUser. Supabase: een gebruiker van wie created_at binnen een paar seconden van last_sign_in_at ligt, is net aangemaakt.

Automatische events

De SDK verstuurt deze zelf. Ze zijn gratis: ze tellen nooit mee voor je abonnement.

EventWanneer
first_openEén keer per installatie, bij de eerste start. Dit is de installatie.
session_startBij het starten, of als de app terugkomt na 30 minuten of langer op de achtergrond.
app_backgroundAls de app naar de achtergrond gaat.

Eigen events

track(name, properties) verstuurt al het andere, en eigen events kunnen ook funnelstappen zijn.

  • Namen: beginnen met een letter, gevolgd door letters, cijfers, _ en ., maximaal 64 tekens. level_up of export.pdf. Een ongeldige naam wordt genegeerd en gelogd.
  • Eigenschappen: maximaal 20 per event. Waarden zijn strings (tot 200 tekens), getallen of booleans, in totaal 4 KB.
  • Zet nooit namen, e-mailadressen, telefoonnummers of andere persoonsgegevens in eigenschappen.

Gebruikers- en appstatus

Deze versturen zelf geen event.

AndroidiOSReact NativeFlutterWat het doet
setUserId(id)setUserId(_:)setUserId(id)setUserId(id)De gebruikers-ID van je app; met RevenueCat de eigen app-gebruikers-ID van RevenueCat. Alleen opgeslagen als eenrichtingshash per app. Roep het opnieuw aan zodra hij verandert (gast → account): elke ID telt mee. Geef null (nil) mee bij uitloggen. Maximaal 256 tekens.
connectRevenueCat { }connectRevenueCat { }connectRevenueCat(Purchases)connectRevenueCat(…)Houdt de gebruikers-ID gelijk aan de app-gebruikers-ID van RevenueCat, gasten inbegrepen (SDK 0.3.2+). Zie RevenueCat. Gebruik dit of setUserId, niet allebei.
revenueCatUserChanged()revenueCatUserChanged()Verstuurt de nieuwe ID van RevenueCat meteen: roep het aan na logIn en logOut (SDK 0.3.2+). React Native en Flutter merken het zelf op.
setDeferredDeepLinkListener { }onDeferredDeepLink(_:)addDeferredDeepLinkListener(fn)setDeferredDeepLinkListener(fn)Wordt één keer aangeroepen per installatie die via een Unolink-link kwam. In de praktijk alleen op Android.
getPendingDeferredDeepLink(), consumeDeferredDeepLink()getPendingDeferredDeepLink(), consumeDeferredDeepLink()getPendingDeferredDeepLink(), consumeDeferredDeepLink()De link die je opent zodra de onboarding of het inloggen klaar is, en daarna als gebruikt markeert. Hij wacht tot hij gebruikt is, ook als de app intussen wordt gesloten, tot 30 dagen (SDK 0.3.3+; React Native 0.3.1+ bewaarde hem voor één start).
isConfigured()Of configure met een sleutel is uitgevoerd (React Native 0.3.1+).
getInstallId()installIdgetInstallId()getInstallId()De willekeurige ID van deze installatie.
flush()flush()flush()flush()Verstuurt events uit de wachtrij meteen.
setEnabled(bool)setEnabled(_:)setEnabled(bool)setEnabled(bool)Zet tracking uit (events in de wachtrij worden verwijderd) of weer aan.

RevenueCat

Als RevenueCat is verbonden, is het de bron van waarheid voor geld. Het meldt proefperiodes, aankopen, verlengingen, opzeggingen, terugbetalingen, verlopen abonnementen en betalingsproblemen, ook als de app niet open is. Aanroepen van purchase en trialStarted vanuit de app worden genegeerd, zodat niets dubbel telt. Je app heeft alleen connectRevenueCat nodig (of setUserId met de ID van RevenueCat).

Abonnementstegoed

De SDK zit in de abonnementen Pro en Studio. Elk event dat je app verstuurt, telt mee voor het maandelijkse tegoed aan events: 1 miljoen bij Pro, 5 miljoen bij Studio. Daaronder vallen de standaardevents hierboven en je eigen events. De automatische events (first_open, session_start, app_background) en onboardingschermen (onboarding_step, onboarding_skipped) zijn gratis, net als aankopen, verlengingen en terugbetalingen die uit RevenueCat binnenkomen. Over het tegoed heen gaan blokkeert niets; boven twee keer het tegoed worden eigen events tot de volgende maand geweigerd, terwijl standaard-, onboarding- en automatische events altijd bewaard blijven.