Liens profonds différés Android
Quand quelqu’un sur Android ouvre votre lien Unolink, Unolink l’envoie vers Google Play et y joint un referrer. Après l’installation et l’ouverture de votre app, Google Play transmet ce referrer à l’app. Il vous indique de quel lien la personne vient, ainsi que le deep link et les paramètres définis sur ce lien. Cette page le fait à la main, sans le SDK Unolink, sur tous les forfaits. Avec le SDK, c’est un seul listener.
1. Donner un deep link au lien
Dans le tableau de bord, ouvrez votre app, allez dans Liens et choisissez ⋯ → Modifier sur un lien. Définissez :
- Deep link : où l’app doit s’ouvrir, sous forme de chemin (
/promo/3for2) ou d’URI (myapp://promo/3for2). - Paramètres (facultatif) : jusqu’à dix paires nom/valeur, par exemple
offer=3for2.
Les modifications s’appliquent aux nouveaux clics en quelques secondes.
2. Ajouter la bibliothèque Install Referrer
// app/build.gradle.kts
dependencies {
implementation("com.android.installreferrer:installreferrer:2.2")
}
3. Lire le referrer une fois, au premier lancement
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 ou Expo (Android uniquement), avec 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
Appelez-le une fois après le premier lancement et retenez que vous l’avez fait. Google Play garde le referrer pendant 90 jours après l’installation, donc une seconde lecture renvoie les mêmes valeurs : n’ouvrez pas le deep link deux fois.
Avec le SDK (0.3.3+), tout cela est géré pour vous : le lien attend sur l’appareil
jusqu’à ce que vous le consommiez, même si l’app est fermée entre-temps (jusqu’à 30 jours). Vous pouvez donc l’ouvrir
après l’onboarding ou la connexion, puis appeler consumeDeferredDeepLink() une fois que c’est fait.
Ce que contient le referrer
| Clé | Valeur |
|---|---|
unolink_click_id | L’identifiant du clic, par ex. clk_01JA…. Toujours présent pour les installations Unolink. |
unolink_link | Le chemin du lien de campagne, par ex. tiktok. Absent pour le lien principal de votre app. |
utm_source, utm_medium, utm_campaign, utm_term, utm_content | Les balises UTM du lien sur lequel la personne a appuyé, quand il y en a. |
unolink_deep_link | Le deep link du lien. |
unolink_p_<name> | Chacun des paramètres du lien. |
Le referrer est limité à 1 000 caractères. Si le deep link et les paramètres d’un lien sont plus longs, les paramètres sont omis en premier, puis le deep link. La recherche de clic renvoie toujours tout.
Si votre URL Google Play dans Unolink a déjà son propre referrer=, Unolink n’y touche pas et n’ajoute rien.
Les installations qui ne sont pas passées par Unolink n’ont pas de unolink_click_id. Google Play renvoie alors
quelque chose comme utm_source=google-play&utm_medium=organic.
Facultatif : rechercher le clic
Avec une clé API (forfait Pro et plus), envoyez l’identifiant de clic à Unolink pour obtenir le deep link et les paramètres actuels du lien, même s’ils étaient trop longs pour le referrer ou ont changé après le clic :
curl https://api.unolink.dev/v1/clicks/clk_01JA… -H "X-Unolink-Key: ulk_…"
Voir la référence de l’API SDK.
Le tester
Google Play ne transmet un referrer que pour les installations depuis Google Play, donc testez avec une vraie installation :
- Importez un build dans Google Play Console → Testing → Internal testing, et ajoutez-vous comme testeur.
- Sur le téléphone, désinstallez l’app, puis ouvrez votre lien Unolink (par exemple
go.unolink.dev/yourapp/test) et installez depuis la fiche Play qu’il ouvre. - Ouvrez l’app. Le referrer doit contenir votre
unolink_click_id, et le callback du deep link doit s’exécuter.
Pour tester votre code d’analyse du referrer sans installer, passez-lui une chaîne comme
unolink_click_id=clk_01JA0000000000000000000000&unolink_deep_link=%2Fpromo%2F3for2.
iPhone
Il n’y a pas de lien profond différé sur iPhone. Apple n’a pas de referrer d’installation, et les solutions de contournement reposent sur le fingerprinting, ce que Unolink ne fait jamais. Les visiteurs sur iPhone vont tout de même directement à l’App Store, et leurs clics sont comptés.
Compter ce qui se passe après l’installation est une autre affaire : avec le SDK Unolink, les installations, l’onboarding, les vues du paywall, les essais et les achats sur iPhone sont comptés, comme sur Android, et le tableau de bord associe les installations iPhone au lien d’où elles viennent, sans fingerprinting. Ce que l’iPhone ne peut pas faire, c’est transmettre le lien à votre app à la première ouverture. Pour les chiffres de téléchargement par campagne d’Apple elle-même dans App Store Connect, définissez le jeton fournisseur App Store de votre app.