SDK iOS
Swift, utilisable depuis Objective-C. Aucune dépendance. Inclut un manifeste de confidentialité. Forfait Pro et plus.
Prérequis
- iOS 13+.
- Swift ou Objective-C.
- Une clé SDK : dans le tableau de bord, ouvrez votre app → Paramètres → Clés SDK → Nouvelle clé. Elle n’est affichée qu’une fois, copiez-la à ce moment-là.
Installation
Dans Xcode, choisissez File → Add Package Dependencies…, collez l’adresse du dépôt, choisissez Up to Next Major
Version à partir de 0.3.3, et ajoutez la bibliothèque Unolink à la cible de votre app.
https://github.com/unolink-dev/unolink-sdk
Unolink s’installe avec Swift Package Manager, pas avec CocoaPods. Si votre projet utilise aussi CocoaPods pour d’autres bibliothèques et que pod install échoue sur une erreur d’encodage (Ruby 4, ou une locale qui n’est pas en UTF-8), lancez-le en UTF-8 :
LANG=en_US.UTF-8 pod install
Configuration
Appelez configure une seule fois, le plus tôt possible : dans l’init() de votre App @main, ou dans
application(_:didFinishLaunchingWithOptions:).
import Unolink
@main
struct MyApp: App {
init() {
#if DEBUG
Unolink.configure(apiKey: "ulk_…", options: UnolinkOptions(debug: true))
#else
Unolink.configure(apiKey: "ulk_…")
#endif
}
var body: some Scene { WindowGroup { ContentView() } }
}
Une bibliothèque compilée ne voit pas vos réglages de build, passez donc vous-même debug: true depuis les builds de debug, comme ci-dessus. Cela
marque l’installation comme appareil de test.
Objective-C :
@import Unolink;
[Unolink configureWithApiKey:@"ulk_…" options:[UNLOptions new]];
Options
| Option | Par défaut | Ce qu’elle fait |
|---|---|---|
debug | false | Marque cette installation comme appareil de test. Les tableaux de bord masquent les appareils de test sauf si Inclure les appareils de test est activé. |
logLevel | .warn | La quantité de logs envoyée vers la console Xcode, préfixe [Unolink] : .none, .error, .warn, .info, .debug. |
baseURL | https://api.unolink.dev | L’API du SDK. Laissez-la telle quelle. |
Unolink.configure(apiKey: "ulk_…", options: UnolinkOptions(logLevel: .debug, debug: true))
La clé est publique : elle est livrée dans votre app et ne peut envoyer des données que pour cette app. Voir Clés SDK.
Événements d’entonnoir
Ajoutez une ligne à chaque moment qui compte. Elles deviennent les étapes de Entonnoir et Parcours.
Unolink.onboardingCompleted() // the last onboarding screen is done
Unolink.paywallViewed(placement: "onboarding") // a paywall appeared; placement says which one
Unolink.paywallSkipped(placement: "onboarding") // closed without buying
Unolink.signUp(method: "apple") // an account was created
Unolink.signUpSkipped() // went on as a guest (0.3.2+)
Sans RevenueCat, remontez vous-même les essais et les achats. Le montant est un Decimal, les prix ne sont donc jamais arrondis :
Unolink.trialStarted(productId: "pro_yearly")
Unolink.purchase(amount: product.price, currency: "USD", productId: product.id)
Unolink.purchaseCancelled(productId: product.id) // closed the purchase sheet
Unolink.purchaseFailed(productId: product.id, reason: "payment_failed")
Vos propres événements prennent un nom et jusqu’à 20 propriétés :
Unolink.track("level_up", properties: ["level": 3])
Objective-C :
[Unolink paywallViewedWithPlacement:@"onboarding" properties:nil];
[Unolink purchaseWithAmount:[NSDecimalNumber decimalNumberWithString:@"49.99"] currency:@"USD" productId:nil properties:nil];
La liste complète, avec les noms qui arrivent dans le tableau de bord, se trouve dans Événements.
Identifiant utilisateur et RevenueCat
Si vous utilisez RevenueCat, connectez-le dans votre app → Paramètres → RevenueCat. N’appelez alors pas
purchase ni trialStarted : RevenueCat envoie lui-même les essais, achats, renouvellements, annulations et remboursements, et
Unolink ignore les appels d’achat de l’app pour que rien ne compte deux fois.
Pour relier ces achats à l’installation, signalez le propre identifiant utilisateur d’app de RevenueCat. Avec le SDK
0.3.2 ou plus récent, une seule ligne le tient à jour. Appelez-la une fois au lancement, avant ou après configure :
Unolink.connectRevenueCat { Purchases.isConfigured ? Purchases.shared.appUserID : nil }
Unolink lit l’identifiant au lancement, chaque fois que l’app devient active et avant chaque événement, et ne l’envoie
que s’il a changé. Après Purchases.logIn et Purchases.logOut, appelez Unolink.revenueCatUserChanged() pour envoyer
le nouvel identifiant tout de suite. Renvoyez nil tant que RevenueCat n’est pas configuré : lire Purchases.shared
avant cela arrête l’app.
Sans elle (ou avant la 0.3.2), appelez setUserId avec l’identifiant de RevenueCat après Purchases.configure, après
chaque Purchases.logIn et Purchases.logOut, et à chaque lancement. Utilisez l’un ou l’autre, pas les deux :
// after Purchases.configure, logIn and logOut, and on every launch
Unolink.setUserId(Purchases.shared.appUserID)
Pour un invité, c’est l’identifiant anonyme de RevenueCat, donc un achat fait avant l’inscription est relié à
l’installation tout de suite. Après logIn, c’est l’identifiant du compte. Chaque identifiant signalé par une
installation compte, donc l’achat de l’invité reste relié. Voir
Invités et comptes.
Unolink ne stocke jamais l’identifiant lui-même, seulement un hachage à sens unique, différent pour chacune de vos apps.
Deep links sur iPhone
Les liens profonds différés sont réservés à Android. Apple ne donne aux apps aucun referrer d’installation, donc votre app ne peut pas savoir sur quel
lien on a appuyé, et Unolink ne fait jamais de fingerprinting des appareils pour deviner. Unolink.onDeferredDeepLink(_:) existe pour que le code
puisse être partagé entre plateformes, mais sur iPhone il n’est pas appelé aujourd’hui.
Dans le tableau de bord, les installations iPhone sont associées au clic sur le lien dont elles proviennent, sans fingerprinting. L’association n’est pas envoyée à l’app. Désactivez-la pour chaque app dans ses Paramètres.
Vos liens envoient quand même les visiteurs iPhone directement vers l’App Store et comptent leurs clics, et le SDK compte toujours chaque installation et chaque événement.
Autres appels
| Appel | Ce qu’il fait |
|---|---|
Unolink.installId | L’identifiant d’installation aléatoire, ou nil avant configure. Il n’identifie aucune personne ni aucun appareil. |
Unolink.flush() | Envoie tout de suite les événements en file d’attente. Normalement inutile. |
Unolink.setEnabled(false) | Désactive le suivi et supprime les événements en file d’attente, pour votre réglage de désinscription. true le réactive. |
Fonctionnement
- Premier lancement : crée un identifiant d’installation aléatoire dans Application Support (exclu de la sauvegarde iCloud, jamais dans le trousseau), donc une réinstallation ou un nouveau téléphone est une nouvelle installation.
- Événements automatiques :
first_open,session_start(au lancement, ou après 30 minutes en arrière-plan) etapp_background. Ils sont gratuits. - Les événements sont stockés sur l’appareil (jusqu’à 1 000) et envoyés par lots toutes les 15 secondes tant que l’app est active, ainsi que lorsqu’elle passe en arrière-plan. Hors ligne, ils attendent et réessaient.
- Il ne bloque jamais le thread principal et ne lève jamais d’exception.
Appareils de test
Configurez avec debug: true dans les builds de debug, comme ci-dessus. Leurs données sont réelles mais masquées tant que vous n’activez pas Inclure
les appareils de test dans Entonnoir et Parcours. Plus d’informations dans Tests.
Confidentialité
- Pas d’IDFA, pas de demande App Tracking Transparency, pas de fingerprinting.
- Le manifeste de confidentialité inclus déclare interactions avec le produit (vos événements) et historique d’achats (les achats que vous remontez), utilisés pour l’analyse, non liés à l’identité, et aucun suivi. Utilisez les mêmes réponses pour l’étiquette de confidentialité de votre App Store.
- Un identifiant d’installation aléatoire, la version de l’app, la version de l’OS, la version du SDK, téléphone ou tablette, la langue. Le pays vient de la périphérie du réseau. Les adresses IP ne sont jamais stockées.
- Ne mettez jamais de noms, d’e-mails ou d’autres données personnelles dans les propriétés des événements.
Dépannage
- Rien dans le tableau de bord ? Activez Inclure les appareils de test : les builds de debug avec
debug: truesont masqués par défaut. - Toujours rien ? Configurez avec
UnolinkOptions(logLevel: .debug, debug: true)et cherchez[Unolink]dans la console Xcode. Une clé erronée ou révoquée est consignée comme erreur. - Certaines installations iPhone n’affichent aucun lien ? C’est normal : toutes les installations iPhone ne peuvent pas être associées à un clic, et celles-ci sont affichées sur leur propre ligne. Voir Deep links sur iPhone.
Plus d’informations dans Dépannage.