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.
1. Geef de link een deeplink
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
| Sleutel | Waarde |
|---|---|
unolink_click_id | De ID van de klik, bijv. clk_01JA…. Altijd aanwezig bij installaties via Unolink. |
unolink_link | Het pad van de campagnelink, bijv. tiktok. Ontbreekt bij de hoofdlink van je app. |
utm_source, utm_medium, utm_campaign, utm_term, utm_content | De UTM-tags op de link waarop iemand tikte, als die er zijn. |
unolink_deep_link | De 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:
- Upload een build naar Google Play Console → Testen → Interne tests en voeg jezelf toe als tester.
- 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. - Open de app. De verwijzer hoort je
unolink_click_idte 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.