Get started

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.

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.

Android 6.0+ (minSdk 23)Language Kotlin or JavaFrom Maven CentralYour key ulk_…from your app → Settings
  1. Step 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 {
        
  2. 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_…")
        }
    }
  3. 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 RevenueCat
    onboardingStep(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 it
    paywallViewed(placement)PaywallEvery time a paywall appears. Placement says which one ("onboarding", "settings"…)
    signUp(method)Sign-upRight after a new account is created
    signIn(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 logout
    Using 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.
  4. Step 4: Open deep links from your links

    Your first Activity, or wherever you navigate

    When 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()
    }
  5. 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 for Unolink in the logs.
What happens after you ship it
Waiting for your first install…
Installs0
Onboarding0
Paywall0
Sign-up0
Trial0

How it works

  1. 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.
  2. 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.
  3. 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.
  4. 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.