SDK 迁移指南 - Unity SDK (v4)

您可以查看更新 Airbridge Unity SDK 过程中需要注意的内容。建议查看当前版本至目标更新版本之间的所有更新详情。

从 v1.x 更新至 v4.0

如果您将 Airbridge Unity SDK 更新至 v4.0,请查看以下内容。

SDK 安装及初始化

注意

如果将 Airbridge Unity SDK 从 v1.x.x 更新至 v4.0.0,请先删除以下已导入的文件夹,然后添加 Airbridge Unity SDK v4.0.0 包。

  • Assets/Airbridge

  • Assets/Plugins/Airbridge

Assets/Airbridge/Resources/AirbridgeData.asset 的键名已更改。请参考下方映射进行修改。

AirbridgeData.asset (v1)

AirbridgeData.asset (v4)

iosUriScheme

iOSURIScheme

AirbridgeUnity.StartTracking 函数已被 Airbridge.StartTracking 函数替代。

12
- AirbridgeUnity.StartTracking();
+ Airbridge.StartTracking();

AirbridgeUnity.StopTracking 函数已被 Airbridge.StopTracking 函数替代。

12
- AirbridgeUnity.StopTracking();
+ Airbridge.StopTracking();

深度链接

AirbridgeUnity.SetDeeplinkCallback 函数已被 Airbridge.SetOnDeeplinkReceived 函数替代。

123456789101112131415161718
public class AirbridgeManager : MonoBehaviour
{
    private void Awake()
    {
-        AirbridgeUnity.SetDeeplinkCallback(gameObject.name);

+        Airbridge.SetOnDeeplinkReceived((string url)  =>
+        {
+            // show proper content
+        });
    }

-    // Method will call by Airbridge when deeplink detected
-    private void OnTrackingLinkResponse(string url)
-    {
-        // show proper content
-    }   
}

Android 的 AirbridgeUnity.processDeeplinkData 函数已被 AirbridgeUnity.processHandleDeeplink 函数替代。

12345678
package co.ab180.airbridge.unity;

@Override
protected void onResume() {
    super.onResume();
-    AirbridgeUnity.processDeeplinkData(getIntent());
+    AirbridgeUnity.processHandleDeeplink(getIntent());
}

应用内事件及用户信息

注意

请使用 AirbridgeAttribute.VALUE 代替原 AirbridgeEvent.SetTotalValue 进行赋值。

从 Unity SDK v4 起,AirbridgeEvent.SetTotalValue 覆盖 value 赋值的逻辑已被删除。

AirbridgeUnity.TrackEvent 函数已被 Airbridge.TrackEvent 函数替代。

请参考下方示例代码,将 AirbridgeUnity.TrackEvent 函数修改为 Airbridge.TrackEvent 函数。

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
- AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.ORDER_COMPLETED);
- // action
- @event.SetAction("Tool");
- // label
- @event.SetLabel("Hammer");
- // value
- @event.SetValue(10);
-         
- // semantic attribute (provided by sdk)
- @event.SetCurrency("USD");
-         
- List<Airbridge.Ecommerce.Product> products = new List<Airbridge.Ecommerce.Product>();
- Airbridge.Ecommerce.Product plasticHammer = new Airbridge.Ecommerce.Product();
- // semantic attribute value (provided by sdk)
- plasticHammer.SetId("12345");
- // semantic attribute value (not provided by sdk)
- plasticHammer.AddData("name", "PlasticHammer");
- products.Add(plasticHammer);
- @event.SetProducts(products.ToArray());
-     
- // semantic attribute (not provided by sdk)
- @event.AddSemanticAttribute("totalQuantity", 1);
-        
- // custom attribute
- @event.AddCustomAttribute("promotion", "FirstPurchasePromotion");

+ Airbridge.TrackEvent(
+    category: AirbridgeCategory.ORDER_COMPLETED,
+    semanticAttributes: new Dictionary<string, object>()
+    {
+        // action
+        { AirbridgeAttribute.ACTION, "Tool" },
+        // label
+        { AirbridgeAttribute.LABEL, "Hammer" },
+        // value
+        { AirbridgeAttribute.VALUE, 10 },
+        // semantic attribute (provided by sdk)
+        { AirbridgeAttribute.CURRENCY, "USD" },
+        {
+            AirbridgeAttribute.PRODUCTS, new List<Dictionary<string, object>>()
+            {
+                new Dictionary<string, object>()
+                {
+                    // semantic attribute value (provided by sdk)
+                    { AirbridgeAttribute.PRODUCT_ID, "12345" },
+                    // semantic attribute value (not provided by sdk)
+                    { "name", "PlasticHammer" }
+                }
+            }
+        },
+        // semantic attribute (not provided by sdk)
+        { "totalQuantity", 1 }
+    },
+    customAttributes: new Dictionary<string, object>()
+    {
+        // custom attribute
+        { "promotion", "FirstPurchasePromotion" }
+    }
+);

注意

