Intégration du SDK AppsFlyer - Unity

  • Annonceurs
  • Développeurs

Official_unity_logo.png

Version actuelle SDK Unity :  v4.18.0
Compatible avec Android SDK v4.8.18 et iOS SDK v4.8.10

1. Aperçu

Le SDK AppsFlyer comprend une fonctionnalité d'installation d'applications mobiles et de suivi d'événements pour Android, iOS, Windows Phone et de nombreuses autres plates-formes de développement mobiles.

Vous pouvez suivre les installations, les mises à jour, les sessions ainsi que les événements post-installation (y compris les achats in-app, les niveaux de jeu, etc.) pour évaluer le ROI et le niveau d'engagement des utilisateurs.

Les applications mobiles, développées sur la plate-forme Unity, peuvent intégrer le SDK AppsFlyer une fois et suivre les applications générées par Android et iOS. Le guide suivant indique la marche à suivre pour intégrer le SDK AppsFlyer dans votre code Unity pour vos applications iOS et Android.

 Remarque

AppsFlyer prend en charge l'intégration avec la version 5 et supérieure de Unity

 Important !

Le plug-in Unity v4.16.0 ainsi que les versions supérieures prennent en charge l'API du référent d'installation Google Play. Si vous souhaitez utiliser la nouvelle API du référent, passez à la version 4.16.0 ou supérieure du plug-in.

 Astuce

  • Les chapitres 2 et 3 sont OBLIGATOIRES pour implémenter le SDK de base, c’est-à-dire l'attribution de l’installation uniquement
  • L'implémentation du chapitre Suivi des événements in-app est FORTEMENT RECOMMANDÉE
  • L'implémentation des autres fonctionnalités décrites est OPTIONNELLE, bien que certaines d’entre elles puissent vous être utiles, en fonction de la logique commerciale de votre application. Par exemple, le suivi des revenus ou l'obtention des données de conversion au premier lancement peuvent être essentiels pour le flux de votre application.

2. Démarrage rapide

2.1 Téléchargement du plug-in Unity d'Appsflyer

Vous pouvez trouver le plug-in sur Github, en cliquant sur le lien suivant : https://github.com/AppsFlyerSDK/Unity

Les instructions d'intégration pour l'utilisation du plug-in Unity d'AppsFlyer sont présentées ci-dessous.

2.2 Installation du plug-in

Voici les instructions d'installation du plug-in d'AppsFlyer :

  1. Importez le fichier AppsFlyerUnityPlugin.unitypackage dans votre projet Unity.
  2. Allez sur Actifs >> Importer Package >> Package personnalisé
  3. Sélectionnez le fichier AppsFlyerUnityPlugin.unitypackage.

2.3 Configuration obligatoire pour Android et iOS

Configuration Android


Configuration du récepteur et des permissions AF dans le fichier AndroidManifest.xml :

<!-- receiver should be inside the <application> tag -->
<receiver android:name="com.appsflyer.MultipleInstallBroadcastReceiver" android:exported="true">
        <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER" />
        </intent-filter>
</receiver>
<!-- Mandatory permission: -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />


Configuration des permissions requises

Le fichier AndroidManifest.xml comprend la permission suivante :

<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" />
<!-- Optional : -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />


Configuration du récepteur de diffusion dans le fichier AndroidManifest.xml

Les deux options suivantes sont disponibles pour mettre en place le récepteur de diffusion du référent d'installation :

Utilisation d'un récepteur de diffusion unique Utilisation d'un récepteur de diffusion multiple

Si dans le fichier AndroidManifest.xml, aucun récepteur n'écoute dans INSTALL_REFERRER, ajoutez le récepteur suivant dans la balise de l'application :

<receiver android:name="com.appsflyer.SingleInstallBroadcastReceiver" android:exported="true">
    <intent-filter>
         <action android:name="com.android.vending.INSTALL_REFERRER" />
     </intent-filter>
</receiver>

Configuration iOS


Cadres et bibliothèques associés


