Resolución de Problemas
iOS Swizzling
- El plugin de AppsFlyer para Unity utiliza los eventos del ciclo de vida de iOS para que el SDK funcione.
- Los plugins utilizan UnityAppController para invocar los eventos del ciclo de vida.
- En ocasiones otros plugins (Firebase, Facebook, ect) utilizan el mismo UnityAppController, lo que crea conflictos en los eventos del ciclo de vida.
- Estos eventos incluyen didBecomeActive, didEnterBackground, didReceiveRemoteNotification, continueUserActivity y openURL.
- Cuando ocurre un conflicto, estos métodos no pueden ser invocados.
- La solución proporcionada por el plugin de AppsFlyer para Unity es Swizzling.
- Comenzando desde
v6.0.7
hay una opción para habilitar el swizzling automáticamente.
Para habilitar el Swizzling, tienes 3 opciones:
- Para versiones hasta
6.5.3
- A partir de la versión
6.5.3
Usando info .plist
- Para habilitar el swizzling, en el archivo info.plist, un booleano K/V llamado
AppsFlyerShouldSwizzle
debe establecerse en 1 (true). - Esto automáticamente habilitará el swizzling y resolverá los conflictos con otros plugins.
- Valida que el código en AppsFlyer+AppController se llame en el lado nativo.
- Convierte en comentario
IMPL_APP_CONTROLLER_SUBCLASS(AppsFlyerAppController)
en AppsFlyerAppController.mm.
Usando un script de c#
- Crea un nuevo script de c# (al nuestro le dimos el nombre AFUpdatePlist.cs).
- Coloca el script en una carpeta del editor (Assets > Editor > AFUpdatePlist.cs)
- El código en el script debería verse así:
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");
}
}
}
- Valida que el código en AppsFlyer+AppController se llame en el lado nativo.
- Convierte en comentario
IMPL_APP_CONTROLLER_SUBCLASS(AppsFlyerAppController)
en AppsFlyerAppController.mm.
Usando un macroprocesador
- Agrega el indicador de macro del preprocesador
AFSDK_SHOULD_SWIZZLE=1
a los ajustes de construcción del proyecto.
- Validate that the code in the AppsFlyer+AppController is called on the native side.
Actualización de info.plist
En este ejemplo, actualizaremos el info.plist para enviar postbacks de SKAN a AppsFlyer, pero el script se puede ajustar para actualizar cualquier clave en el info.plist.
- Crea un nuevo script de c# (al nuestro le dimos el nombre AFUpdatePlist.cs).
- Coloca el script en una carpeta del editor (Assets > Editor > AFUpdatePlist.cs)
- El código en el script debería verse así:
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");
}
}
}
Actualizado hace 11 meses