SDK
SDK Kotlin Multiplatform
Ajoutez Traqio à une app Kotlin Multiplatform : une dépendance commonMain, le contexte Android, l’init depuis le code partagé, puis cycle de vie et URL.
io.khufu.traqio:traqio-kmp est le SDK Traqio pour Kotlin Multiplatform : le client — file d’attente, envoi par lots, nouvelles tentatives, deep links, consentement — vit dans commonMain, et chaque cible fournit ses briques de plateforme : l’Install Referrer de Google Play sur Android, l’enregistrement SKAdNetwork sur iOS. Kotlin Multiplatform n’a pas de cycle de vie d’app partagé : c’est donc l’app hôte qui signale les retours au premier plan et transmet les URL qui l’ouvrent.
Pas encore sur Maven Central — accès anticipé
io.khufu.traqio:traqio-kmp · version 0.1.0Les paquets du SDK ne sont pas encore sur leurs registres publics. Pour intégrer dès aujourd’hui, demandez le build : hello@traqio.appNiveau de preuve : Compilé par sa propre toolchain en CI ; pas encore exécuté sur un appareil.Prérequis#
- Kotlin 1.9 ou ultérieur, avec kotlinx-coroutines (apporté par le SDK).
- Cibles : Android (API 21+), iosArm64 et iosSimulatorArm64.
Mise en place#
Ajoutez la dépendance à commonMain#
// shared/build.gradle.kts kotlin { sourceSets { commonMain.dependencies { implementation("io.khufu.traqio:traqio-kmp:0.1.0") } } }Tant que l’artefact n’est pas sur Maven Central, publiez le build que nous vous envoyons dans votre dépôt Maven local (
mavenLocal()) et gardez les mêmes coordonnées.Attachez le contexte Android, puis initialisez#
import io.khufu.traqio.kmp.Traqio import io.khufu.traqio.kmp.TraqioAndroid class App : Application() { override fun onCreate() { super.onCreate() TraqioAndroid.attach(this) // FIRST: the SDK keeps its state in this app's SharedPreferences Traqio.init(sdkKey = "YOUR_SDK_KEY", endpoint = "https://api.traqio.app") } }// Swift, through your shared framework. Kotlin's `init` is `doInit` in Swift, // and Kotlin default arguments are not visible there: pass every parameter. Traqio.shared.doInit( sdkKey: "YOUR_SDK_KEY", endpoint: "https://api.traqio.app", userId: nil, deepLinking: true, consent: nil )Signalez les ouvertures de l’app#
// Android — e.g. a ProcessLifecycleOwner observer override fun onStart(owner: LifecycleOwner) = Traqio.appOpened() // iOS — sceneDidBecomeActive / applicationDidBecomeActive Traqio.shared.appOpened()Dédoublonné par un délai de session de 30 minutes : vous pouvez donc l’appeler sans risque à chaque reprise. Sans lui, vos utilisateurs semblent ne jamais revenir, et la rétention affiche zéro après le jour 0.
Transmettez les URL qui ouvrent l’app#
// In the activity that handles links — onCreate AND onNewIntent TraqioAndroid.handleIntent(intent) Traqio.onDeepLink { link -> link.deepLink?.let(router::navigate) }// app/scene delegate, or SwiftUI .onOpenURL Traqio.shared.handleUrlAsync(url: url.absoluteString, callback: nil)
Événements#
Traqio.setUserId(user.id) // same id as RevenueCat's app_user_id
Traqio.track("purchase", value = 9.99, currency = "EUR")Les événements sont envoyés dès qu’ils sont mis en file d’attente, par lots de 20, retentés avec un backoff exponentiel jusqu’à cinq minutes. Noms : Noms d’événements.
Pas encore dans ce SDK#
iOS#
Les installations sont enregistrées auprès de SKAdNetwork, mais aucune valeur de conversion n’est définie et aucun jeton Apple Ads n’est transmis.
Les deux plateformes#
Pas de nouvelle tentative de l’Install Referrer, pas d’identifiant de transaction sur les achats, pas de revenus publicitaires AdMob, pas d’effacement depuis l’app — utilisez RevenueCat et l’effacement côté serveur.
Preuves à ce jour
Questions fréquentes#
- Pourquoi faut-il appeler TraqioAndroid.attach avant init ?
- Sur Android, le SDK stocke son état — le marqueur d’installation, la file d’attente, l’identifiant de l’appareil — dans les SharedPreferences de l’app, ce qui nécessite un Context Android dont le code Kotlin partagé ne dispose pas. attach lui fournit le contexte de l’application. Appeler init d’abord échoue au premier accès au stockage.
- Comment appeler le SDK depuis Swift ?
- Via votre framework partagé, sous le nom Traqio.shared. Kotlin/Native renomme en doInit, côté Swift, une fonction appelée init, et les arguments par défaut de Kotlin ne sont pas visibles depuis Swift : chaque paramètre de doInit est donc passé explicitement.