Xử lý sự cố

Swizzling trên iOS

  • Trình cắm Unity của AppsFlyer sử dụng các sự kiện trong vòng đời của iOS để SDK hoạt động.
  • Các trình cắm sử dụng UnityAppController để gọi ra các sự kiện vòng đời.
  • Đôi khi các trình cắm khác (Firebase, Facebook, v.v.) sử dụng cùng một UnityAppController, điều này tạo ra xung đột trong các sự kiện vòng đời.
  • Những sự kiện này bao gồm didBecomeActive, didEnterBackground, didReceiveRemoteNotification, continueUserActivity và openURL.
  • Khi xảy ra xung đột, các phương thức này có thể không được gọi ra.
  • Giải pháp do Trình cắm AppsFlyer Unity cung cấp là Swizzling.
  • Bắt đầu từ v6.0.7 có một tùy chọn để tự động bật Swizzling.

Để bật Swizzling, bạn có 3 tùy chọn:

Sử dụng info.plist

  • Để bật Swizzling, trong tệp tin info.plist, một K/V boolean gọi là AppsFlyerShouldSwizzle cần được đặt thành 1 (true).
  • Điều này sẽ tự động bật Swizzling và giải quyết tình trạng xung đột với các trình cắm khác.
  • Xác thực rằng mã trong AppsFlyer+AppController được gọi ra ở phía gốc.
  • Ghi chú IMPL_APP_CONTROLLER_SUBCLASS(AppsFlyerAppController) trong AppsFlyerAppController.mm.

Sử dụng một Tập lệnh c#

  1. Tạo một tập lệnh c# mới. (chúng tôi gọi ra AFUpdatePlist.cs của chúng tôi)
  2. Đặt tập lệnh vào thư mục trình chỉnh sửa (Assets > Editor > AFUpdatePlist.cs)
  3. Mã trong tập lệnh sẽ có dạng như sau:
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. Xác thực rằng mã trong AppsFlyer+AppController được gọi ra ở phía gốc.
  2. Ghi chú IMPL_APP_CONTROLLER_SUBCLASS(AppsFlyerAppController) trong AppsFlyerAppController.mm.

Sử dụng bộ xử lý vĩ mô

alt text


Cập nhật info.plist

Trong ví dụ này, chúng tôi sẽ cập nhật info.plist để gửi đăng lại SKAN tới AppsFlyer, nhưng tập lệnh có thể được điều chỉnh để cập nhật bất kỳ mã khóa nào trong info.plist

  1. Tạo một tập lệnh c# mới. (chúng tôi gọi ra AFUpdatePlist.cs của chúng tôi)
  2. Đặt tập lệnh vào thư mục trình chỉnh sửa (Assets > Editor > AFUpdatePlist.cs)
  3. Mã trong tập lệnh sẽ có dạng như sau:
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");
        }

    }
}