Traqio.

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é

Paquet 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#

  1. 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.

  2. Attachez le contexte Android, puis initialisez#

    Android — Application
    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")
        }
    }
    iOS — init de l’App / didFinishLaunching
    // 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
    )
  3. 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.

  4. 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

Le code commun et le code Android compilent en CI et la logique commune est couverte par des tests unitaires ; le framework iOS nécessite un build macOS qui ne tourne qu’à la publication du paquet.

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.

Mis à jour le 14 octobre 2026