The Unolink SDK
Links tell you who tapped. The SDK tells you what happened next: installs, onboarding, paywall views, sign-ups, trials and purchases, per link and campaign. It also opens your app on the right screen after an install from a link, on Android.
It's open source, takes about five minutes to add, and is available on the Pro plan and up.
- Android: Kotlin or Java, Android 6.0+.
- iOS: Swift or Objective-C, iOS 13+.
- React Native and Expo: React Native 0.79+, Expo dev builds.
- Flutter: Flutter 3.22+, Android and iOS.
Source code: github.com/unolink-dev/unolink-sdk.
Quickstart
Pick your platform. Follow the steps yourself, or copy one prompt into your AI coding assistant. Inside the dashboard (your app → SDK), the same steps carry your real key and the status check turns green when your first install arrives. Here it plays a demo.
ulk_…from your app → SettingsStep 1: Install the package
app/build.gradle.kts → dependencies { }Maven Central is already in every new Android project, so this one line is enough. Sync Gradle afterwards.
dependencies {Step 2: Start it with your key
Your Application class → onCreate()Configure once, before anything else runs. No Application class yet? Create this one and add android:name=".MyApp" to <application> in AndroidManifest.xml.
class MyApp : Application() { override fun onCreate() { super.onCreate() Unolink.configure(this, "ulk_…") } }Step 3: Mark the steps of your funnel
One line at each moment that matters. These become the steps in your Funnel and Journeys.
Unolink.onboardingStep("goal") // as each onboarding screen appears Unolink.onboardingCompleted() Unolink.paywallViewed("onboarding") Unolink.signUp("email") // a new account Unolink.signIn("apple") // a returning user signed in Unolink.signUpSkipped() // "continue as guest" Unolink.connectRevenueCat { Purchases.sharedInstance.appUserID } // with RevenueCat, once Unolink.setUserId(user.id) // without RevenueCatCallFunnel stepWhenonboardingStep(step)Onboarding tabAs each onboarding screen appears (not on its button). Shows which screen people leave on. Free: not counted in your SDK events.onboardingCompleted()OnboardingRight after the last onboarding screen, before the paywall or sign-up that follows itpaywallViewed(placement)PaywallEvery time a paywall appears. Placement says which one ("onboarding", "settings"…)signUp(method)Sign-upRight after a new account is createdsignIn(method)ReturningWhen someone signs in to an account they already had (SDK 0.3.0+)signUpSkipped()Continued as guestWhen someone taps “continue as guest” instead of creating an account (SDK 0.3.2+)connectRevenueCat { } / setUserId(id)Joins purchasesWith RevenueCat: connectRevenueCat, once at launch (SDK 0.3.2+), keeps RevenueCat’s app user ID current, guests included. Otherwise setUserId with your own user ID, null on logoutUsing RevenueCat? Connect it under Settings → RevenueCat, call connectRevenueCat instead of setUserId (SDK 0.3.2+), and skip trial and purchase calls. Trials, purchases, renewals and refunds arrive on their own.Step 4: Open deep links from your links
Your first Activity, or wherever you navigateWhen someone installs from a link that has a deep link, Unolink hands it to you on first open. Send them straight there.
Unolink.setDeferredDeepLinkListener { link -> // link.deepLink = "/promo/3for2", link.params["offer"] = "3for2" navigate(link.deepLink) Unolink.consumeDeferredDeepLink() }Step 5: Check it works
Run a debug build on a phone or emulator and open the app once. Within a few seconds the check turns green.
- Debug builds and emulators count as test devices: turn on Include test devices in Funnel and Journeys to see them.
- Nothing showing? Configure with
UnolinkOptions(logLevel = LogLevel.DEBUG)and look forUnolinkin the logs.
How it works
- You create an SDK key in the dashboard: your app → Settings → SDK keys → New key. The key is public: it ships inside your app and can only report data for that one app.
- On first launch the SDK creates a random install ID and registers the install. On Android it also reads Google Play's install referrer, which says which Unolink link the install came from.
- Your app calls one line at each funnel step: onboarding finished, paywall shown, account created. The SDK adds three events on its own: first open, session start and app to background.
- Events wait on the device and go out in small batches in the background. Offline? They wait and retry. The SDK never blocks your app and never throws.
Where the data shows up
Open your app in the dashboard:
- Funnel: how many installs reached each step, per link. Make as many funnels as you like (New funnel), each with its own steps; Journeys shows the one you pick.
- Journeys: every install as an anonymous code, from the link that brought it to the purchase. Filter by platform, source and outcome, or tap a step to list only the people who reached it. A green dot shows who's in the app right now (active in the last 5 minutes), with a count at the top.
- Report: what's working, what's leaking and what to try next. Fixed rules on your own numbers, each finding shows how it was worked out.
Debug builds, TestFlight and Xcode builds, Android builds installed from Android Studio or adb, installs that made a sandbox purchase and builds you mark as test are test devices. They're hidden until you turn on Include test devices. See Testing.
Purchases
If your app uses RevenueCat, connect it and don't send purchases from the app: RevenueCat reports
trials, purchases, renewals, cancellations and refunds itself. Report RevenueCat's own app user ID (also for guests),
so they join the right install: connectRevenueCat does it in one line (SDK 0.3.2 or later), or call setUserId with
it.
Without RevenueCat, call trialStarted and purchase yourself. See Events.
Privacy
- No fingerprinting, no IDFA or Google Advertising ID, no App Tracking Transparency prompt.
- IP addresses are never stored. Country comes from the network edge.
- Your user IDs are stored only as a one-way hash that's different for each of your apps.
- On the App Store privacy label, the SDK's data is analytics, not linked to identity. The iOS package includes a privacy manifest.
Never put names, emails or other personal data in event properties.
Plans and limits
The SDK is part of the Pro and Studio plans. The automatic events (first open, session start, app to background), onboarding screens and purchases from RevenueCat are free. Every other event your app sends, standard or custom, counts toward the monthly event allowance: 1 million on Pro, 5 million on Studio.