Unity SDK

Unity SDK

설치link

  • 최신 버전의 Airbridge Unity SDK 를 다운로드 받아주세요.

  • 유니티 상단의 Assets > Import Package > Custom Package ... 를 클릭하여 패키지를 추가해 주세요.

  • 설치가 완료되면 유니티 상단의 AB180 탭을 확인 하실 수 있습니다.

설정link

  • 유니티 상단의 AB180 > Airbridge Settings 를 클릭하시면 아래와 같은 화면을 확인 할 수 있습니다.

unity airbridge settings

  • 각각의 필드들은 다음과 같은 입력값을 받습니다.
필드명설명
App Name대시보드의 Settings > Tokens에서 설정된 앱 이름(Unique ID)
App Token대시보드의 Settings > Tokens에서 발급된 앱 SDK 토큰
iOS URI Scheme대시보드의 Tracking Link > Deep Link > iOS에서 설정된 iOS URI Scheme
Android URI Scheme대시보드의 Tracking Link > Deep Link > Android에서 설정된 Android URI Scheme
Reopen Session Timeout Seconds어플리케이션의 Reopen 세션 유지 시간 (최소 0초 ~ 최대 604,800초)
Auto Start User Tracking자동 추적 시작 여부 (자세한 사항은 여기에서 확인해 주세요.)

필드 입력 완료 후 적용을 위해 Update iOS App Setting 혹은 Update Android Manifest를 반드시 눌러주세요.

Android Manifest 파일을 사용자가 직접 Merge 작업을 수행하고 싶은 경우, Project > Plugins > Airbridge > Android > AndroidManifest.xml 피일을 참조하여 주세요.

테스트link

  • 설정이 완료되면 어플리케이션 설치 후 대시보드의 Raw Data > App Real-time Log에서 해당 어플리케이션의 이벤트를 확인하실 수 있습니다.

    Real-time Log는 최장 5분의 지연시간이 있을 수도 있습니다.

unity airbridge test

초기화link

  • Airbridge Unity의 경우 별도의 초기화 작업은 필요로 하지 않습니다.

특수한 경우 각 플랫폼마다 별도의 마이그레이션 작업이 필요할 수도 있습니다.
자세한 사항은 Troubleshooting 섹션을 확인해 주세요.

식별자link

  • Airbridge Unity는 다음과 같은 방법을 통하여 전송하는 이벤트의 고유식별자를 설정할 수 있습니다.
AirbridgeIdentifier identifier = new AirbridgeIdentifier();
identifier.SetUserId(UserId);
identifier.SetUserEmail(Email);
identifier.SetUserPhoneNumber(Phone);
AirbridgeUnity.SetIdentifier(identifier);

Sign Up Sign In 그리고 Sign Out과 같은 이벤트들은 자동적으로 식별자 정보를 변경시킬 수 있습니다.
자세한 사항은 회원 이벤트섹션을 확인해 주세요.

이벤트link

  • Airbridge Unity는 다음과 같은 방법을 통하여 이벤트를 전송할 수 있습니다.
AirbridgeEvent @event = new AirbridgeEvent("category");
@event.SetAction("action");
@event.SetLabel("label");
@event.SetValue(value);
AirbridgeUnity.SendEventData(@event);
  • Airbridge Unity는 유저 혹은 이커머스 이벤트와 같이 미리 정해놓은 포멧을 이용해 이벤트를 전송할 수 있습니다.

유저 이벤트link

유저 이벤트 전송 시 자동으로 식별자 정보가 변경될 수 있습니다. 이를 원치 않으시는 경우 식별자와 함께 커스텀 이벤트를 이용하여 주세요.

1. 회원가입 이벤트link

AirbridgeIdentifier identifier = new AirbridgeIdentifier();
identifier.SetUserId(UserId);
identifier.SetUserEmail(Email);
identifier.SetUserPhoneNumber(Phone);
AirbridgeUnity.SetIdentifier(identifier);
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.SIGN_UP);
@event.SetIdentifier(identifier);
AirbridgeUnity.SendEventData(@event);

식별자를 함께 포함하여 전송하게되면 자동으로 Airbridge Unity의 식별자 정보가 자동으로 변경됩니다.

2. 로그인 이벤트link