AirbridgeEvent 类已被移除。有关 Airbridge.TrackEvent 函数:

  • 第一参数:应包含原 AirbridgeEvent 构造函数中的 category 信息

  • 第二参数:应包含 AirbridgeEvent.SetActionAirbridgeEvent.SetLabelAirbridgeEvent.SetValue 以及 Semantic Attributes

  • 第三参数:应包含 Custom Attributes

AirbridgeUnity.SetUser 函数已被 Airbridge.SetUser 相关函数替代。不再支持一次性设置用户信息的 SetUser 函数。

12345678910111213
- AirbridgeUser user = new AirbridgeUser();
- user.SetId("personID");
- user.SetEmail("persondoe@airbridge.io");
- user.SetPhoneNumber("1(123)123-1234");
- user.SetAttribute("key", "value");
- user.SetAlias("key", "value");
- AirbridgeUnity.SetUser(user);

+ Airbridge.SetUserID("personID");
+ Airbridge.SetUserEmail("persondoe@airbridge.io");
+ Airbridge.SetUserPhone("1(123)123-1234");
+ Airbridge.SetUserAttribute("key", "value");
+ Airbridge.SetUserAlias("key", "value");

高级设置

AirbridgeUnity.ImpressionTrackingLink 函数已被 Airbridge.Impression 函数替代。

12345678910111213
- AirbridgeUnity.ImpressionTrackingLink("https://abr.ge/~~~");

+ Airbridge.Impression(
+    trackingLink: "https://abr.ge/~~~",
+    onSuccess: () =>
+    {
+        // Handle on success
+    },
+    onFailure: (Exception exception) =>
+    {
+        // Handle on failure
+    }
+);

AirbridgeUnity.ClickTrackingLink 函数已被 Airbridge.Click 函数替代。

12345678910111213
- AirbridgeUnity.ClickTrackingLink("https://abr.ge/~~~");

+ Airbridge.Click(
+    trackingLink: "https://abr.ge/~~~",
+    onSuccess: () =>
+    {
+        // Handle on success
+    },
+    onFailure: (Exception exception) =>
+    {
+        // Handle on failure
+    }
+);

AirbridgeUnity.SetOnAttributionReceived 函数已被 Airbridge.SetOnAttributionReceived 函数替代。

123456789101112131415161718
public class AirbridgeManager : MonoBehaviour
{
    private void Awake()
    {
-        AirbridgeUnity.SetOnAttributionReceived(gameObject.name);

+        Airbridge.SetOnAttributionReceived((Dictionary<string, object> attributionResult) =>
+        {
+            // using attribution
+        });
    }

-    // Method will call by Airbridge when attribution result received
-    private void OnAttributionResultReceived(string data)
-    {
-        // using attribution
-    }
}

设备标识符设置

12345678
- AirbridgeUnity.SetDeviceAlias("ADD_YOUR_KEY", "AND_YOUR_VALUE");
+ Airbridge.SetDeviceAlias("ADD_YOUR_KEY", "AND_YOUR_VALUE");

- AirbridgeUnity.RemoveDeviceAlias("DELETE_THIS_KEY");
+ Airbridge.RemoveDeviceAlias("DELETE_THIS_KEY");

- AirbridgeUnity.ClearDeviceAlias();
+ Airbridge.ClearDeviceAlias();

Airbridge SDK 的启用状态

12
- bool isSDKEnabled = AirbridgeUnity.IsSDKEnabled();
+ bool isSDKEnabled = Airbridge.IsSDKEnabled();

AirbridgeUnity.CreateWebInterface 函数已被 Airbridge.CreateWebInterfaceScriptAirbridge.HandleWebInterfaceCommand 函数替代。

123456789101112131415161718192021222324252627282930313233343536373839404142434445
private WebViewObject webViewObject;
string postMessageScript;

- AirbridgeWebInterface webInterface;

void Start()
{
    string PostMessageGenerator(string arg) =>
        $@"
if (window && window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.unityControl) {{
    window.webkit.messageHandlers.unityControl.postMessage({arg});
}} else {{
    var iframe = document.createElement('IFRAME');
    iframe.setAttribute('src', 'unity:' + {arg});
    document.documentElement.appendChild(iframe);
    iframe.parentNode.removeChild(iframe);
    iframe = null;
}}";

-    webInterface = AirbridgeUnity.CreateWebInterface(WebViewController.WebToken, (string command) => PostMessageGenerator(command));
-    postMessageScript = webInterface.Script;
+    postMessageScript = Airbridge.CreateWebInterfaceScript(WebViewController.WebToken, PostMessageGenerator("payload"));

    try
    {
        webViewObject.Init(
            cb: (msg) =>
            {
-                webInterface.Handle(msg);
+                Airbridge.HandleWebInterfaceCommand(msg);
            },
            ...
            ld: (msg) =>
            {
                webViewObject.EvaluateJS(postMessageScript);
            }
            ...
        );
        webViewObject.LoadURL("https://...");
    }
    catch (System.Exception e)
    {
        ...
    }
}

Was this page helpful?

Have any questions or suggestions?