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 의 키값이 변경되었습니다. 아래와 같이 키값을 변경해 주세요.

AirbridgeUnity.StartTracking 함수가 Airbridge.StartTracking 함수로 대체되었습니다.

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

AirbridgeUnity.StopTracking 함수가 Airbridge.StopTracking 함수로 대체되었습니다.

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

딥링크

AirbridgeUnity.SetDeeplinkCallback 함수가 Airbridge.SetOnDeeplinkReceived 함수로 대체되었습니다.

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 함수로 대체되었습니다.

package co.ab180.airbridge.unity; @Overrideprotected 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함수로 변경해 주세요.

- 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 함수는 지원하지 않습니다.

- 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 함수로 대체되었습니다.

- 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 함수로 대체되었습니다.

- 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 함수로 대체되었습니다.

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- }}

디바이스 식별자 설정

- 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의 활성화 여부

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

AirbridgeUnity.CreateWebInterface 함수가 Airbridge.CreateWebInterfaceScript , Airbridge.HandleWebInterfaceCommand 함수로 대체되었습니다.

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