SDK 마이그레이션 가이드 - 유니티 SDK

    에어브릿지 유니티 SDK의 업데이트에 필요한 사항을 확인할 수 있습니다. 현재 버전 이후부터 업데이트 이후 버전까지의 사항을 모두 확인하는 것을 권장합니다.

    v4.5.0으로 업데이트

    에어브릿지 유니티 SDK v4.5.0 업데이트 시, 안드로이드 딥링크 Intent Filter 설정이 /Assets/Plugins/Android/AndroidManifest.xml에서 /Assets/Plugins/Android/Airbridge.androidlib/AndroidManifest.xml로 이동했습니다. 기존 위치의 Intent Filter는 수동으로 제거해 주시기 바랍니다.

    v1.x에서 v4.0으로 업데이트

    에어브릿지 유니티 SDK를 v4.0으로 업데이트하면 확인해 주세요.

    SDK 설치 및 초기화

    주의하세요

    에어브릿지 유니티 SDK를 v1.x.x에서 v4.0.0으로 업데이트 하는 경우, 기존에 임포트한 아래에 해당하는 폴더들을 먼저 제거하고 에어브릿지 유니티 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
    -    }   
    }

    안드로이드의 AirbridgeUnity.processDeeplinkData 함수가 AirbridgeUnity.processHandleDeeplink 함수로 대체되었습니다.

    12345678
    package co.ab180.airbridge.unity;
    
    @Override
    protected void onResume() {
        super.onResume();
    -    AirbridgeUnity.processDeeplinkData(getIntent());
    +    AirbridgeUnity.processHandleDeeplink(getIntent());
    }

    커스텀 도메인 설정하기

    v1.x 에서는 하나의 커스텀 도메인만 입력할 수 있었지만, v4.0 부터는 여러 개의 커스텀 도메인을 입력할 수 있습니다.

    인앱 이벤트 및 유저 정보

    주의하세요

    기존 AirbridgeEvent.SetTotalValue 대신 AirbridgeAttribute.VALUE 에 값을 입력해 주세요.

    totalValue 를 사용하고 value 를 정의하면 totalValuevalue 를 덮어 쓰는 로직은 Unity SDK v4.0.0부터 삭제되었습니다.

    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 정보가 포함되어야 합니다. Airbridge.TrackEvent 함수의 두 번째 파라미터에 AirbridgeEvent.SetAction, AirbridgeEvent.SetLabel, AirbridgeEvent.SetValue, Semantic Attributes 값들이 포함되어야 합니다.

    Airbridge.TrackEvent 함수의 세 번째 파라미터에 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();

    에어브릿지 SDK의 활성화 여부

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

    AirbridgeUnity.CreateWebInterface 함수가 Airbridge.CreateWebInterfaceScript , Airbridge.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)
        {
            ...
        }
    }

    도움이 되었나요?

    더 필요한 내용이 있나요?