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

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

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());
}

인앱 이벤트 및 유저 정보

주의하세요

기존 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)
    {
        ...
    }
}

도움이 되었나요?

더 필요한 내용이 있나요?