Après la création du projet dans Unity pour xCode, vous devez ajouter Security.Framework aux cadres et bibliothèques associés  de xCode si le cadre n’a pas été ajouté précédemment.


Apple Search Ads iOS

Ajouter ce qui suit :

AdSupport.framework
AppsFlyer collecte l'IDFA uniquement si vous incluez ce cadre. Ne pas ajouter ce cadre signifie que vous ne pouvez pas suivre Facebook, Twitter et la plupart des autres réseaux publicitaires.
iAd.framework

Ajouter ce cadre à votre projet d’application est fortement recommandé, car il est obligatoire pour le suivi d'Apple Search Ads.

3. Initialisation du SDK

Dans vos méthodes Start / Init, vous définissez la DevKey AppsFlyer et les ID application uniques utilisées par iTunes et Google Play. Notez que vous devez utiliser des chiffres uniquement, sans le préfixe « id » pour définir l'ID application iOS ici.

Ajoutez le code suivant :

Unity Plugin 4.15.1 et ultérieur Unity Plugin 4.14.3 et antérieur
void Start () {
/* Mandatory - set your AppsFlyer’s Developer key. */
AppsFlyer.setAppsFlyerKey ("YOUR_APPSFLYER_DEV_KEY");
/* For detailed logging */
/* AppsFlyer.setIsDebug (true); */
#if UNITY_IOS
   /* Mandatory - set your apple app ID
      NOTE: You should enter the number only and not the "ID" prefix */
   AppsFlyer.setAppID ("YOUR_APP_ID_HERE");
   AppsFlyer.trackAppLaunch ();
#elif UNITY_ANDROID
   /* Mandatory - set your Android package name */
   AppsFlyer.setAppID ("YOUR_ANDROID_PACKAGE_NAME_HERE");
   /* For getting the conversion data in Android, you need to add the "AppsFlyerTrackerCallbacks" listener.*/
   AppsFlyer.init ("YOUR_APPSFLYER_DEV_KEY","AppsFlyerTrackerCallbacks");
#endif
}

 Important !

  • Pour Android, AppsFlyer.init comprend l'appel à la méthode trackAppLaunch. Par conséquent, n'appelez pas la méthode trackAppLaunch dans la construction Android du plug-in Unity.
  • Dans iOS, la réponse de données de conversion est déclenchée dans la classe AppsFlyerTrackerCallbacks.cs.

4. Suivi des évènements In-App

Les évènements In-App permettent une analyse de ce qui se passe dans votre application. Il est recommandé de prendre le temps de définir les évènements que vous voulez mesurer pour vous permettre de suivre le ROI (Return On Investment) et la LTV (Lifetime Value).

Le suivi des événements in-app est réalisé en appelant trackRichEvent avec le nom de l'événement et les paramètres de valeur. Consultez la documentation Événements in-app pour plus de détails.

 Remarque

Le nom d’un évènement In-App ne doit pas dépasser 45 caractères. Les noms d’évènements dépassant 45 caractères n’apparaissent pas dans le tableau de bord, mais seulement dans les API de données brutes, Push et Pull.


Exemple de suivi d’évènement :

System.Collections.Generic.Dictionary<string, string> purchaseEvent = new   
System.Collections.Generic.Dictionary<string, string> ();
purchaseEvent.Add ("af_currency", "USD");
purchaseEvent.Add ("af_revenue", "0.99");
purchaseEvent.Add ("af_quantity", "1");
AppsFlyer.trackRichEvent ("af_purchase", purchaseEvent);

 Remarque

AppsFlyer prend en charge les caractères non anglais dans les évènements in-app ou toute autre API SDK, en commençant par le SDK Unity version 4.15.1.

5. Suivi du Deep Linking

Pour le Deep Linking, suivez les instructions selon votre système d’exploitation.

Android iOS
Ajoutez la ligne suivante à votre fichier manifeste :

