Betalingen en gebruikers-ID’s

Unolink koppelt elke betaling aan de installatie waar hij bij hoort, en zo aan de link of advertentie waar die installatie vandaan kwam. Dat werkt hoe laat de betaling ook komt: iemand die vandaag op je TikTok-advertentie tikt en over twee weken een abonnement neemt, telt nog steeds als betalende gebruiker uit die advertentie. Pro-abonnement en hoger.

Hoe late betalingen worden geteld

  • Elk event hoort bij een installatie. Een betaling die een week of een maand na de installatie binnenkomt, wordt bij diezelfde persoon opgeteld.
  • Funnels, Trajecten en het Rapport kappen nooit af. Een stap telt als de persoon hem op enig moment heeft gedaan, dus een late betaling maakt iemand alsnog "Betaald".
  • De periode kiest mensen, geen events. "Laatste 7 dagen" betekent mensen die in de laatste 7 dagen installeerden, plus alles wat ze daarna deden. Bekijk de installaties van vorige week volgende week opnieuw en Betaald kan zijn gestegen: dat zijn late betalers die binnenkomen, geen fout.
  • Trajecten werken zichzelf bij. Iemand die als "Afgehaakt" wordt getoond (een week geen activiteit) wordt "Voltooid" als de betaling binnenkomt, en de rij toont "betaalde 9 dagen na installatie · kwam terug".

Waar je ziet hoe lang mensen erover doen

  • Rapport → Wanneer mensen betalen: het aandeel installaties dat binnen een dag, 7 dagen en 30 dagen betaalt, de mediane wachttijd, en hoeveel er terugkwamen om te betalen na een week of meer stilte, voor iedereen en per link. "Binnen 7 dagen" telt alleen installaties van minstens 7 dagen oud, zodat recente installaties het cijfer niet omlaag trekken.
  • Trajecten: bij elke betalende persoon zie je hoeveel dagen na de installatie die voor het eerst betaalde, en of die terugkwam nadat het stil was geworden.
  • Al geabonneerd: iemand die vóór deze installatie al een abonnement nam (een herinstallatie, een nieuwe telefoon) stuurt een verlenging, geen aankoop. Trajecten toont die persoon als "Al geabonneerd · verlengd" en telt het geld mee in de omzet, maar niet als Betaald: de verkoop kwam niet van deze installatie of de link waar die vandaan kwam.

Wat je app nodig heeft

Betalingen bereiken Unolink op een van twee manieren:

  1. RevenueCat (aanbevolen). Verbind de webhook ervan onder je app → Instellingen → RevenueCat. RevenueCat meldt aankopen, conversies van proefperiodes, verlengingen en terugbetalingen ook als de app niet open is, en zo gebeuren de meeste late betalingen (een gratis proefperiode die een week later wordt omgezet, een verlenging volgende maand).
  2. De purchase()-aanroep van de SDK, verstuurd vanuit de app als iemand daar betaalt. Prima zonder RevenueCat, maar hij ziet niets wat buiten de app gebeurt.

Om de events van RevenueCat bij de juiste installatie te laten uitkomen, moet de app Unolink vertellen wie de gebruiker is, met de eigen app-gebruikers-ID van RevenueCat. Met SDK 0.3.2 of nieuwer houdt één regel bij de start die actueel:

// iOS: once at launch, before or after configure
Unolink.connectRevenueCat { Purchases.isConfigured ? Purchases.shared.appUserID : nil }
// Android
Unolink.connectRevenueCat { Purchases.sharedInstance.appUserID }
// React Native
Unolink.connectRevenueCat(Purchases)
// Flutter
Unolink.connectRevenueCat(() => Purchases.appUserID,
    addListener: Purchases.addCustomerInfoUpdateListener,
    removeListener: Purchases.removeCustomerInfoUpdateListener);

Het leest de ID van RevenueCat bij de start, wanneer de app terugkomt naar de voorgrond en wanneer hij verandert, en verstuurt hem alleen als hij nieuw is (roep op iOS en Android ook Unolink.revenueCatUserChanged() aan na logIn en logOut). Vóór 0.3.2, of als je het zelf wilt doen, roep je in plaats daarvan setUserId aan met de ID van RevenueCat (bijvoorbeeld Unolink.setUserId(Purchases.shared.appUserID)) na Purchases.configure, na elke Purchases.logIn en Purchases.logOut, en bij elke start. Gebruik het een of het ander, niet allebei. RevenueCat heeft de code voor elk platform.

Voor een gast is die ID 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. Een betaling die binnenkomt voordat de app de gebruikers-ID heeft verstuurd, gaat niet verloren: hij wacht en wordt aan de installatie gekoppeld zodra de ID binnenkomt. Gebruik je geen RevenueCat, roep dan setUserId aan met je eigen gebruikers-ID, en null (nil in Swift) bij uitloggen.

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.

Wanneer een betaling niet kan worden gekoppeld

  • Geen RevenueCat en geen setUserId, en de persoon betaalt buiten de app (bijvoorbeeld op je website). Niets vertelt Unolink erover.
  • Diegene installeert opnieuw voordat hij betaalt. Een nieuwe installatie is voor Unolink een nieuwe persoon, tenzij dezelfde gebruikers-ID ze verbindt.
  • Diegene betaalt op een ander apparaat. Ook dat wordt alleen via de gebruikers-ID gekoppeld.
  • Een gast betaalt, en de app meldt alleen de account-ID. RevenueCat stuurt de aankoop onder zijn anonieme ID, die de app nooit heeft gemeld. Hij wordt nog 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 eigen ID van RevenueCat melden, koppelt hem meteen.

Met RevenueCat verbonden en de ID ervan gemeld (connectRevenueCat, of setUserId met de ID van RevenueCat) zijn ze allemaal gedekt.

Privacy: dit is geen fingerprinting

  • Fingerprinting betekent zonder te vragen uitzoeken welk apparaat iemand is aan de hand van de kenmerken ervan (IP-adres, scherm, lettertypes, instellingen), meestal om diegene te volgen in apps van andere bedrijven. Apple verbiedt het, en Unolink doet het nooit.
  • setUserId is de eigen gebruikers-ID van je app, bewust doorgegeven door je app. Unolink bewaart er alleen een eenrichtingshash met sleutel van (HMAC-SHA256 met een sleutel die uniek is voor elk van je apps), nooit de ID zelf, en gebruikt die voor één ding: de betalingen van je app koppelen aan de installaties van je app. Hij wordt nooit gedeeld met andere apps, advertentienetwerken of wie dan ook.
  • App Tracking Transparency van Apple gaat over het koppelen van de gegevens van je app aan apps of websites van andere bedrijven voor advertenties, of het delen ervan met databrokers. Je eigen aankopen koppelen aan je eigen installaties is first-party-analyse, van hetzelfde soort als wat RevenueCat of Firebase doen, dus er is geen trackingmelding voor nodig.

In de privacyvragen van App Store Connect komt Unolink met setUserId meestal neer op: Gebruikers-ID en Aankopen, verzameld voor Analyse, gekoppeld aan de gebruiker en niet gebruikt om te tracken. Je eigen antwoorden hangen af van alles wat je app verder doet, dus controleer ze als geheel.