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 helpful?

    Any questions or suggestions?