<activity android:name="com.appsflyer.GetDeepLinkingActivity" android:exported="true">
 <intent-filter>
   <action android:name="android.intent.action.VIEW" />
   <category android:name="android.intent.category.DEFAULT" />
   <category android:name="android.intent.category.BROWSABLE" />
   <data android:scheme="your_scheme" />
 </intent-filter>
</activity>

6. Suivi des revenus

Utilisez le paramètre d'évènement AFEventParamRevenue pour intégrer le revenu comme élément d'un évènement in-app. Vous pouvez lui affecter n'importe quelle valeur numérique, positive comme négative.

 Remarque

AFInAppEvents.REVENUE  (équivalent à l’utilisation d’af_revenue) est le seul paramètre d’événement qui est compté sur AppsFlyer comme un revenu réel dans les données brutes et le tableau de bord. Pour plus de détails, veuillez cliquer ici.

 Exemple :

Évènement In-App de revenu
AppsFlyer.trackRichEvent(AFInAppEvents.LEVEL_ACHIEVED, new Dictionary<string, string>(){
	{AFInAppEvents.CONTENT_ID, "1234567"},
	{AFInAppEvents.CONTENT_TYPE, "category_a"},
	{AFInAppEvents.REVENUE, "1.99"},
	{AFInAppEvents.CURRENCY, "USD"}
});

 Important !

Veillez à ne PAS formater la valeur de revenu. Elle ne doit pas contenir de séparateurs sous forme de virgules, de symbole monétaire ou de texte. Un événement de revenu doit être similaire à 1234.56, par exemple.

7. Obtenir les données de conversion

AppsFlyer vous permet d’accéder aux données de conversion d'utilisateur en temps réel, directement au niveau du SDK. Ceci vous permet de personnaliser la page d’atterrissage qu'utilisateur voit à la toute première ouverture de l'application suite à une nouvelle installation d'application.

Pour charger les données de conversion d'AppsFlyer depuis ses serveurs :

  1. Ajoutez un GameObject vide
  2. Attachez-le au fichier AppsFlyerTrackerCallbacks.cs, qui est inclus dans le projet (vous devez nommer ce gameobject AppsFlyerTrackerCallbacks).
Plugin Unity Android > 4.15.1 Plugin Unity Android < 4.14.3 iOS
/*Pour obtenir les données de conversion dans Android, vous devez ajouter ce port d’écoute à la méthode init()*/
AppsFlyer.init ("VOTRE_CLÉ_DÉV","AppsFlyerTrackerCallbacks");


Dans Android, vous pouvez déplacer les méthodes d’AppsFlyerTrackerCallbacks.cs vers une autre classe et appeler cette classe dans votre port d'écoute.

Vous devez utiliser exactement les mêmes espaces-noms de méthode que ceux qui apparaissent sur AppsFlyerTrackerCallbacks.

8. Identifiants utilisateur

Obtenez le DeviceID AppsFlyer

Le DeviceID unique d'AppsFlyer est créé pour chaque nouvelle installation d’une application. Utiliser l’API suivante pour obtenir l’ID unique AppsFlyer :

public String getAppsFlyerId();


Exemple d’utilisation :

string AppsFlyerUID = AppsFlyer.getAppsFlyerId();

Définir l'ID Utilisateur-Client

Définir l’ID utilisateur tel qu'utilisé par l’application. 

Pour définir l’ID utilisateur, appelez la méthode suivante :

AppsFlyer.setCustomerUserID("someId");

 Remarque

Le customerUserID DOIT être défini avant le trackAppLaunch/init. Il est recommandé de définir votre ID Utilisateur-Client dès que possible, car il n'est associé qu'aux événements reportés après son installation. L'ID Utilisateur-Client peut également être utilisé pour compléter les intégrations avec des plate-formes d'analyse, telles que Mixpanel et Swrve.

 Important !

Pour iOS - Assurez-vous de définir l'ID utilisateur-client à chaque lancement de l'application, avant d'appeler la méthode trackAppLaunch.

Pour plus d’informations sur l’ID Utilisateur-Client,cliquez ici.

Définir l'E-mail Utilisateur

Actuellement indisponible dans Unity.

