At a glance: Integrate and install the AppsFlyer SDK into Android or iOS apps developed with Unity. Once basic integration tasks are complete, your app is ready for install attribution and in-app event measurement.
Lectures connexes
Ces articles vous fourniront une vision complète de l'intégration du plugin Unity à vos apps :
- Guide d'intégration du plug-in Unity V6—Présentation
- Unity plugin V6 integration guide—Basic SDK integration (this article)
- Guide d'intégration du plugin Unity V6— Intégration du SDK de base
- Guide d'intégration du plugin Unity V6—Référence de l'API
Add the plugin to your app
Important !
Le SDK AppsFlyer Unity ne prend pas en charge le système de compilation interne Unity.
Download the AppsFlyer Unity plugin
Téléchargez le dernier plugin Unity sur GitHub.
Install the plugin
Use one of the following installation methods.
L'External Dependency Manager for Unity (le gestionnaire de dépendances externes pour Unity - EDM4U) est fourni par défaut avec le plug-in AppsFlyer Unity. Ce qui permet de simplifier le processus d'intégration en résolvant les conflits de dépendance entre votre plug-in et certains autres plug-ins de votre projet.
Pour installer le plug-in :
Ajoutez appsflyer-unity-plugin.v*.unitypackage de manière à importer automatiquement les actifs requis par le plug-in AppsFlyer et l'EDM4U.
Pour installer le plug-in sans EDM4U :
- Importez appsflyer-unity-plugin.v*.unitypackage dans votre projet, mais veillez à bien effacer la sélection des dépendances de EDM4U.
- Téléchargez et ajoutez les dépendances Android requises dans le dossier Assets/Plugins/Android :
- Téléchargez et ajoutez les dépendances iOS requises au dossier Assets/Plugins/iOS/AppsFlyer :
Set up Android
Pour accorder les autorisations Android nécessaires :
Définissez les autorisations suivantes dans 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" />
Apps targeting API level 31 (Android 12) should add the following permission to AndroidManifest.xml
to access the Android Advertising Identifier:
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />
Initialize the plugin
Cette section détaille comment implémenter et initialiser le plug-in.
Retrieve the dev key
- La clé est unique et permet d'identifier le compte. Dans certains cas, il peut exister une clé au niveau de l'app.
- La clé dev est obligatoire.
Pour obtenir la clé dev :
- Dans AppsFlyer, rendez-vous dans Configuration > Paramètres de l'app.
- Récupérez la clé dev.
Initialize the plugin
Pour initialiser le plug-in à l'aide du prefab :
- Rendez-vous dans Actifs > AppsFlyer.
- Faites glisser AppsFlyerObject.prefab dans votre scène.
- Définissez les champs suivants :
Réglage Remarques Clé dev Collez la clé dev que vous venez de récupérer. ID d'app iOS : saisissez l'ID de l'app iOS (pas de préfixe
id
).Android : laissez le champ vide.
Obtenir les données de conversion Si l'app implémente le deep linking AppsFlyer, définissez sur « True ». La valeur par défaut étant « False », le deep linking n'est PAS implémenté par défaut. Is debug (débogage) Pour consulter les journaux de débogage durant le développement : définissez sur «true».
Remarque: veillez à désactiver (mettre sur false) avant de mettre l'app en production.
- Mettez à jour le code dans Actifs >AppsFlyer >AppsFlyerObjectScript.cs pour se conformer aux autresAPI .
À intégrer manuellement :
Créez un game object et ajoutez le code init suivant :
using AppsFlyerSDK;
public class AppsFlyerObjectScript : MonoBehaviour , IAppsFlyerConversionData
{
void Start()
{
/* AppsFlyer.setDebugLog(true); */
AppsFlyer.initSDK("devkey", "appID", this);
AppsFlyer.startSDK();
}
public void onConversionDataSuccess(string conversionData)
{
AppsFlyer.AFLog("onConversionDataSuccess", conversionData);
Dictionary<string, object> conversionDataDictionary = AppsFlyer.CallbackStringToDictionary(conversionData);
// add deferred deeplink logic here
}
public void onConversionDataFail(string error)
{
AppsFlyer.AFLog("onConversionDataFail", error);
}
public void onAppOpenAttribution(string attributionData)
{
AppsFlyer.AFLog("onAppOpenAttribution", attributionData);
Dictionary<string, object> attributionDataDictionary = AppsFlyer.CallbackStringToDictionary(attributionData);
// add direct deeplink logic here
}
public void onAppOpenAttributionFailure(string error)
{
AppsFlyer.AFLog("onAppOpenAttributionFailure", error);
}
}
Remarque : veillez à ne pas appeler la destruction du game object.
Record in-app events
Enregistrez les événements in-app pour mesurer les KPI de type revenus, ROI et LTV (durée de vie).
Les événements in-app doivent être implémentés pour enregistrer les événements des utilisateurs. Les événements peuvent être envoyés de différentes façons :
- [Méthode conseillée] Envoi d'événements via l'app tel que décrit dans cet article.
- For additional methods see the in-app events overview guide.
Pour les apps qui font partie d'une verticale (ex : les voyages, le gaming, le E-commerce) consultez la liste des événements in-app recommandés selon les verticales.
In-app event names and parameters
Pour envoyer des événements :
- Indiquez le nom et les paramètres de l'événement.
- Voir les listes associées :
- Liste des noms et structures d'événements recommandés
- Liste trouvée dans la classe
AFInAppEvents
.
[Méthode conseillée] Utilisez les noms et paramètres des événements pour les cas suivants :
- Dénomination standard : AppsFlyer peut mapper automatiquement les événements sur les SRN tels que Facebook, Google et Twitter.
- Rétrocompatibilité : aucun conflit si AppsFlyer décide de modifier le nom ou le paramètre d'un évènement. L'implémentation sera compatible avec les versions antérieures.
Enregistrement du revenu
Incluez les rapports de revenus en ajoutant le paramètre af_revenue
aux événements in-app.
- Renseignez
af_revenue
à l'aide de chiffres. Les valeurs négatives sont autorisées. - Le paramètre
af_revenue
permet de comptabiliser les revenus et il intervient dans les champs de données brutes d'AppsFlyer. Ce qui permet aux marketeurs de visualiser les revenus directement dans le tableau de bord. - Les revenus peuvent être envoyés avec des paramètres différents, mais la plate-forme AppsFlyer ne les considèrera pas comme des revenus.
Cliquez ici pour plus de détails. - Les valeurs des revenus ne doivent contenir ni virgule, ni symbole monétaire, ni texte.
Exemple d'événement de revenus : 1234,56
Conseil :obtenez plus d'infos sur les paramètres de devise, l'affichage et la conversion des devises.
Règles à suive concernant le code de devise pour l'envoi d'événements générateurs de revenus.
- La devise par défaut est USD.
- Utilisez un code ISO 4217 à 3 caractères (cf exemple suivant).
- Définissez le code de devise en appelant l'API :
AppsFlyer.setCurrencyCode("ZZZ")
Exemple : évènement d'achat d'évènement in-app avec revenus
Cet événement d'achat correspond à 200,12 euros. Pour que les revenus apparaissent dans le tableau de bord, utilisez les éléments suivants.
System.Collections.Generic.Dictionary<string, string> purchaseEvent = new
System.Collections.Generic.Dictionary<string, string> ();
purchaseEvent.Add(AFInAppEvents.CURRENCY, "EUR");
purchaseEvent.Add(AFInAppEvents.REVENUE, "200.12");
purchaseEvent.Add(AFInAppEvents.QUANTITY, "1");
purchaseEvent.Add(AFInAppEvents.CONTENT_TYPE, "category_a",);
AppsFlyer.sendEvent ("af_purchase", purchaseEvent);
Enregistrer des revenus négatifs
Enregistrez les revenus négatifs à l'aide du signe -.
- La valeur de revenu est précédée du signe moins.
- Le nom de l'événement a la valeur unique "cancel_purchase". Cela vous permet d'identifier les événements de revenus négatifs dans le tableau de bord et les rapports de données brutes.
Exemple : l'utilisateur de l'application reçoit un remboursement ou annule un abonnement.
System.Collections.Generic.Dictionary<string, string> purchaseEvent = new
System.Collections.Generic.Dictionary<string, string> ();
purchaseEvent.Add(AFInAppEvents.CURRENCY, "USD");
purchaseEvent.Add(AFInAppEvents.REVENUE, "-200");
purchaseEvent.Add(AFInAppEvents.QUANTITY, "1");
purchaseEvent.Add(AFInAppEvents.CONTENT_TYPE, "category_a");
AppsFlyer.sendEvent ("cancel_purchase", purchaseEvent);
Validation des achats in-app
Le plug-in effectue une vérification au niveau du serveur pour les achats in-app.
Pour valider un achat, suivez les instructions spécifiques au système d'exploitation :
#if UNITY_ANDROID && !UNITY_EDITOR
AppsFlyerAndroid.validateAndSendInAppPurchase(
"publicKey",
"signature",
"purchaseData",
"price",
"currency",
null,
this);
#endif
Assurez-vous de tester à l'aide de l’appel au serveur sandbox Apple :
#if UNITY_IOS && !UNITY_EDITOR
AppsFlyeriOS.validateAndSendInAppPurchase(
"productIdentifier",
"price",
"currency",
"transactionId",
null,
this);
#endif
Paramètres de la méthode
Paramètre | Description |
---|---|
String publicKey | Clé publique de Google Developer Console |
Signature de chaîne |
Signature de transaction ; renvoyée par l'API Google lorsqu'un achat est terminé |
Chaîne purchaseData |
Produit acheté au format JSON ; renvoyé par l'API Google lorsqu'un achat est terminé |
Chaîne revenus | Revenu de l'évènement in-app à signaler à AppsFlyer |
Chaîne devise | Devise de l'évènement in-app à signaler à AppsFlyer |
Dictionary<String, String> additionalParameters |
Paramètres d'événement in-app supplémentaires qui apparaissent dans le champ event_value des données brutes d'événement in-app |
Paramètre | Description |
---|---|
Chaîne productIdentifier | Identifiant produit |
Chaîne prix | Revenu de l'évènement in-app à signaler à AppsFlyer |
Chaîne devise | Devise de l'évènement in-app à signaler à AppsFlyer |
Dictionary<String, String> additionalParameters |
Paramètres d'événement in-app supplémentaires qui apparaissent dans le champ event_value des données brutes d'événement in-app |
Note
Appelez validateReceipt
pour générer automatiquement un évènement in-app af_purchase.
N'envoyez jamais d'événement d'achat après avoir validé l'achat. Cela produirait des rapports d'événements en double.
In-app event considerations
- Nom de l'événement : 45 caractères maximum
- Valeur de l'événement : 1000 caractères maximum, si elle dépasse nous pourrons la tronquer
- Prend en charge les caractères hors alphabet anglais pour les événements in-app (et autres API)
- Tarifs et revenus :
- Utilisez uniquement des nombres et des décimales tels que 5 ou 5.2
- Jusqu'à 5 chiffres après la virgule acceptés. Par exemple 5,12345
Examples of recording in-app events
Enregistrez les événements in-app en appelant sendEvent
et incluez le nom de l'événement et les paramètres de valeur.
Consultez l'article Évènements in-app pour en savoir plus.
Exemple : comment enregistrer un évènement d'achat in-app
For a comprehensive list of ready-made code snippets per vertical, see our guides for rich in-app events per verticals.
System.Collections.Generic.Dictionary<string, string> purchaseEvent = new
System.Collections.Generic.Dictionary<string, string> ();
purchaseEvent.Add(AFInAppEvents.CURRENCY, "USD");
purchaseEvent.Add(AFInAppEvents.REVENUE, "200");
purchaseEvent.Add(AFInAppEvents.QUANTITY, "2");
purchaseEvent.Add(AFInAppEvents.CONTENT_TYPE, "category_a");
purchaseEvent.Add(AFInAppEvents.CONTENT_ID, "092");
AppsFlyer.sendEvent (AFInAppEvents.PURCHASE, purchaseEvent);
Record offline in-app events
Parfois, les utilisateurs génèrent des événements in-app, alors qu'ils n'ont pas de connexion Internet. AppsFlyer met l'événement en cache et le rapporte dès que la possibilité se présente.
- Le plug-in envoie les événements aux serveurs AppsFlyer et attend la réponse.
- Si le plug-in n'obtient pas une réponse 200, l'événement est stocké en cache.
- Une fois que la réponse 200 suivante est reçue, l'événement en cache est renvoyé au serveur.
- S'il y a plusieurs événements dans le cache, ils sont envoyés au serveur les uns après les autres.
Note
Le cache peut stocker jusqu'à 40 événements.
- Seuls les 40 premiers événements hors ligne sont enregistrés.
- Les évènements hors ligne suivants, jusqu'à la prochaine réponse 200, ne sont pas retenus.
- Dans le rapport de données brutes,
- Heure de l'événement = le moment où l'événement est envoyé à AppsFlyer après la reconnexion en ligne de l'appareil.
- Ce n'est pas le moment où l'événement a eu lieu.
Deep-link with OneLink
OneLink d'AppsFlyer est la solution pour l'attribution multiplate-forme, la redirection et le deep linking.
Détecter et rediriger les appareils
OneLink :
- Détecte le type d'appareil (Android et iOS, ordinateur, etc.) lorsqu'un utilisateur effectue un clic, puis
- redirige l'utilisateur vers la destination correspondante : Google Play, app store iOS, marchés hors store ou pages web.
Pour implémenter les liens d'attribution multiplate-forme et découvrir les notions élémentaires du deep linking, veuillez parcourir le guide de la redirection OneLink.
Deep Linking
Le deep linking vous permet d'envoyer les utilisateurs existants vers des activités spécifiques et du contenu personnalisé.
Le marketeur et le développeur doivent travailler ensemble pour configurer le deep link avec OneLink :
- Le marketeur doit accéder au tableau de bord AppsFlyer
- Le développeur doit accéder à l'application
Consultez notre guide de configuration du deep linking avec OneLink.
Deep linking différé
Le deferred deep linking vous permet de deep linker les nouveaux utilisateurs vers des activités spécifiques ou du contenu personnalisé dès la première ouverture qui suit l'installation d'une app.
Le deep link standard dirige également les utilisateurs vers des activités spécifiques et du contenu personnalisé, mais une application doit déjà être installée sur l'appareil de l'utilisateur .
Pour configurer un deep link différé avec OneLink :
- Le développeur doit accéder à la plate-forme AppsFlyer.
- La configuration de la plate-forme AppsFlyer pour le deep linking différé et standard est la même.
- Vous devez simplement implémenter une logique supplémentaire dans l'app pour pouvoir deep linker les utilisateurs et leur offrir un contenu personnalisé après l'installation et le lancement de l'app.
Consultez le deep link différé pour plus d'informations.
Get deep link data
Le plug-in fournit des données de conversion ou d'engagement après chaque installation ou chaque événement de deep-linking. Utilisez ces données pour personnaliser le contenu ou le programme de comportement de l'app.
Pour recevoir les données du deep link :
- Implémentez le callback
onAppOpenAttribution
(qui figure dans la classeIAppsFlyerConversionData
); il est appelé par le plug-in AppsFlyer. - Les paramètres Onelink/lien d'attribution renvoyés déclenchent l'ouverture de l'app.
- Analysez ensuite les valeurs, et appliquez la logique pour déclencher la page appropriée de l'app.
public void onAppOpenAttribution(string attributionData)
{
AppsFlyer.AFLog("onAppOpenAttribution", attributionData);
Dictionary<string, object> attributionDataDictionary = AppsFlyer.CallbackStringToDictionary(attributionData);
// add direct deeplink logic here
}
Consultez les données de deep linking pour plus d'informations.
Obtenir les données de conversion
L'accès en temps-réel aux données d'attribution des utilisateurs est disponible pour chaque installation. Utilisez cette fonction pour améliorer l'engagement des utilisateurs en offrant :
- Contenu personnalisé
- Dirigez les utilisateurs vers des activités spécifiques au sein d'une app.Consultez notre article sur le deep linking différé.
Obtain AppsFlyer conversion data
Pour obtenir les données de conversion d'AppsFlyer :
- Implémentez le code
IAppsFlyerConversionDatabase
. - Appelez la méthode
initSDK
en l'utilisant comme paramètre final. - Utilisez la méthode
onConversionDataSuccess
pour rediriger l'utilisateur.
Voir la référence d'API pour onConversionDataSuccess.
using AppsFlyerSDK;
public class AppsFlyerObjectScript : MonoBehaviour , IAppsFlyerConversionData
{
void Start()
{
/* AppsFlyer.setDebugLog(true); */
AppsFlyer.initSDK("devkey", "appID", this);
AppsFlyer.startSDK();
}
public void onConversionDataSuccess(string conversionData)
{
AppsFlyer.AFLog("onConversionDataSuccess", conversionData);
Dictionary<string, object> conversionDataDictionary = AppsFlyer.CallbackStringToDictionary(conversionData);
// add deferred deeplink logic here
}
public void onConversionDataFail(string error)
{
AppsFlyer.AFLog("onConversionDataFail", error);
}
public void onAppOpenAttribution(string attributionData)
{
AppsFlyer.AFLog("onAppOpenAttribution", attributionData);
Dictionary<string, object> attributionDataDictionary = AppsFlyer.CallbackStringToDictionary(attributionData);
// add direct deeplink logic here
}
public void onAppOpenAttributionFailure(string error)
{
AppsFlyer.AFLog("onAppOpenAttributionFailure", error);
}
}
Test installs
Allowlist the test device
Mettre sur liste autorisée l'appareil de test.
Simulate installs
Simuler des installations organiques et non organiques.
Simuler une installation organique
Les installations organiques sont des installations non attribuées, elles résultent en général des installations effectuées directement depuis des app stores. Pour simuler une installation organique, veuillez suivre ces instructions.
Simuler une installation non organique
Les installations non organiques sont des installations attribuées, elles découlent en général d'un engagement avec une publicité. Pour simuler une installation non organique, veuillez suivre ces instructions.