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으로 업데이트하면 확인해 주세요.

옵션

함수 (Unity)

주의하세요

접근 함수 클래스의 이름이 AirbridgeUnity 에서 Airbridge 로 변경되었습니다.

상수 (Unity)

함수 (Android)

SDK 설치 및 초기화

주의하세요

에어브릿지 유니티 SDK를 v1.x.x에서 v4.0.0으로 업데이트 하는 경우, 기존에 임포트한 아래에 해당하는 폴더들을 먼저 제거하고 에어브릿지 유니티 SDK v4.0.0 패키지를 추가해 주세요.

  • Assets/Airbridge

  • Assets/Plugins/Airbridge

Assets/Airbridge/Resources/AirbridgeData.asset 의 키값이 변경되었습니다. 아래와 같이 키값을 변경해 주세요.

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