ID Google Advertising

AppsFlyer collecte automatiquement le google_advertising_id depuis la version 4.8.0 du SDK. L'obligation de collecte de l'ID Google Advertising s'applique uniquement aux versions 4.7.X et supérieures du SDK.

Numéro IMEI et ID Android

Par défaut, le numéro IMEI et l'ID Android ne sont pas collectés par le SDK si la version OS est supérieure à la version KitKat (4.4) et si l'appareil comprend les Services Google Play (sur la version Unity SDK 4.16.4 et inférieure, l'application spécifique exigeait GPS). 

Afin d'envoyer explicitement ces ID à AppsFlyer, les développeurs peuvent utiliser les API suivantes :

AppsFlyer.setAndroidIdData(string)
AppsFlyer.setImeiData(string)

Si l'application ne comprend PAS les services Google Play, le numéro IMEI ainsi que l'ID Android sont collectés par le SDK. Cependant, les applications dotées des services Google Play doivent éviter la collecte du numéro IMEI, qui contrevient à la politique Google Play.

Les développeurs peuvent refuser de collecter le numéro IMEI et de l'ID Android en utilisant les API suivantes :

AppsFlyer.setCollectAndroidID(bool) 
AppsFlyer.setCollectIMEI(bool)

 Avertissement

Il est IMPÉRATIF de collecter au moins un identifiant d'appareil, l'identifiant publicitaire Google (GAID), l'ID Android, ou le numéro IMEI pour permettre une attribution correcte.

IDFA et IDFV

AppsFlyer recueille automatiquement l’IDFA (ID pour les annonceurs) et l'IDFV (ID pour les vendeurs) si AdSupport.framework est inclus dans l’application.

9. Fonctionnalités facultatives

Mesure des désinstallations

Pour la mesures des désinstallations, suivez les instructions en fonction de votre système d’exploitation.

Android - Firebase Android - GCM iOS
1. Téléchargez le SDK Unity Firebase depuis : https://firebase.google.com/docs/unity/setup
2. Importez FirebaseMessaging.unitypackage dans le projet.
3.  Importez google-services.json dans le projet (obtenu dans la console de Firebase)

 Remarque

Les récepteurs de manifeste seront automatiquement ajoutés par le SDK Unity Firebase.


4. Dans la classe Unity gérant le code AppsFlyer, ajoutez le texte suivant :
avec Firebase.Messaging;
avec Firebase.Unity;

5.  Ajoutez à la méthode Start() :
Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;

6. Ajoutez la méthode suivante :
public void OnTokenReceived
    (object sender, Firebase.Messaging.TokenReceivedEventArgs token) { 
        AppsFlyer.updateServerUninstallToken (token.Token);
}

 

 Avertissement

Les utilisateurs qui implémentent le SDK Unity Firebase ne doivent pas ajouter l’appel de méthode suivant à enableUninstallTracking(“SenderID”) car le SDK Firebase obtiendra l’ID de l’expéditeur du fichier google-services.json que nous avons ajouté précédemment. Ajouter cette méthode pourrait causer un avertissement de débogage de la part d'Android.

Suivi des Notifications Push

AppsFlyer vous permet de mesurer les notifications push dans le cadre d'une campagne de retargeting.

handlePushNotification(Dictionary<string, string> payload)

La charge utile des données doit inclure un objet : af avec la chaîne clé-valeur pertinente :

Exemple :

{  
   "data":{  
      "score":"5x1",
      "time":"15:10",
      "af":{  
         "c":"test_campaign",
         "is_retargeting":"true",
         "pid":"push_provider_int"
      }
   }
}

// with deep-linking
{
   "data":{
      "score":"5x1",
      "time":"15:10",
      "click_action":"com.example.someAction",
      "af":{
         "c":"test_campaign",
         "is_retargeting":"true",
         "pid":"push_provider_int"
      }
   }
}

 Remarque

Pour plus d'informations concernant la mesure des notifications push, veuillez lirececi.

Suivi des Promotions Croisées

AppsFlyer vous permet de suivre et d'attribuer les installations provenant d'une promotion croisée de l'une de vos applications au sein de l'application actuelle dont dispose l'utilisateur. Les applications de promotion croisée peuvent être un facteur de croissance important en entrainant des installations supplémentaires pour vos applications.

Pour obtenir plus d'informations, reportez-vous à l'article concernant le suivi de la promotion croisée, disponible ici.

Suivi des invitations utilisateur

AppsFlyer vous permet de suivre et d'attribuer les installations provenant d'invitations utilisateur au sein de votre application. Le fait de permettre à vos utilisateurs existants d'inviter leurs amis et contacts en tant que nouveaux utilisateurs de votre application peut être un facteur de croissance important pour votre application.

Pour obtenir plus d'informations, reportez-vous à l'article concernant le suivi des invitations utilisateur, disponible ici.

Configuration du Code Devise

Vous pouvez définir un code de devise global en utilisant l'API ci-dessous, en plus des codes de devise spécifiques pouvant être utilisés dans le cadre de chaque événement in-app envoyé à AppsFlyer. Le code de devise global est utilisé lorsque af_currency

AFInAppEvents.CURRENCY

n'est pas envoyé dans le cadre d'un évènement in-app.

La valeur par défaut est USD. Vous pouvez trouver les codes devise ISO acceptables ici.

Utilisez l'API suivante pour configurer le code de devise :

public void setCurrencyCode(String currencyCode);

Exemple d'utilisation :

setCurrencyCode(string currencyCode)

Validation des achats in-app

Pour la validation des reçus d'achat In-App, suivez les instructions en fonction de votre système d’exploitation.

Appel Android Appel du port d'écoute (Android uniquement) iOS
//Pour obtenir les calbacks
 //AppsFlyer.createValidateInAppListener ("AppsFlyerTrackerCallbacks", 
"onInAppBillingSuccess", "onInAppBillingFailure"); AppsFlyer.validateReceipt(string publicKey, string purchaseData,
string signature, string price, string currency, Dictionary additionalParameters);

