トラブルシューティング

iOS Swizzling

  • AppsFlyerのUnityプラグインは、SDKが機能するために iOSライフサイクル イベントを使用します。
  • プラグインは、呼び出されるライフサイクルイベントに UnityAppController を使用します。
  • 他のプラグイン(Firebase、Facebookなど)が同じUnityAppControllerを使用することがあり、ライフサイクルイベントで競合が発生します。
  • これらのイベントには、didBecomeActive, didEnterBackground, didReceiveRemoteNotification, continueUserActivity, openURL が含まれます。
  • 競合が発生すると、これらのメソッドが呼び出されない場合があります。
  • AppsFlyer Unity Pluginによって提供されるソリューションは Swizzling です。
  • 開始日 v6.0.7 スウィズリングを自動的に有効にするオプションがあります。

スウィズリングを有効にするには、次の3つのオプションがあります:

info.plist の使用

  • To enable swizzling, in the info.plist file, a boolean K/V called AppsFlyerShouldSwizzle should be set to 1 (true).
  • これにより、自動的にスウィズリングが有効になり、他のプラグインとの競合が解決されます。
  • AppsFlyer+AppController のコードがネイティブ側で呼び出されていることを確認します。
  • Comment out IMPL_APP_CONTROLLER_SUBCLASS(AppsFlyerAppController) in AppsFlyerAppController.mm.

C# Scriptの使用

  1. 新しい C# スクリプトを作成します。(AppsFlyerを AFUpdatePlist.cs と呼びます)
  2. スクリプトをエディターフォルダーに配置します。(Assets > Editor > AFUpdatePlist.cs)
  3. スクリプトのコードは次のようになります:
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");
        }
        
    }
}
  1. AppsFlyer+AppController のコードがネイティブ側で呼び出されていることを確認します。
  2. Comment out IMPL_APP_CONTROLLER_SUBCLASS(AppsFlyerAppController) in AppsFlyerAppController.mm.

マクロプロセッサの使用

  • Preprocessor macroフラグを追加する ​AFSDK_SHOULD_SWIZZLE=1 をプロジェクトのビルド設定に追加します。

alt text


info.plistの更新

この例では、SKANポストバックを AppsFlyer に送信するように info.plist を更新しますが、スクリプトを調整して info.plist 内の任意のキーを更新できます。

  1. 新しい C# スクリプトを作成します。(AppsFlyerを AFUpdatePlist.cs と呼びます)
  2. スクリプトをエディターフォルダーに配置します。(Assets > Editor > AFUpdatePlist.cs)
  3. スクリプトのコードは次のようになります:
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");
        }

    }
}