Dépannage
iOS Swizzling
- Le plugin AppsFlyer Unity utilise les événements du cycle de vie iOS pour que le SDK fonctionne.
- Le plugin utilise UnityAppController pour invoquer les événements du cycle de vie.
- Parfois, d'autres plugins (Firebase, Facebook, etc.) utilisent le même UnityAppController, ce qui crée des conflits dans les événements du cycle de vie.
- Ces événements comprennent didBecomeActive, didEnterBackground, didReceiveRemoteNotification, continueUserActivity et openURL.
- Lorsqu'un conflit survient, ces méthodes ne peuvent pas être invoquées.
- La solution fournie par le plugin AppsFlyer Unity est le swizzling.
- À compter de
v6.0.7
, une option permet d'activer le swizzling automatiquement.
Pour activer le swizzling, vous avez 3 options :
- Pour les versions jusqu'à
6.5.3
- À partir de la version
6.5.3
Utilisation d'info .plist
- Pour activer le swizzling, dans le fichier info.plist, un booléen K/V appelé
AppsFlyerShouldSwizzle
doit être défini sur 1 (true). - Cela permettra d'activer automatiquement le swizzling et de résoudre les conflits avec d'autres plugins.
- Assurez-vous que le code dans AppsFlyer+AppController est appelé du côté natif.
- Commentaire
IMPL_APP_CONTROLLER_SUBCLASS(AppsFlyerAppController)
dans AppsFlyerAppController.mm.
Utilisation d'un script c#
- Créez un nouveau script c#. (nous avons appelé le nôtre AFUpdatePlist.cs)
- Placez le script dans un dossier de l'éditeur (Ressources > Éditeur > AFUpdatePlist.cs)
- Le code du script devrait ressembler à ceci :
using System.IO;
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
public class MyBuildPostprocessor {
[PostProcessBuildAttribute]
public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject) {
if (target == BuildTarget.iOS)
{
string plistPath = pathToBuiltProject + "/Info.plist";
PlistDocument plist = new PlistDocument();
plist.ReadFromString(File.ReadAllText(plistPath));
PlistElementDict rootDict = plist.root;
rootDict.SetBoolean("AppsFlyerShouldSwizzle", true);
File.WriteAllText(plistPath, plist.WriteToString());
Debug.Log("Info.plist updated with AppsFlyerShouldSwizzle");
}
}
}
- Assurez-vous que le code dans AppsFlyer+AppController est appelé du côté natif.
- Commentaire
IMPL_APP_CONTROLLER_SUBCLASS(AppsFlyerAppController)
dans AppsFlyerAppController.mm.
Utilisation d'un macroprocesseur
- Ajoutez l'indicateur de macro du préprocesseur
AFSDK_SHOULD_SWIZZLE=1
aux paramètres de construction du projet.
- Validate that the code in the AppsFlyer+AppController is called on the native side.
Mise à jour de l'info.plist
Dans cet exemple, nous allons mettre à jour info.plist pour envoyer les postbacks SKAN vers AppsFlyer, mais le script peut être ajusté pour mettre à jour n'importe quelle clé dans info.plist
- Créez un nouveau script c#. (nous avons appelé le nôtre AFUpdatePlist.cs)
- Placez le script dans un dossier de l'éditeur (Ressources > Éditeur > AFUpdatePlist.cs)
- Le code du script devrait ressembler à ceci :
using System.IO;
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
public class MyBuildPostprocessor
{
[PostProcessBuildAttribute]
public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject)
{
if (target == BuildTarget.iOS)
{
string plistPath = pathToBuiltProject + "/Info.plist";
PlistDocument plist = new PlistDocument();
plist.ReadFromString(File.ReadAllText(plistPath));
PlistElementDict rootDict = plist.root;
rootDict.SetString("NSAdvertisingAttributionReportEndpoint", "https://appsflyer-skadnetwork.com/");
/*** To add more keys :
** rootDict.SetString("<your key>", "<your value>");
***/
File.WriteAllText(plistPath, plist.WriteToString());
Debug.Log("Info.plist updated with NSAdvertisingAttributionReportEndpoint");
}
}
}
Mis(e) à jour il y a 11 mois