La réponse d'achat validé est déclenchée dans la classe AppsFlyerTrackerCallbacks.cs

Anonymisation des données de l'utilisateur

AppsFlyer vous fournit une méthode permettant d'anonymiser des identifiants utilisateur spécifiques dans les analyses AppsFlyer. Cette méthode est conforme aux dernières exigences de confidentialité ainsi qu'aux politiques de confidentialité des données de Facebook. La valeur par défaut est NON, ce qui signifie qu'aucune anonymisation n'est effectuée par défaut.

Utilisez cette API lors de l'initialisation du SDK pour anonymiser explicitement les installations, les évènements et les sessions d'un utilisateur :

public void setDeviceTrackingDisabled(boolean isDisabled);

Exemple d'utilisation :

AppsFlyer.setDeviceTrackingDisabled(true);
Il est possible de reprendre le suivi en appelant de nouveau deviceTrackingDisabled défini sur false.

 Avertissement

Le fait d'exclure des utilisateurs nuit GRAVEMENT à vos informations d'attribution.
Utilisez cette option UNIQUEMENT pour les régions dans lesquelles vous êtes légalement tenu de ne pas collecter les informations de vos utilisateurs.

Personnalisation du temps entre les sessions

Par défaut, au moins 5 secondes doivent s'écouler entre 2 lancements d'apps pour que cela soit considéré comme 2 sessions distinctes (pour en savoir plus sur le décompte de session). 
Toutefois, vous pouvez utiliser l'API suivante pour définir votre valeur personnalisée de durée minimale requise entre les sessions :
setMinTimeBetweenSessions(int seconds)


Exemple d'utilisation :

AppsFlyer.setMinTimeBetweenSessions(10);

Notez que définir une valeur élevée à la durée personnalisée entre les lancements peut avoir un impact négatif sur les API qui s'appuient sur les données de session, comme Deep Linking.

Sessions d'arrière-plan pour applications utilitaires

