Guide complet d'installation et de taggage pour le SDK Android Eulerian Analytics.
Ajoutez le dépôt JitPack dans votre fichier build.gradle racine :
maven { url 'https://jitpack.io' }
Ajoutez la dépendance dans le build.gradle de votre module :
implementation 'com.github.EulerianTechnologies:eanalytics-android:1.9.0'
Ajoutez les permissions requises dans votre AndroidManifest.xml :
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Pour suivre les installations depuis Google Play, ajoutez également ce receiver :
android:name="com.eulerian.android.sdk.InstallReferrerReceiver"
<action android:name="com.android.vending.INSTALL_REFERRER" />
Initialisez le SDK dans votre Application.onCreate(). Déclarez d'abord votre sous-classe Application dans le manifest.
<application android:name=".DemoApp">
public class DemoApp extends Application {
EAnalytics.init(this, "example.demo.com", false);
Le troisième paramètre active (true) ou désactive (false) les logs de debug.
contrairement au tracking web où l'URL identifie le site, une application native n'a pas d'URL. Le SDK utilise automatiquement le de l'application (ex. com.mycompany.myapp) comme URL interne envoyée à Eulerian (paramètres ea-appname et url). Eulerian se base sur le sous-domaine de tracking passé à init() pour attribuer le trafic au bon site dans son interface.
Si plusieurs applications partagent le même sous-domaine de tracking, utilisez le paramètre from dans les marqueurs pour les distinguer.
path (nom de page) est sur chaque tag. Contrairement au web, il n'est jamais récupéré automatiquement depuis l'URL.
set(String key, String value) 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 : .set("abonnement", "mensuel").
À utiliser sur toutes les pages qui ne sont pas des fiches produit, panier, commande ou devis (y compris la homepage et les étapes du tunnel entre panier et confirmation de commande). Remonte le trafic site-centric, les pages vues, les visites et les sources naturelles.
Builder(String path) — nom de la page setUID(String uid) — ID interne de l'utilisateur connecté ; consolide l'historique multi-device et permet de réconcilier un clic avec un téléchargementsetEmail(String email) — email de l'utilisateursetProfile(String profile) — profil de l'utilisateur (ex. visitor, buyer, looker)setPageGroup(String group) — groupe de pages pour le reportingset(String key, String value) — paramètre personnalisé libresetCFlag(SiteCentricCFlag flag) — attache un ou plusieurs context flags au tag (voir Context Flag )
EAProperties genericTag = new EAProperties.Builder("NOM_PAGE")
.setPageGroup("MY-PAGEGROUP")
.setEmail("test@test.fr")
.set("KEY-CUSTOM-PARAM", "VALUE")
EAnalytics.getInstance().track(genericTag);
Suit les pages vues produit et alimente le rapport « Acquisition & Performance produit ». Un marqueur est considéré comme page produit quand il contient référence produit et aucun des paramètres scart, estimate, ref, amount.
Builder(String path) — nom de la page setUID(String uid) — ID interne de l'utilisateur connectésetEmail(String email) — email de l'utilisateursetProfile(String profile) — profil de l'utilisateursetPageGroup(String group) — groupe de pages pour le reportingaddProduct(Product product) — ajoute la référence produit set(String key, String value) — paramètre personnalisé libre
Product
Product.Builder(String ref) — référence produit setName(String name) — nom lisible du produit pour le reportingsetGroup(String group) — groupe du produit (A ou B)setParams(Params params) — catégories produit (ex. prdparam-category, prdparam-brand)
Params
addParam(String key, String value) — ajoute une catégorie produit ; la clé correspond au suffixe après prdparam-
Params productParams = new Params.Builder()
.addParam("category", "clothes")
.addParam("brand", "nike")
Product product1 = new Product.Builder("ref-product")
.setGroup("group-product")
.setParams(productParams)
EAProducts productPage = new EAProducts.Builder("NOM_PAGE")
.setPageGroup("my-pagegroup")
.setEmail("test@test.fr")
EAnalytics.getInstance().track(productPage);
Envoie les N premières références produit affichées sur une page de résultats/catégorie aux partenaires pour le retargeting. Un marqueur est considéré comme page catégorie quand il contient référence produit et aucun des paramètres scart, estimate, ref, amount.
Builder(String path) — nom de la page setUID(String uid) — ID interne de l'utilisateur connectésetEmail(String email) — email de l'utilisateursetPageGroup(String group) — groupe de pages pour le reportingaddProduct(Product product) — ajoute une référence produit ; répétez pour chaque produit affichéset(String key, String value) — paramètre personnalisé libre
Product product1 = new Product.Builder("ref-product1").build();
Product product2 = new Product.Builder("ref-product2").build();
Product product3 = new Product.Builder("ref-product3").build();
EAProducts resultPage = new EAProducts.Builder("nom-de-page")
.setPageGroup("my-pagegroup")
.setEmail("test@test.fr")
EAnalytics.getInstance().track(resultPage);
Suit les requêtes du moteur de recherche interne, le nombre de résultats et les paramètres de recherche personnalisés. Un marqueur est considéré comme page moteur quand il contient isearchengine. Non exclusif : peut être combiné avec une référence produit sur le même tag.
Builder(String path, String engineName) — nom de page + nom du moteur de recherche setResults(int results) — nombre de résultats retournés par la recherchesetParams(Params params) — paramètres de recherche supplémentaires (couples clé/valeur correspondant à isearchkey/isearchdata)setUID(String uid) — ID interne de l'utilisateur connectéset(String key, String value) — paramètre personnalisé libre
Params searchParams = new Params.Builder()
.addParam("motcle", "veste")
.addParam("montant_min", "100.00")
.addParam("montant_max", "400.00")
EASearch searchPage = new EASearch.Builder("Moteur_interne|veste", "moteur_interne")
EAnalytics.getInstance().track(searchPage);
Signalez une page d'erreur 404 en ajoutant set("error", "1") à n'importe quel tag. Alimente le rapport « Pages en erreur ».
Builder(String path) — nom de la page set("error", "1") — flag la page comme erreur 404
EAProperties errorTag = new EAProperties.Builder("erreur|404")
EAnalytics.getInstance().track(errorTag);
Suit les devis et les produits associés. Un marqueur est considéré comme page de devis quand il contient les paramètres ref et estimate — tous deux définis automatiquement par le constructeur. Les devis sont dédoublonnés par référence : un second appel avec la même référence est ignoré.
Builder(String path, String ref) — nom de page + référence unique du devis setAmount(double amount) — montant total TTC du devis (décimales séparées par un point)setType(String type) — type de devis selon votre propre référentielsetCurrency(String currency) — devise si différente de celle configurée dans l'interfaceaddProduct(Product product, double amount, int quantity) — ajoute un produit avec son montant unitaire et sa quantité.setUID(String uid) — ID interne de l'utilisateur connectésetEmail(String email) — email de l'utilisateurset(String key, String value) — paramètre personnalisé libre
Product product1 = new Product.Builder("505").build();
EAEstimate estimatePage = new EAEstimate.Builder("Credit|devis", "C4536567")
.setPageGroup("my-pagegroup")
.setEmail("test@test.fr")
.setType("Credit_48mois")
.set("custom-param-KEY", "custom-param-value")
.addProduct(product1, 5000.00, 1)
EAnalytics.getInstance().track(estimatePage);
Suit les paniers commencés et permet le calcul des taux de conversion et d'abandon. Un marqueur est considéré comme page panier quand il contient le paramètre scart — défini automatiquement par le constructeur. Durée de vie d'un panier : 30 minutes glissantes.
Builder(String path) — nom de la page setCartCumul(boolean cumul) — false : les produits du tag représentent l'intégralité du panier (snapshot) ; true : les produits s'accumulent à chaque appel successifaddProduct(Product product, double amount, int quantity) — ajoute un produit avec son montant unitaire et sa quantitésetUID(String uid) — ID interne de l'utilisateur connectésetEmail(String email) — email de l'utilisateursetProfile(String profile) — profil de l'utilisateursetPageGroup(String group) — groupe de pages pour le reportingset(String key, String value) — paramètre personnalisé libre
Params productParams = new Params.Builder()
.addParam("category", "T-Shirt")
.addParam("brand", "Nike")
Product product1 = new Product.Builder("product-123")
.setParams(productParams)
EACart cartPage = new EACart.Builder("page-name")
.setPageGroup("my-page-group")
.setEmail("test@test.fr")
.addProduct(product1, 50.30, 2)
EAnalytics.getInstance().track(cartPage);
Suit les conversions et le ROI. Un marqueur est considéré comme commande quand il contient ref et amount sans scart ni estimate. 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 le site après la plateforme de paiement.
Builder(String path, String ref) — nom de page + référence unique de la commande setAmount(double amount) — montant total TTC hors frais de port setPayment(String payment) — moyen de paiement utilisé (ex. credit card, paypal)setType(String type) — type de vente selon votre propre référentielsetCurrency(String currency) — devise si différente de celle configurée dans l'interfacesetNewCustomer(boolean newCustomer) — true : nouvel acheteur ; false : client fidèlesetEstimateRef(String ref) — référence du devis associé à cette commande (optionnel)addProduct(Product product, double amount, int quantity) — ajoute un produit avec son montant unitaire et sa quantitésetUID(String uid) — ID interne de l'utilisateur connectésetEmail(String email) — email de l'utilisateursetProfile(String profile) — profil de l'utilisateurset(String key, String value) — paramètre personnalisé libre
Params productParams = new Params.Builder()
.addParam("category", "T-Shirt")
.addParam("brand", "Nike")
Product product1 = new Product.Builder("product-123")
.setParams(productParams)
EAOrder orderPage = new EAOrder.Builder("Tunnel|Confirmation", "F654335671")
.setPageGroup("my-pagegroup")
.setEmail("test@test.fr")
.setPayment("credit card")
.setEstimateRef("asd123qwe")
.set("custom-param-key", "custom-param-value")
.addProduct(product1, 25.15, 2)
EAnalytics.getInstance().track(orderPage);
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
Builder(String path) — page de référence setSiteName(String name) — nom du site marchandsetCampaign(String campaign) — nom de la campagnesetPlacement(String placement) — Emplacement du bloc dans la pageaddProduct(String ref, Integer position) — référence produit et sa position dans le bloc ; répétez pour chaque produit affichésetUrl(String url) — URL de contextesetPublisher(String publisher) — éditeur (optionnel)setMedia(String media) — type de média (optionnel)setCategory(String category) — catégorie du bloc (optionnel)
EATpClick
Builder(String path) — page de référence setSiteName(String name) — nom du site marchandsetCampaign(String campaign) — nom de la campagnesetPlacement(String placement) — emplacement du bloc dans la pagesetProduct(String ref, int position) — référence et position du produit cliqué setProduct(String ref, int position, Integer totalProducts) — variante avec le nombre total de produits dans le blocsetUrl(String url) — URL de contextesetPublisher(String publisher) — éditeur (optionnel)setMedia(String media) — type de média (optionnel)setCategory(String category) — catégorie du bloc (optionnel)
EATpView view = new EATpView.Builder("homepage")
.setCampaign("summer_sale")
.setPlacement("banner_top")
.addProduct("PROD_001", 0)
.addProduct("PROD_002", 1)
.setUrl("http://eulerian.net")
EAnalytics.getInstance().track(view);
EATpClick click = new EATpClick.Builder("homepage")
.setCampaign("summer_sale")
.setPlacement("banner_top")
.setProduct("PROD_001", 2)
.setUrl("http://eulerian.net")
EAnalytics.getInstance().track(click);
Associez un ou plusieurs context flags à n'importe quel tag pour enrichir vos rapports de dimensions contextuelles. Chaque flag accepte jusqu'à 10 valeurs.
SiteCentricCFlag
Builder() — constructeurset(String key, String... values) — définit une dimension contextuelle avec une ou plusieurs valeurs (maximum 10)
setCFlag(SiteCentricCFlag flag) — disponible sur tous les types de tags
import com.eulerian.android.sdk.SiteCentricCFlag;
EAProperties genericTag = new EAProperties.Builder("NOM_PAGE")
.setEmail("email@test.fr")
.setCFlag(new SiteCentricCFlag.Builder()
.set("categorie_1", "rolandgarros", "wimbledon")
.set("categorie_2", "tennis")
.set("categorie_3", "usopen")
EAnalytics.getInstance().track(genericTag);
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 (obligatoire pour le suivi des campagnes in-app et des notifications push).
String euidl = EAnalytics.getEuidl();
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.
Version courante de l'application
Présent si l'app existait avant l'intégration Eulerian
- 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.
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.
EAProperties consentTag = new EAProperties.Builder("|univers|rubrique|page")
.set("abonnement", "mensuel")
.set("gdpr_consent", "EADURF214345")
EAnalytics.getInstance().track(consentTag);
Passez les IDs Eulerian des catégories , séparés par -. Envoyez - seul si l'utilisateur accepte toutes les catégories.
EAProperties consentTag = new EAProperties.Builder("|univers|rubrique|page")
.set("abonnement", "mensuel")
EAnalytics.getInstance().track(consentTag);
Exemple de mappage 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>
Les dépendances suivantes sont incluses automatiquement avec le SDK :
com.google.android.gms:play-services-ads-identifier:17.0.0
com.android.installreferrer:installreferrer:2.2