AirbridgeIdentifier identifier = new AirbridgeIdentifier();
identifier.SetUserId(UserId);
identifier.SetUserEmail(Email);
identifier.SetUserPhoneNumber(Phone);
AirbridgeUnity.SetIdentifier(identifier);
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.SIGN_IN);
@event.SetIdentifier(identifier);
AirbridgeUnity.SendEventData(@event);

식별자를 함께 포함하여 전송하게되면 자동으로 Airbridge Unity의 식별자 정보가 자동으로 변경됩니다.

3. 로그아웃 이벤트link

AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.SIGN_OUT);
AirbridgeUnity.SendEventData(@event);

로그아웃 이벤트 호출 시 Airbridge Unity의 식별자 정보가 자동으로 초기화 됩니다.

이커머스 이벤트link

1. 메인 화면 이벤트link

AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.VIEW_HOME);
AirbridgeUnity.SendEventData(@event);

2. 검색결과 화면 이벤트link

List<Airbridge.Ecommerce.Product> beverages = new List<Airbridge.Ecommerce.Product>();
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25f);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
beverages.Add(cocacola);
Airbridge.Ecommerce.Product fanta = new Airbridge.Ecommerce.Product();
fanta.SetId("beverage_3");
fanta.SetName("Fanta");
fanta.SetPrice(1500f);
fanta.SetCurrency("KRW");
fanta.SetQuantity(1);
fanta.SetPosition(2);
beverages.Add(fanta);
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.VIEW_SEARCH_RESULT);
@event.SetQuery("SELECT * FROM beverages");
@event.SetProducts(beverages.ToArray());
AirbridgeUnity.SendEventData(@event);

3. 상품리스트 화면 이벤트link

List<Airbridge.Ecommerce.Product> beverages = new List<Airbridge.Ecommerce.Product>();
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25f);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
beverages.Add(cocacola);
Airbridge.Ecommerce.Product fanta = new Airbridge.Ecommerce.Product();
fanta.SetId("beverage_3");
fanta.SetName("Fanta");
fanta.SetPrice(1500f);
fanta.SetCurrency("KRW");
fanta.SetQuantity(1);
fanta.SetPosition(2);
beverages.Add(fanta);
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.VIEW_PRODUCT_LIST);
@event.SetProductListId("beverage_list_0");
@event.SetProducts(beverages.ToArray());
AirbridgeUnity.SendEventData(@event);

4. 상품상세 화면 이벤트link

Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25f);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.VIEW_PRODUCT_DETAILS);
@event.SetProducts(cocacola);
AirbridgeUnity.SendEventData(@event);

5. 장바구니 이벤트link

Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25f);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.ADD_TO_CART);
@event.SetProducts(cocacola);
AirbridgeUnity.SendEventData(@event);

6. 주문완료 이벤트link

List<Airbridge.Ecommerce.Product> beverages = new List<Airbridge.Ecommerce.Product>();
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25f);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
beverages.Add(cocacola);
Airbridge.Ecommerce.Product fanta = new Airbridge.Ecommerce.Product();
fanta.SetId("beverage_3");
fanta.SetName("Fanta");
fanta.SetPrice(1500f);
fanta.SetCurrency("KRW");
fanta.SetQuantity(1);
fanta.SetPosition(2);
beverages.Add(fanta);
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.ORDER_COMPLETE);
@event.SetTransactionId("transaction_123");
@event.SetProducts(beverages.ToArray());
@event.SetInAppPurchased(true);
AirbridgeUnity.SendEventData(@event);

딥링크link

설정link

  • 딥링크 기능 사용을 위하여 미리 각각 어플리케이션 정보를 Airbridge 대시보드에 등록하여 주세요.

unity airbridge deeplink

사용link

  • 유저가 클릭한 딥링크 데이터를 전송받기 위하여 다음과 같이 함수호출과 함께 메시지를 받기위한 오브젝트명이 필요합니다.
private void Awake()
{
AirbridgeUnity.SetDeeplinkCallback("AirbridgeManager");
}
  • 위와 같이 Callback을 등록하게 되면 해당 클래스는 다음과 같은 함수로 딥링크 URL을 넘겨받게 됩니다.
// Method will call by Airbridge when deeplink detected
private void OnTrackingLinkResponse(string url)
{
}

Airbridge Unity는 내부적으로 Unity에서 제공하는 UnitySendMessage 기능을 이용하고 있습니다.

추가 수집link

  • Airbridge Unity에서 선택적으로 추가적인 데이터를 수집할 수 있습니다.

