Solução de problemas
iOS Swizzling
- O plug-in Unity da AppsFlyer usa os eventos do ciclo de vida do iOS para que o SDK funcione.
- Os plug-ins usam UnityAppController para que os eventos do ciclo de vida sejam invocados.
- Às vezes, outros plugins (Firebase, Facebook, etc) usam o mesmo UnityAppController, o que cria conflitos nos eventos do ciclo de vida.
- Esses eventos incluem didBecomeActive, didEnterBackground, didReceiveRemoteNotification, continueUserActivity e openURL.
- Quando ocorre um conflito, esses métodos não podem ser invocados.
- A solução fornecida pelo plug-in Unity da AppsFlyer é o Swizzling.
- A partir de
v6.0.7
há uma opção para ativar o Swizzling automaticamente.
Para habilitar o Swizzling, você tem 3 opções:
- Para versões até
6.5.3
- Da versão
6.5.3
Usando informações .plist
- Para ativar o Swizzling, no arquivo info.plist, um K/V booleano chamado
AppsFlyerShouldSwizzle
deve ser definido como 1 (verdadeiro). - Isso ativará automaticamente o Swizzling e resolverá conflitos com outros plugins.
- Valide se o código no AppsFlyer+AppController é chamado no lado nativo.
- Comente
IMPL_APP_CONTROLLER_SUBCLASS(AppsFlyerAppController)
em AppsFlyerAppController.mm.
Usando o script ac#
- Crie um novo script c#. (chamamos o nosso de AFUpdatePlist.cs)
- Coloque o script em uma pasta do editor (Assets > Editor > AFUpdatePlist.cs)
- O código no script deve ficar assim:
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");
}
}
}
- Valide se o código no AppsFlyer+AppController é chamado no lado nativo.
- Comente
IMPL_APP_CONTROLLER_SUBCLASS(AppsFlyerAppController)
em AppsFlyerAppController.mm.
Usando macroprocessador
- Adicione o sinalizador de macro do pré-processador
AFSDK_SHOULD_SWIZZLE=1
para as configurações de construção do projeto.
- Validate that the code in the AppsFlyer+AppController is called on the native side.
Atualizando o info.plist
Neste exemplo, atualizaremos o info.plist para enviar postbacks SKAN para a AppsFlyer, mas o script pode ser ajustado para atualizar qualquer chave no info.plist
- Crie um novo script c#. (chamamos o nosso de AFUpdatePlist.cs)
- Coloque o script em uma pasta do editor (Assets > Editor > AFUpdatePlist.cs)
- O código no script deve ficar assim:
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");
}
}
}
Atualizado cerca de 1 ano atrás