Actuellement indisponible dans Unity.

Suivi des applications hors magasin

 Remarque

Google Play est la boutique par défaut. Si vous mettez votre application en ligne uniquement sur Google Play, veuillez passer cette section.

Pour effectuer le suivi des installations hors Google Play, définissez le canal/la boutique dans le fichier AndroidManifest.xml de l'application en indiquant un canal unique ou un nom de boutique pour chaque fichier APK. La valeur CANAL est sensible à la casse.

Exemples :

<meta-data android:name="CHANNEL" android:value="Amazon" />
<meta-data android:name="CHANNEL" android:value="Standalone"/>
<meta-data android:name="CHANNEL" android:value="Verizon" />

 Remarque

Vous devez définir la valeur CANAL dans le tableau de bord AppsFlyer lors de la configuration de l'application.

Placez la balise de métadonnées avant la balise </application>.

Pour obtenir plus d'informations sur la manière de suivre les installations des applications hors boutique, veuillez lire ceci.

Exclusion

Dans certains cas extrêmes, vous pouvez vouloir arrêter tout suivi SDK en raison de la conformité aux exigences légales et à la vie privée. L'API isStopTracking le permet. Une fois cette API appelée, notre SDK ne communiquera plus avec nos serveurs et cessera de fonctionner.

AppsFlyer.stopTracking(true);

Dans chaque événement, le SDK peut être réactivé en appelant la même API, avec la valeur false.

Il existe différents scénarios d'exclusion d'utilisateurs. Nous recommandons vivement de suivre les instructions exactes du scénario qui correspond à votre application.

 Avertissement

Utilisez cette API uniquement lorsque vous souhaitez exclure cet utilisateur de tout suivi. L'utilisation de cette API impacte FORTEMENT votre attribution, votre collecte des données et votre mécanisme de deep linking.

Définition des données personnalisées supplémentaires

L'API setAdditionalData est requise pour l'intégration au niveau SDK avec plusieurs plates-formes partenaires externes, dont Segment, Adobe et Urban Airship. Utilisez cette API uniquement si l'article d'intégration de la plate-forme indique spécifiquement que l'API setAdditionalData est requise.
Le code qui suit illustre l'implémentation de setAdditionalData sur Unity :

Dictionary<string, string> CustomDataMap = new Dictionary<string, string>();
CustomDataMap.Add("custom_param_1", "value_of_param_1");
AppsFlyer.setAdditionalData(CustomDataMap);

Attribution pour des application préinstallées

Android uniquement

Vous pouvez, du point de vue de la programmation, définir une source média pré-installée de Unity en utilisant l'API suivante :

setPreinstallAttribution(string MediaSource, string Campaign, string Site_Id);

Pour plus de détails sur les implémentations natives, cliquez ici.

 Important !

Lorsque vous utilisez le SDK Unity AppsFlyer, évitez

PlayerPrebs.DeleteAll()

10. Tester votre intégration

Pour les instructions de test de vos intégrations en fonction de votre système d’exploitation, cliquez sur Android Testing ou iOS Testing.

Vous pouvez maintenant commencer à suivre les sources média avec lesquelles vous travaillez.

11. Problèmes connus

ProGuard

Si vous utilisez ProGuard pour Android et que vous rencontrez un avertissement concernant notre classe AFKeystoreWrapper, ajoutez le code suivant à votre fichier de règles ProGuard :

-keep class com.appsflyer.** { *; }

IL2CPP

Pour exclure notre SDK de la suppression du bytecode managé avec IL2CPP, ajoutez ce qui suit au fichier link.xml :

<linker>
    <assembly fullname="mscorlib">
        <type fullname="AppsFlyer.*" preserve="all"/>
    </assembly>
…
</linker>

12. Exemple de projet Unity

Pour voir un projet exemple Unity, cliquez ici.

Cet article vous a-t-il été utile ?
Utilisateurs qui ont trouvé cela utile : 3 sur 8

Commentaires

0 commentaire

Veuillez vous connecter pour laisser un commentaire.