Uitgestelde deep links op Android

Als iemand op Android je Unolink-link opent, stuurt Unolink diegene naar Google Play en voegt een verwijzer toe. Nadat de app is geïnstalleerd en geopend, geeft Google Play die verwijzer aan de app. Hij vertelt je via welke link iemand kwam, plus de deeplink en parameters die je op die link hebt ingesteld. Deze pagina doet het met de hand, zonder Unolink SDK, op elk abonnement. Met de SDK is het één listener.

Open in het dashboard je app, ga naar Links en kies ⋯ → Bewerken bij een link. Stel in:

  • Deeplink: waar de app moet openen, als pad (/promo/3for2) of als URI (myapp://promo/3for2).
  • Parameters (optioneel): tot tien naam/waarde-paren, bijvoorbeeld offer = 3for2.

Wijzigingen gelden binnen een paar seconden voor nieuwe klikken.

2. Voeg de Install Referrer-bibliotheek toe

// app/build.gradle.kts
dependencies {
    implementation("com.android.installreferrer:installreferrer:2.2")
}

3. Lees de verwijzer één keer, bij de eerste keer openen

Kotlin:

import android.content.Context
import android.net.Uri
import com.android.installreferrer.api.InstallReferrerClient
import com.android.installreferrer.api.InstallReferrerStateListener

fun readUnolinkReferrer(context: Context, onLink: (deepLink: String?, params: Map<String, String>) -> Unit) {
    val prefs = context.getSharedPreferences("unolink", Context.MODE_PRIVATE)
    if (prefs.getBoolean("referrer_read", false)) return

    val client = InstallReferrerClient.newBuilder(context).build()
    client.startConnection(object : InstallReferrerStateListener {
        override fun onInstallReferrerSetupFinished(code: Int) {
            if (code == InstallReferrerClient.InstallReferrerResponse.OK) {
                val referrer = client.installReferrer.installReferrer
                val query = Uri.parse("https://unolink.invalid/?$referrer")
                if (query.getQueryParameter("unolink_click_id") != null) {
                    val params = query.queryParameterNames
                        .filter { it.startsWith("unolink_p_") }
                        .associate { it.removePrefix("unolink_p_") to query.getQueryParameter(it).orEmpty() }
                    onLink(query.getQueryParameter("unolink_deep_link"), params)
                }
            }
            prefs.edit().putBoolean("referrer_read", true).apply()
            client.endConnection()
        }

        override fun onInstallReferrerServiceDisconnected() = Unit
    })
}

Java:

InstallReferrerClient client = InstallReferrerClient.newBuilder(context).build();
client.startConnection(new InstallReferrerStateListener() {
    @Override public void onInstallReferrerSetupFinished(int code) {
        if (code == InstallReferrerClient.InstallReferrerResponse.OK) {
            try {
                String referrer = client.getInstallReferrer().getInstallReferrer();
                Uri query = Uri.parse("https://unolink.invalid/?" + referrer);
                String clickId = query.getQueryParameter("unolink_click_id");
                String deepLink = query.getQueryParameter("unolink_deep_link");
                // Route to deepLink if clickId != null; parameters are unolink_p_<name>.
            } catch (RemoteException e) {
                // Play Store unavailable: try again on the next launch.
            }
        }
        client.endConnection();
    }
    @Override public void onInstallReferrerServiceDisconnected() { }
});

React Native of Expo (alleen Android), met react-native-device-info:

import DeviceInfo from "react-native-device-info"

const referrer = await DeviceInfo.getInstallReferrer() // e.g. "unolink_click_id=clk_…&unolink_deep_link=%2Fpromo"
const query = new URLSearchParams(referrer)
const deepLink = query.get("unolink_click_id") ? query.get("unolink_deep_link") : null

Roep het één keer aan na de eerste keer openen en onthoud dat je dat gedaan hebt. Google Play bewaart de verwijzer 90 dagen na de installatie, dus een tweede keer lezen geeft dezelfde waarden terug: open de deeplink niet twee keer.

Met de SDK (0.3.3+) gebeurt dat voor je: de link wacht op het toestel tot je hem als gebruikt markeert, ook als de app intussen wordt gesloten (tot 30 dagen). Zo kun je hem na de onboarding of het inloggen openen en daarna consumeDeferredDeepLink() aanroepen.

Wat de verwijzer bevat

SleutelWaarde
unolink_click_idDe ID van de klik, bijv. clk_01JA…. Altijd aanwezig bij installaties via Unolink.
unolink_linkHet pad van de campagnelink, bijv. tiktok. Ontbreekt bij de hoofdlink van je app.
utm_source, utm_medium, utm_campaign, utm_term, utm_contentDe UTM-tags op de link waarop iemand tikte, als die er zijn.
unolink_deep_linkDe deeplink van de link.
unolink_p_<name>Elk van de parameters van de link.

De verwijzer is beperkt tot 1.000 tekens. Zijn de deeplink en parameters van een link langer, dan vallen eerst de parameters weg, daarna de deeplink. Het opzoeken van de klik geeft altijd alles terug.

Heeft je Google Play-URL in Unolink al een eigen referrer=, dan laat Unolink die ongemoeid en voegt niets toe.

Installaties die niet via Unolink kwamen, hebben geen unolink_click_id. Google Play meldt dan iets als utm_source=google-play&utm_medium=organic.

Optioneel: de klik opzoeken

Met een API-sleutel (Pro-abonnement en hoger) stuur je de klik-ID naar Unolink om de huidige deeplink en parameters van de link te krijgen, ook als ze te lang waren voor de verwijzer of na de klik zijn gewijzigd:

curl https://api.unolink.dev/v1/clicks/clk_01JA… -H "X-Unolink-Key: ulk_…"

Zie de SDK API-referentie.

Testen

Google Play geeft alleen een verwijzer mee bij installaties uit Google Play, dus test met een echte installatie:

  1. Upload een build naar Google Play Console → Testen → Interne tests en voeg jezelf toe als tester.
  2. Verwijder op de telefoon de app, open dan je Unolink-link (bijvoorbeeld go.unolink.dev/yourapp/test) en installeer via de Play-vermelding die opent.
  3. Open de app. De verwijzer hoort je unolink_click_id te bevatten, en de deeplink-callback hoort te draaien.

Om je parse-code te testen zonder te installeren, geef je hem een string zoals unolink_click_id=clk_01JA0000000000000000000000&unolink_deep_link=%2Fpromo%2F3for2.

iPhone

Op iPhone is er geen uitgestelde deep link. Apple heeft geen install referrer, en de omwegen leunen op fingerprinting, wat Unolink nooit doet. iPhone-bezoekers gaan nog steeds direct naar de App Store, en hun klikken worden geteld.

Tellen wat er na de installatie gebeurt is iets anders: met de Unolink SDK worden iPhone-installaties, onboarding, paywallweergaven, proefperiodes en aankopen geteld, net als op Android, en het dashboard koppelt iPhone-installaties aan de link waar ze vandaan kwamen, zonder fingerprinting. Wat iPhone niet kan, is de link bij de eerste keer openen aan je app doorgeven. Voor Apples eigen downloadcijfers per campagne in App Store Connect stel je het App Store-providertoken in bij je app.