트래킹링크 실행 및 추적link

  • Airbridge Unity는 다음과 같은 방법을 통하여 트래킹링크를 실행 및 추적할 수 있습니다.

1. Clicklink

  • 아래와 같이 호출 시 해당 트래킹링크의 Click 통계를 1개 추가하고 어플리케이션 혹은 웹페이지로 이동합니다.
AirbridgeUnity.ClickTrackingLink("https://abr.ge/~~~", "ablog://main", "https://airbridge.io");

2. Impressionlink

  • 아래와 같이 호출 시 해당 트래킹링크의 Impression 통계를 1개 추가합니다.
AirbridgeUnity.ImpressionTrackingLink("https://abr.ge/~~~");

이통사 정보 수집link

안드로이드에서만 가능한 추가 기능입니다.

  • 이 기능은 유저 판별의 정확도 향상에 도움이 됩니다.

  • 사용자의 이통사 정보를 수집하기 위해 다음과 같은 권한을 Project > Plugins > Android > AndroidManifest.xml 파일에 추가해 주세요.

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

추적 중지link

  • GDPR과 같이 데이터 수집에 특수한 조건 처리가 필요한 경우 아래와 같은 방법으로 SDK 데이터 수집 기능을 중단하거나 시작할 수 있습니다.
// true : 수집 중지 false : 수집 시작
AirbridgeUnity.SetLimitUserTracking(true);
설정에서 `Auto Start User Tracking` 값을 False로 설정한 경우에 `AirbridgeUnity.SetLimitUserTracking(false)`를 임의로 호출하기 전까지 SDK가 해당 기기의 데이터를 수집하지 않습니다.

Troubleshootinglink

Androidlink

1. Android 기기에서 올바르게 Airbridge Unity가 초기화 되지 않는 경우link

  • Airbridge Unity Android의 경우 Content Provider를 통하여 자동으로 초기화 됩니다. 올바른 초기화 작업을 위하여 Project > Plugins > Android > AndroidManifest.xml 파일에 다음과 같은 Xml Tag가 반드시 올바르게 명시되어야 합니다.
<provider
android:authorities="${applicationId}.co.ab180.airbridge.unity.AirbridgeContentProvider"
android:name="co.ab180.airbridge.unity.AirbridgeContentProvider"
android:exported="false" />

2. Android 기기에서 사용자가 이미 Custom Activity를 사용하는 경우link

  • Airbridge Unity는 올바른 딥링크의 호출을 위해 Custom Activity를 사용하고 있습니다. 사용자가 이미 Custom Activity를 사용하고 있을 경우, 해당 Custom Activity에 아래와 같은 코드를 추가해 주세요.
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
@Override
protected void onResume() {
super.onResume();
AirbridgeUnity.processDeeplinkData(getIntent());
}

3. Android Manifest 파일이 제대로 Merge 되지 않는 경우link

  • Airbridge Unity에서 제공되는 Android Manifest Merger는 이미 존재하는 Project > Plugins > Android > AndroidManifest.xml를 읽어들여 Airbridge Unity에서 제공되는 Project > Plugins > Airbridge > Android> AndroidManifest.xml를 단순하게 Merge 해주는 컴포넌트로서 모든 사용자의 케이스에 맞춰 원하는 형태로 출력하는데 있어서는 한계가 있습니다. 이와 같은 경우 사용자가 직접 해당 AndroidManifest.xml를 Merge 해야 합니다.

iOSlink

1. iOS 에서 Custom AppController 를 사용하는 경우link

  • Airbridge Unity iOS의 경우 유니티에서 제공하는 IMPL_APP_CONTROLLER_SUBCLASS를 이용하여 Custom AppController를 생성합니다. 이미 IMPL_APP_CONTROLLER_SUBCLASS를 사용하여 Custom AppController 를 구현한 경우 해당 Custom AppController 에 아래와 같은 코드를 추가해 주세요.
- (BOOL) application:(UIApplication*)application
continueUserActivity:(NSUserActivity*)userActivity
restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>>* _Nullable))restorationHandler
{
[AUAppDelegate.instance application:application
continueUserActivity:userActivity
restorationHandler:restorationHandler];
return YES;
}
  • 해당 작업 완료 후 기존의 Airbridge Unity SDK Assets > Plugins > Airbridge > iOS > Delegate > AUAppController.mm 파일 제거해 주세요.