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:
- Đối với các phiên bản đến
6.5.3
- Kể từ phiên bản
6.5.3
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#
- 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)
- Đặt tập lệnh vào thư mục trình chỉnh sửa (Assets > Editor > AFUpdatePlist.cs)
- 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");
}
}
}
- 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 bộ xử lý vĩ mô
- Thêm cờ báo macro bộ tiền xử lý
AFSDK_SHOULD_SWIZZLE=1
vào cài đặt dựng của dự án.
- Validate that the code in the AppsFlyer+AppController is called on the native side.
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
- 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)
- Đặt tập lệnh vào thư mục trình chỉnh sửa (Assets > Editor > AFUpdatePlist.cs)
- 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");
}
}
}
Đã cập nhật khoảng 1 năm trước