Guide complet d'installation et de taggage pour le SDK iOS Eulerian Analytics.
Si vous n'avez pas encore CocoaPods, installez-le :
sudo gem install cocoapods
Si votre projet n'a pas encore de Podfile, initialisez-en un à la racine du projet :
Ajoutez la dépendance dans votre Podfile :
Puis exécutez :
Ouvrez ensuite votre projet via le fichier .xcworkspace généré par CocoaPods (et non le .xcodeproj).
Dans Xcode, , entrez l'URL du dépôt GitHub Eulerian iOS. Ou ajoutez directement dans Package.swift :
.package(url: "https://github.com/EulerianTechnologies/eulerian-sdk-ios", from: "1.5.0")
iOS 9.0+ (CocoaPods) / iOS 11.0+ (SPM) · tvOS 9.0+
Initialisez le SDK une seule fois dans application(_:didFinishLaunchingWithOptions:). Le SDK est un singleton — un second appel à initWithHost est ignoré.
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
EAnalytics.initWithHost("example.demo.com", andWithDebugLogs: false)
#import <EAnalytics/EAnalytics.h>
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[EAnalytics initWithHost:@"example.demo.com" andWithDebugLogs:NO];
Le second paramètre active (true) ou désactive (false) les logs de debug dans la console Xcode.
la valeur à passer est fournie par votre équipe Eulerian. Elle ressemble à example.demo.com — ne pas inclure https:// ni /. Le SDK refuse les hôtes contenant .eulerian.com.
une application native n'a pas d'URL. Le SDK utilise automatiquement le nom de l'application (ea-appname) comme identifiant interne et le sous-domaine passé à initWithHost pour attribuer le trafic au bon site dans l'interface Eulerian.
Si plusieurs applications partagent le même sous-domaine de tracking, utilisez le paramètre from via setEulerianWithValue(_:forKey:) pour les distinguer.
le SDK génère et persiste automatiquement un identifiant unique par installation (euidl). Il est stocké dans NSUserDefaults et survit aux mises à jour de l'app. Accessible via EAnalytics.euidl().
si le device n'a pas de connexion au moment de l'appel à track, le tag est sérialisé localement et renvoyé automatiquement au prochain appel track ou au prochain lancement de l'application. Le timestamp réel de l'interaction est conservé (ereplay-time).
path Il n'est jamais récupéré automatiquement — contrairement au web où l'URL identifie la page. Utilisez une convention hiérarchique avec | comme séparateur, par exemple "home|accueil", "catalogue|chaussures|homme", "tunnel|paiement|confirmation". La valeur est libre mais doit être stable et significative pour le reporting.
setEulerianWithValue(_:forKey:) : disponible sur tous les tags, elle permet d'ajouter n'importe quel paramètre personnalisé non couvert par les méthodes dédiées. Exemple : setEulerianWithValue("mensuel", forKey: "abonnement").
À utiliser sur toutes les pages qui ne sont pas des fiches produit, panier, commande ou devis (y compris la homepage et les étapes intermédiaires du tunnel). Remonte le trafic site-centric, les pages vues, les visites et les sources naturelles.
initWithPath(_ path: String) — nom de la page setEulerianWithUid(_ value: String) — ID interne de l'utilisateur connecté ; consolide l'historique multi-devicesetEulerianWithEmail(_ value: String) — email de l'utilisateursetEulerianWithProfile(_ value: String) — profil de l'utilisateur (ex. visitor, buyer, looker)setEulerianWithPageGroup(_ value: String) — groupe de pages pour le reportingsetEulerianWithValue(_ value: Any, forKey key: String) — paramètre personnalisé libresetEulerianWithCFlag(_ value: EAOSiteCentricCFlag) — attache un ou plusieurs context flags (voir Context Flag )
let props = EAProperties(path: "home|accueil")
props.setEulerianWithUid("123asd")
props.setEulerianWithEmail("test@test.fr")
props.setEulerianWithProfile("visitor")
props.setEulerianWithPageGroup("MY-PAGEGROUP")
props.setEulerianWithValue("value", forKey: "KEY-CUSTOM-PARAM")
EAProperties *props = [[EAProperties alloc] initWithPath:@"home|accueil"];
[props setEulerianWithUid:@"123asd"];
[props setEulerianWithEmail:@"test@test.fr"];
[props setEulerianWithProfile:@"visitor"];
[props setEulerianWithPageGroup:@"MY-PAGEGROUP"];
[props setEulerianWithValue:@"value" forKey:@"KEY-CUSTOM-PARAM"];
[EAnalytics track:props];
Suit les pages vues produit et alimente le rapport « Acquisition & Performance produit ». Un tag est considéré comme page produit quand il contient produit et aucun des paramètres scart, estimate, ref, amount.
initWithPath(_ path: String) — nom de la page setEulerianWithProducts(_ products: [EAOProduct]) — tableau contenant le produit setEulerianWithUid(_ value: String) — ID interne de l'utilisateursetEulerianWithEmail(_ value: String) — email de l'utilisateursetEulerianWithProfile(_ value: String) — profil de l'utilisateursetEulerianWithPageGroup(_ value: String) — groupe de pagessetEulerianWithValue(_ value: Any, forKey key: String) — paramètre personnalisé libre
EAOProduct
initWithRef(_ ref: String) — référence produit setEulerianWithName(_ value: String) — nom lisible du produit pour le reportingsetEulerianWithGroup(_ value: String) — groupe de marge (A ou B)setEulerianWithParams(_ value: EAOParams) — catégories produit (ex. prdparam-category, prdparam-brand)
EAOParams
setEulerianWithStringValue(_ value: String, forKey key: String) — catégorie produit ; la clé correspond au suffixe après prdparam-setEulerianWithIntValue(_ value: Int32, forKey key: String) — valeur entière
params.setEulerianWithStringValue("clothes", forKey: "category")
params.setEulerianWithStringValue("nike", forKey: "brand")
let product = EAOProduct(ref: "ref-product")
product.setEulerianWithName("name-product")
product.setEulerianWithGroup("A")
product.setEulerianWithParams(params)
let page = EAProducts(path: "produit|fiche")
page.setEulerianWithUid("123asd")
page.setEulerianWithEmail("test@test.fr")
page.setEulerianWithProfile("looker")
page.setEulerianWithProducts([product])
EAOParams *params = [[EAOParams alloc] init];
[params setEulerianWithStringValue:@"clothes" forKey:@"category"];
[params setEulerianWithStringValue:@"nike" forKey:@"brand"];
EAOProduct *product = [[EAOProduct alloc] initWithRef:@"ref-product"];
[product setEulerianWithName:@"name-product"];
[product setEulerianWithGroup:@"A"];
[product setEulerianWithParams:params];
EAProducts *page = [[EAProducts alloc] initWithPath:@"produit|fiche"];
[page setEulerianWithUid:@"123asd"];
[page setEulerianWithEmail:@"test@test.fr"];
[page setEulerianWithProfile:@"looker"];
[page setEulerianWithProducts:@[product]];
Envoie les N premières références produit affichées sur une page de résultats ou de catégorie. Un tag est considéré comme page catégorie quand il contient produit et aucun des paramètres scart, estimate, ref, amount.
Utilisez la même classe EAProducts, en passant un tableau avec plusieurs produits.
let product1 = EAOProduct(ref: "ref-product1")
let product2 = EAOProduct(ref: "ref-product2")
let product3 = EAOProduct(ref: "ref-product3")
let page = EAProducts(path: "categorie|chaussures")
page.setEulerianWithUid("123asd")
page.setEulerianWithEmail("test@test.fr")
page.setEulerianWithPageGroup("my-pagegroup")
page.setEulerianWithProducts([product1, product2, product3])
EAOProduct *product1 = [[EAOProduct alloc] initWithRef:@"ref-product1"];
EAOProduct *product2 = [[EAOProduct alloc] initWithRef:@"ref-product2"];
EAOProduct *product3 = [[EAOProduct alloc] initWithRef:@"ref-product3"];
EAProducts *page = [[EAProducts alloc] initWithPath:@"categorie|chaussures"];
[page setEulerianWithUid:@"123asd"];
[page setEulerianWithEmail:@"test@test.fr"];
[page setEulerianWithPageGroup:@"my-pagegroup"];
[page setEulerianWithProducts:@[product1, product2, product3]];
Suit les requêtes du moteur de recherche interne, le nombre de résultats et les paramètres de recherche. Un tag est considéré comme page moteur quand il contient isearchengine. Non exclusif : peut être combiné avec un produit sur le même tag.
initWithPath(_ path: String, withName name: String) — nom de page + nom du moteur setEulerianWithResults(_ value: Int32) — nombre de résultats retournéssetEulerianWithParams(_ value: EAOParams) — paramètres de recherche (couples clé/valeur correspondant à isearchkey/isearchdata)setEulerianWithUid(_ value: String) — ID interne de l'utilisateursetEulerianWithValue(_ value: Any, forKey key: String) — paramètre personnalisé libre
let searchParams = EAOParams()
searchParams.setEulerianWithStringValue("veste", forKey: "motcle")
searchParams.setEulerianWithStringValue("100.00", forKey: "montant_min")
searchParams.setEulerianWithStringValue("400.00", forKey: "montant_max")
let page = EASearch(path: "moteur_interne|veste", withName: "moteur_interne")
page.setEulerianWithUid("34678")
page.setEulerianWithResults(150)
page.setEulerianWithParams(searchParams)
EAOParams *searchParams = [[EAOParams alloc] init];
[searchParams setEulerianWithStringValue:@"veste" forKey:@"motcle"];
[searchParams setEulerianWithStringValue:@"100.00" forKey:@"montant_min"];
[searchParams setEulerianWithStringValue:@"400.00" forKey:@"montant_max"];
EASearch *page = [[EASearch alloc] initWithPath:@"moteur_interne|veste" withName:@"moteur_interne"];
[page setEulerianWithUid:@"34678"];
[page setEulerianWithResults:150];
[page setEulerianWithParams:searchParams];
Signalez une page d'erreur 404 en ajoutant setEulerianWithValue("1", forKey: "error") à un tag EAProperties. Alimente le rapport « Pages en erreur ».
let props = EAProperties(path: "erreur|404")
props.setEulerianWithValue("1", forKey: "error")
EAProperties *props = [[EAProperties alloc] initWithPath:@"erreur|404"];
[props setEulerianWithValue:@"1" forKey:@"error"];
[EAnalytics track:props];
Suit les devis et les produits associés. Les devis sont dédoublonnés par référence : un second appel avec la même référence est ignoré.
initWithPath(_ path: String, withRef ref: String) — nom de page + référence unique du devis setEulerianWithAmount(_ value: Double) — montant total TTC du devis (décimales séparées par un point)setEulerianWithType(_ value: String) — type de devis selon votre propre référentielsetEulerianWithCurrency(_ value: String) — devise si différente de celle configurée dans l'interfaceaddEulerian(_ product: EAOProduct, amount: Double, quantity: Int32) — ajoute un produit avec son montant unitaire et sa quantitésetEulerianWithUid(_ value: String) — ID interne de l'utilisateursetEulerianWithEmail(_ value: String) — email de l'utilisateursetEulerianWithValue(_ value: Any, forKey key: String) — paramètre personnalisé libre
let product = EAOProduct(ref: "505")
let page = EAEstimate(path: "credit|devis", withRef: "C4536567")
page.setEulerianWithUid("123asd")
page.setEulerianWithEmail("test@test.fr")
page.setEulerianWithAmount(5000.00)
page.setEulerianWithType("credit_48mois")
page.setEulerianWithCurrency("EUR")
page.setEulerianWithValue("custom-value", forKey: "custom-param-key")
page.addEulerian(product, amount: 5000.00, quantity: 1)
EAOProduct *product = [[EAOProduct alloc] initWithRef:@"505"];
EAEstimate *page = [[EAEstimate alloc] initWithPath:@"credit|devis" withRef:@"C4536567"];
[page setEulerianWithUid:@"123asd"];
[page setEulerianWithEmail:@"test@test.fr"];
[page setEulerianWithAmount:5000.00];
[page setEulerianWithType:@"credit_48mois"];
[page setEulerianWithCurrency:@"EUR"];
[page setEulerianWithValue:@"custom-value" forKey:@"custom-param-key"];
[page addEulerian:product amount:5000.00 quantity:1];
Suit les paniers commencés et permet le calcul des taux de conversion et d'abandon. Un tag est considéré comme page panier quand il contient le paramètre scart, défini automatiquement par la classe EACart. Durée de vie d'un panier : 30 minutes glissantes.
initWithPath(_ path: String) — nom de la page setEulerianWithCumul(_ value: Bool) — false : les produits du tag représentent l'intégralité du panier (snapshot) ; true : les produits s'accumulent à chaque appel successifaddEulerian(_ product: EAOProduct, amount: Double, quantity: Int32) — ajoute un produit avec son montant unitaire et sa quantitésetEulerianWithUid(_ value: String) — ID interne de l'utilisateursetEulerianWithEmail(_ value: String) — email de l'utilisateursetEulerianWithProfile(_ value: String) — profil de l'utilisateursetEulerianWithPageGroup(_ value: String) — groupe de pagessetEulerianWithValue(_ value: Any, forKey key: String) — paramètre personnalisé libre
params.setEulerianWithStringValue("T-Shirt", forKey: "category")
params.setEulerianWithStringValue("Nike", forKey: "brand")
let product = EAOProduct(ref: "product-123")
product.setEulerianWithName("product-name")
product.setEulerianWithParams(params)
let page = EACart(path: "panier")
page.setEulerianWithUid("123asd")
page.setEulerianWithEmail("test@test.fr")
page.setEulerianWithProfile("shopper")
page.setEulerianWithPageGroup("my-page-group")
page.setEulerianWithCumul(false)
page.addEulerian(product, amount: 50.30, quantity: 2)
EAOParams *params = [[EAOParams alloc] init];
[params setEulerianWithStringValue:@"T-Shirt" forKey:@"category"];
[params setEulerianWithStringValue:@"Nike" forKey:@"brand"];
EAOProduct *product = [[EAOProduct alloc] initWithRef:@"product-123"];
[product setEulerianWithName:@"product-name"];
[product setEulerianWithParams:params];
EACart *page = [[EACart alloc] initWithPath:@"panier"];
[page setEulerianWithUid:@"123asd"];
[page setEulerianWithEmail:@"test@test.fr"];
[page setEulerianWithProfile:@"shopper"];
[page setEulerianWithPageGroup:@"my-page-group"];
[page setEulerianWithCumul:NO];
[page addEulerian:product amount:50.30 quantity:2];
Suit les conversions et le ROI. Les commandes sont dédoublonnées par référence. Implémentez ce tag le plus tôt possible dans le tunnel de paiement pour ne pas le manquer si l'utilisateur ne revient pas sur l'app après la plateforme de paiement.
initWithPath(_ path: String, withRef ref: String) — nom de page + référence unique de la commande setEulerianWithAmount(_ value: Double) — montant total TTC hors frais de port setEulerianWithPayment(_ value: String) — moyen de paiement utilisé (ex. credit card, paypal)setEulerianWithType(_ value: String) — type de vente selon votre propre référentielsetEulerianWithCurrency(_ value: String) — devise si différente de celle configurée dans l'interfacesetEulerianWithNewCustomer(_ value: Bool) — true : nouvel acheteur ; false : client fidèlesetEulerianWithEstimateRef(_ value: String) — référence du devis associé à cette commande (optionnel)addEulerian(_ product: EAOProduct, amount: Double, quantity: Int32) — ajoute un produit avec son montant unitaire et sa quantitésetEulerianWithUid(_ value: String) — ID interne de l'utilisateursetEulerianWithEmail(_ value: String) — email de l'utilisateursetEulerianWithProfile(_ value: String) — profil de l'utilisateursetEulerianWithValue(_ value: Any, forKey key: String) — paramètre personnalisé libre
params.setEulerianWithStringValue("T-Shirt", forKey: "category")
params.setEulerianWithStringValue("Nike", forKey: "brand")
let product = EAOProduct(ref: "product-123")
product.setEulerianWithName("product-name")
product.setEulerianWithParams(params)
let page = EAOrder(path: "tunnel|confirmation", withRef: "F654335671")
page.setEulerianWithUid("123asd")
page.setEulerianWithEmail("test@test.fr")
page.setEulerianWithProfile("buyer")
page.setEulerianWithNewCustomer(true)
page.setEulerianWithAmount(50.30)
page.setEulerianWithType("online")
page.setEulerianWithPayment("credit card")
page.setEulerianWithCurrency("EUR")
page.setEulerianWithEstimateRef("asd123qwe")
page.setEulerianWithValue("custom-value", forKey: "custom-param-key")
page.addEulerian(product, amount: 25.15, quantity: 2)
EAOParams *params = [[EAOParams alloc] init];
[params setEulerianWithStringValue:@"T-Shirt" forKey:@"category"];
[params setEulerianWithStringValue:@"Nike" forKey:@"brand"];
EAOProduct *product = [[EAOProduct alloc] initWithRef:@"product-123"];
[product setEulerianWithName:@"product-name"];
[product setEulerianWithParams:params];
EAOrder *page = [[EAOrder alloc] initWithPath:@"tunnel|confirmation" withRef:@"F654335671"];
[page setEulerianWithUid:@"123asd"];
[page setEulerianWithEmail:@"test@test.fr"];
[page setEulerianWithProfile:@"buyer"];
[page setEulerianWithNewCustomer:YES];
[page setEulerianWithAmount:50.30];
[page setEulerianWithType:@"online"];
[page setEulerianWithPayment:@"credit card"];
[page setEulerianWithCurrency:@"EUR"];
[page setEulerianWithEstimateRef:@"asd123qwe"];
[page setEulerianWithValue:@"custom-value" forKey:@"custom-param-key"];
[page addEulerian:product amount:25.15 quantity:2];
Suit les impressions et clics sur les blocs de marchandisage (listes de recommandation, bannières, etc.). Envoyés en sur /tpview/ et /tpclick/ — contrairement aux autres tags envoyés en POST. Supporte le même mécanisme de retry offline que le reste du SDK.
EATpView
initWithPath(_ path: String) — page de référence setSiteName(_ value: String) — nom du site marchandsetCampaign(_ value: String) — nom de la campagnesetPlacement(_ value: String) — emplacement du bloc dans la pageaddProductWithRef(_ ref: String, position: NSNumber) — référence produit et sa position dans le bloc ; répétez pour chaque produit affichésetUrl(_ value: String) — URL de contextesetPublisher(_ value: String) — éditeur (optionnel)setMedia(_ value: String) — type de média (optionnel)setCategory(_ value: String) — catégorie du bloc (optionnel)
EATpClick
initWithPath(_ path: String) — page de référence setSiteName(_ value: String) — nom du site marchandsetCampaign(_ value: String) — nom de la campagnesetPlacement(_ value: String) — emplacement du bloc dans la pagesetProductWithRef(_ ref: String, position: Int) — référence et position du produit cliqué setProductWithRef(_ ref: String, position: Int, totalProducts: NSNumber) — variante avec le nombre total de produits dans le blocsetUrl(_ value: String) — URL de contextesetPublisher(_ value: String) — éditeur (optionnel)setMedia(_ value: String) — type de média (optionnel)setCategory(_ value: String) — catégorie du bloc (optionnel)
let view = EATpView(path: "homepage")
view.setSiteName("my-site")
view.setCampaign("summer_sale")
view.setPlacement("banner_top")
view.addProductWithRef("PROD_001", position: NSNumber(value: 0))
view.addProductWithRef("PROD_002", position: NSNumber(value: 1))
view.setUrl("https://www.example.com")
let click = EATpClick(path: "homepage")
click.setSiteName("my-site")
click.setCampaign("summer_sale")
click.setPlacement("banner_top")
click.setProductWithRef("PROD_001", position: 0)
click.setUrl("https://www.example.com")
EATpView *view = [[EATpView alloc] initWithPath:@"homepage"];
[view setSiteName:@"my-site"];
[view setCampaign:@"summer_sale"];
[view setPlacement:@"banner_top"];
[view addProductWithRef:@"PROD_001" position:@(0)];
[view addProductWithRef:@"PROD_002" position:@(1)];
[view setUrl:@"https://www.example.com"];
EATpClick *click = [[EATpClick alloc] initWithPath:@"homepage"];
[click setSiteName:@"my-site"];
[click setCampaign:@"summer_sale"];
[click setPlacement:@"banner_top"];
[click setProductWithRef:@"PROD_001" position:2];
[click setUrl:@"https://www.example.com"];
[EAnalytics track:click];
Les actions permettent de tracker des interactions utilisateur (tunnel de souscription, questionnaire, navigation inter-sections, etc.) en dehors des pages vues classiques. Une action peut être attachée à n'importe quel tag via setEulerianWithAction: (remplace toute action précédente) ou addEulerianWithAction: (accumule plusieurs actions sur le même tag).
Pour envoyer une action sans page vue associée, appelez setEulerianStandalone() sur le tag — le hit ne comptera pas comme page vue dans Eulerian.
EAOAction
setEulerianWithName(_ value: String) — nom de l'action setEulerianWithMode(_ value: String) — sens de l'action : "in" (entrée) ou "out" (sortie)setEulerianWithLabel(_ value: String) — label(s) de l'action, séparés par des virgulessetEulerianWithRef(_ value: String) — référence identifiant l'action dans vos systèmes (optionnel)setEulerianWithParams(_ value: EAOParams) — paramètres supplémentaires clé/valeur
let action1 = EAOAction()
action1.setEulerianWithName("souscription-etape1")
action1.setEulerianWithMode("in")
action1.setEulerianWithLabel("offre-premium")
let action2 = EAOAction()
action2.setEulerianWithName("souscription-etape1")
action2.setEulerianWithMode("out")
action2.setEulerianWithLabel("abandon")
let props = EAProperties(path: "souscription|etape1")
props.setEulerianWithUid("123asd")
props.addEulerianWithAction(action1)
props.addEulerianWithAction(action2)
action.setEulerianWithName("clic-cta")
action.setEulerianWithMode("in")
action.setEulerianWithLabel("hero-banner")
params.setEulerianWithStringValue("martinique", forKey: "provenance")
action.setEulerianWithParams(params)
let props = EAProperties(path: "homepage")
props.setEulerianStandalone()
props.setEulerianWithUid("123asd")
props.addEulerianWithAction(action)
EAOAction *action = [[EAOAction alloc] init];
[action setEulerianWithName:@"clic-cta"];
[action setEulerianWithMode:@"in"];
[action setEulerianWithLabel:@"hero-banner"];
EAOParams *params = [[EAOParams alloc] init];
[params setEulerianWithStringValue:@"martinique" forKey:@"provenance"];
[action setEulerianWithParams:params];
EAProperties *props = [[EAProperties alloc] initWithPath:@"homepage"];
[props setEulerianStandalone];
[props setEulerianWithUid:@"123asd"];
[props addEulerianWithAction:action];
[EAnalytics track:props];
Associez un ou plusieurs context flags à n'importe quel tag pour enrichir vos rapports de dimensions contextuelles. Chaque flag accepte plusieurs valeurs.
EAOSiteCentricCFlag
setEulerianWithValues(_ values: [String], forKey key: String) — définit une dimension contextuelle avec une ou plusieurs valeurs
setEulerianWithCFlag(_ value: EAOSiteCentricCFlag) — disponible sur tous les types de tags
let cflag = EAOSiteCentricCFlag()
cflag.setEulerianWithValues(["rolandgarros", "wimbledon"], forKey: "categorie_1")
cflag.setEulerianWithValues(["tennis"], forKey: "categorie_2")
cflag.setEulerianWithValues(["usopen"], forKey: "categorie_3")
let props = EAProperties(path: "home|accueil")
props.setEulerianWithUid("123asd")
props.setEulerianWithEmail("email@test.fr")
props.setEulerianWithCFlag(cflag)
EAOSiteCentricCFlag *cflag = [[EAOSiteCentricCFlag alloc] init];
[cflag setEulerianWithValues:@[@"rolandgarros", @"wimbledon"] forKey:@"categorie_1"];
[cflag setEulerianWithValues:@[@"tennis"] forKey:@"categorie_2"];
[cflag setEulerianWithValues:@[@"usopen"] forKey:@"categorie_3"];
EAProperties *props = [[EAProperties alloc] initWithPath:@"home|accueil"];
[props setEulerianWithUid:@"123asd"];
[props setEulerianWithEmail:@"email@test.fr"];
[props setEulerianWithCFlag:cflag];
[EAnalytics track:props];
Pour les applications hybrides ouvrant une WebView, passez l'identifiant interne du SDK dans l'URL d'ouverture pour assurer la continuité du tracking entre l'app native et la session web. Ajoutez aussi le paramètre edev pour qualifier le trafic comme natif.
let euidl = EAnalytics.euidl()
var components = URLComponents(string: "https://www.example.com/landing")!
components.queryItems = [
URLQueryItem(name: "ea-euidl-bypass", value: euidl),
URLQueryItem(name: "edev", value: "AppNativeIOSphone")
let webViewURL = components.url!
webView.load(URLRequest(url: webViewURL))
NSString *euidl = [EAnalytics euidl];
NSURLComponents *components = [NSURLComponents componentsWithString:@"https://www.example.com/landing"];
components.queryItems = @[
[NSURLQueryItem queryItemWithName:@"ea-euidl-bypass" value:euidl],
[NSURLQueryItem queryItemWithName:@"edev" value:@"AppNativeIOSphone"]
[webView loadRequest:[NSURLRequest requestWithURL:components.URL]];
Valeurs acceptées pour edev :
ea-euidl-bypass doit être présent à dans la WebView, sinon le lien entre navigation app et web est perdu.
Suivez les téléchargements et mises à jour en incluant ces paramètres dans le premier tag envoyé au lancement de l'application.
Identifiant app — — collecté automatiquement par le SDK
Version courante — collectée automatiquement par le SDK
À passer manuellement si l'app existait avant l'intégration Eulerian
Ces paramètres sont collectés par le SDK à chaque hit. Vous n'avez rien à faire sauf passer ea-appinstalled lors d'une migration.
- La métrique est incrémentée quand
ea-appname est vu pour la première fois pour cet utilisateur (sans ea-appinstalled). - La métrique est incrémentée quand
ea-appname est inchangé mais ea-appversion a une nouvelle valeur par rapport au dernier lancement.
let props = EAProperties(path: "home|accueil")
props.setEulerianWithValue("1", forKey: "ea-appinstalled")
Les deux modes ci-dessous sont . Choisissez-en un et ne les utilisez jamais ensemble dans la même application.
Transmettez la TCString générée par votre CMP une seule fois par visiteur, au moment où l'utilisateur exprime son opt-in ou opt-out.
let props = EAProperties(path: "univers|rubrique|page")
props.setEulerianWithUid("5434742")
props.setEulerianWithValue("mensuel", forKey: "abonnement")
props.setEulerianWithValue("EADURF214345", forKey: "gdpr_consent")
Passez les IDs Eulerian des catégories , séparés par -. Envoyez - seul si l'utilisateur accepte toutes les catégories.
let props = EAProperties(path: "univers|rubrique|page")
props.setEulerianWithUid("5434742")
props.setEulerianWithValue("mensuel", forKey: "abonnement")
props.setEulerianWithValue("1-10", forKey: "pmcat")
Exemple de mapping des catégories :
Exemple : l'utilisateur refuse analytics + publicité → pmcat = 1-10
Fournissez cette URL sur votre page « Vie privée / RGPD » ou dans votre CMP pour un retrait total inconditionnel :
https://<votre-domaine-de-collecte>/optout.html?url=<votre-domaine>
Le SDK inclut un fichier PrivacyInfo.xcprivacy déclarant les données collectées et les API système utilisées. Ce fichier est requis par l'App Store depuis le printemps 2024 pour les SDKs tiers.
NSUserDefaults (reason: CA92.1 — stockage de la queue offline).
Si votre application active le suivi publicitaire (IDFA), ajoutez votre domaine de collecte dans Info.plist :
<key>NSPrivacyTrackingDomains</key>
<string>example.demo.com</string>
Le SDK collecte automatiquement l'IDFA si le framework AdSupport est lié que l'utilisateur a accordé l'autorisation via ATTrackingManager. Aucune configuration supplémentaire n'est requise côté SDK.