Устранение неполадок
Подмена iOS
- Плагин Unity для AppsFlyer использует события жизненного цикла iOS для работы SDK.
- Плагин использует UnityAppController для вызова событий жизненного цикла.
- Иногда другие плагины (Firebase, Facebook и пр.) используют тот же UnityAppController, что приводит к возникновению конфликтов в событиях жизненного цикла.
- Эти события включают didBecomeActive, didEnterBackground, didReceiveRemoteNotification, continueUserActivity и openURL.
- При возникновении конфликта нельзя вызывать эти методы.
- Плагин AppsFlyer Unity предлагает в качестве решения подмену (Swizzling).
- Дата начала
v6.0.7
есть опция автоматического включения подмены.
Есть 3 способа включения подмены:
- Для версий до
6.5.3
- Начиная с версии
6.5.3
Использование info.plist
- Чтобы включить подмену, в файле info.plist необходимо установить логическое значение K/V
AppsFlyerShouldSwizzle
на 1 (true). - При этом будет автоматически включена подмена и разрешены конфликты с другими плагинами.
- Проверьте вызов кода AppsFlyer+AppController на нативной стороне.
- Превратите в комментарий
IMPL_APP_CONTROLLER_SUBCLASS(AppsFlyerAppController)
в AppsFlyerAppController.mm.
Использование скрипта c#
- Создайте новый скрипт c#. (мы вызвали наш AFUpdatePlist.cs)
- Перенесите скрипт в папку редактора (Активы > Редактор > AFUpdatePlist.cs)
- Код в скрипте должен выглядеть так:
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");
}
}
}
- Проверьте вызов кода AppsFlyer+AppController на нативной стороне.
- Превратите в комментарий
IMPL_APP_CONTROLLER_SUBCLASS(AppsFlyerAppController)
в AppsFlyerAppController.mm.
Использование макропроцессора
- Добавьте флаг preprocessor macro
AFSDK_SHOULD_SWIZZLE=1
, чтобы создать настройки проекта.
- Validate that the code in the AppsFlyer+AppController is called on the native side.
Обновление info.plist
В этом примере мы обновим info.plist для отправки постбэков SKAN в AppsFlyer, но скрипт можно настроить для обновления любого ключа в info.plist.
- Создайте новый скрипт c#. (мы вызвали наш AFUpdatePlist.cs)
- Перенесите скрипт в папку редактора (Активы > Редактор > AFUpdatePlist.cs)
- Код в скрипте должен выглядеть так:
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");
}
}
}
Изменения сохранены около 1 года назад