Le SDK Unolink
Les liens vous disent qui a appuyé. Le SDK vous dit ce qui s’est passé ensuite : installations, onboarding, vues du paywall, inscriptions, essais et achats, par lien et par campagne. Il ouvre aussi votre app sur le bon écran après une installation depuis un lien, sur Android.
Il est open source, s’ajoute en environ cinq minutes et est disponible sur les forfaits Pro et plus.
- Android : Kotlin ou Java, Android 6.0+.
- iOS : Swift ou Objective-C, iOS 13+.
- React Native et Expo : React Native 0.79+, dev builds Expo.
- Flutter : Flutter 3.22+, Android et iOS.
Code source : github.com/unolink-dev/unolink-sdk.
Démarrage rapide
Choisissez votre plateforme. Suivez les étapes vous-même, ou copiez un seul prompt dans votre assistant de code IA. Dans le tableau de bord (votre app → SDK), les mêmes étapes contiennent votre vraie clé, et la vérification passe au vert quand votre première installation arrive. Ici, c’est une démo.
ulk_…depuis votre app → ParamètresÉtape 1 : Installez le package
app/build.gradle.kts → dependencies { }Maven Central est déjà présent dans tout nouveau projet Android, cette seule ligne suffit donc. Synchronisez Gradle ensuite.
dependencies {Étape 2 : Démarrez-le avec votre clé
Votre classe Application → onCreate()Configurez une seule fois, avant que quoi que ce soit d’autre ne s’exécute. Pas encore de classe Application ? Créez celle-ci et ajoutez android:name=".MyApp" à <application> dans AndroidManifest.xml.
class MyApp : Application() { override fun onCreate() { super.onCreate() Unolink.configure(this, "ulk_…") } }Étape 3 : Marquez les étapes de votre entonnoir
Une ligne à chaque moment qui compte. Elles deviennent les étapes de votre Entonnoir et de vos Parcours.
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 RevenueCatAppelÉtapeQuandonboardingStep(step)Onglet OnboardingÀ l’apparition de chaque écran d’onboarding (pas sur son bouton). Montre sur quel écran les gens partent. Gratuit : non décompté de vos événements SDK.onboardingCompleted()OnboardingJuste après le dernier écran d’onboarding, avant le paywall ou l’inscription qui suitpaywallViewed(placement)PaywallÀ chaque affichage d’un paywall. Placement indique lequel ("onboarding", "settings"…)signUp(method)InscriptionJuste après la création d’un nouveau comptesignIn(method)RetourQuand quelqu’un se connecte à un compte qu’il avait déjà (SDK 0.3.0+)signUpSkipped()Continué en invitéQuand quelqu’un appuie sur « continuer en invité » plutôt que de créer un compte (SDK 0.3.2+)connectRevenueCat { } / setUserId(id)Relie les achatsAvec RevenueCat : connectRevenueCat, une fois au lancement (SDK 0.3.2+), garde à jour l’identifiant utilisateur d’app de RevenueCat, invités compris. Sinon, setUserId avec votre propre identifiant utilisateur, null à la déconnexionVous utilisez RevenueCat ? Connectez-le dans Paramètres → RevenueCat, appelez connectRevenueCat au lieu de setUserId (SDK 0.3.2+) et passez les appels d’essai et d’achat. Essais, achats, renouvellements et remboursements arrivent d’eux-mêmes.Étape 4 : Ouvrez les liens profonds de vos liens
Votre première Activity, ou là où vous gérez la navigationQuand quelqu’un installe depuis un lien qui a un lien profond, Unolink vous le transmet à la première ouverture. Envoyez-le directement là.
Unolink.setDeferredDeepLinkListener { link -> // link.deepLink = "/promo/3for2", link.params["offer"] = "3for2" navigate(link.deepLink) Unolink.consumeDeferredDeepLink() }Étape 5 : Vérifiez que ça marche
Lancez un build de debug sur un téléphone ou un émulateur et ouvrez l’app une fois. En quelques secondes, la vérification passe au vert.
- Les builds de debug et les émulateurs comptent comme appareils de test : activez Inclure les appareils de test dans Entonnoir et Parcours pour les voir.
- Rien ne s’affiche ? Configurez avec
UnolinkOptions(logLevel = LogLevel.DEBUG)et cherchezUnolinkdans les logs.
Comment ça marche
- Vous créez une clé SDK dans le tableau de bord : votre app → Paramètres → Clés SDK → Nouvelle clé. La clé est publique : elle est livrée dans votre app et ne peut remonter des données que pour cette app.
- Au premier lancement, le SDK crée un identifiant d’installation aléatoire et enregistre l’installation. Sur Android, il lit aussi le referrer d’installation de Google Play, qui indique de quel lien Unolink vient l’installation.
- Votre app appelle une ligne à chaque étape de l’entonnoir : onboarding terminé, paywall affiché, compte créé. Le SDK ajoute trois événements de lui-même : première ouverture, début de session et app en arrière-plan.
- Les événements attendent sur l’appareil et partent par petits lots en arrière-plan. Hors ligne ? Ils attendent et réessaient. Le SDK ne bloque jamais votre app et ne lève jamais d’exception.
Où apparaissent les données
Ouvrez votre app dans le tableau de bord :
- Entonnoir : combien d’installations ont atteint chaque étape, par lien. Créez autant d’entonnoirs que vous voulez (Nouvel entonnoir), chacun avec ses propres étapes ; Parcours affiche celui que vous choisissez.
- Parcours : chaque installation sous forme de code anonyme, du lien qui l’a amenée jusqu’à l’achat. Filtrez par plateforme, source et résultat, ou appuyez sur une étape pour ne lister que les personnes qui l’ont atteinte. Un point vert montre qui est dans l’appli en ce moment (actif dans les 5 dernières minutes), avec le total en haut.
- Rapport : ce qui marche, ce qui fuit et quoi essayer ensuite. Des règles fixes appliquées à vos propres chiffres ; chaque constat montre comment il a été calculé.
Les builds de debug, les builds TestFlight et Xcode, les builds Android installés depuis Android Studio ou adb, les installations qui ont fait un achat sandbox et les builds que vous marquez comme test sont des appareils de test. Ils sont masqués tant que vous n’activez pas Inclure les appareils de test. Voir Tests.
Achats
Si votre app utilise RevenueCat, connectez-le et n’envoyez pas les achats depuis l’app : RevenueCat
remonte lui-même les essais, achats, renouvellements, annulations et remboursements. Signalez le propre identifiant
utilisateur d’app de RevenueCat (aussi pour les invités), pour qu’ils soient reliés à la bonne installation :
connectRevenueCat le fait en une ligne (SDK 0.3.2 ou plus récent), ou appelez setUserId avec.
Sans RevenueCat, appelez trialStarted et purchase vous-même. Voir Événements.
Confidentialité
- Pas de fingerprinting, pas d’IDFA ni de Google Advertising ID, pas de demande App Tracking Transparency.
- Les adresses IP ne sont jamais stockées. Le pays est déduit en périphérie du réseau.
- Vos identifiants utilisateur ne sont stockés que sous forme de hash à sens unique, différent pour chacune de vos apps.
- Sur l’étiquette de confidentialité de l’App Store, les données du SDK sont des analyses, non liées à l’identité. Le package iOS inclut un manifeste de confidentialité.
Ne mettez jamais de noms, d’e-mails ou d’autres données personnelles dans les propriétés d’événement.
Forfaits et limites
Le SDK fait partie des forfaits Pro et Studio. Les événements automatiques (première ouverture, début de session, app en arrière-plan), les écrans d’onboarding et les achats venant de RevenueCat sont gratuits. Tout autre événement envoyé par votre app, standard ou personnalisé, est décompté de l’allocation mensuelle d’événements : 1 million sur Pro, 5 millions sur Studio.