Unity SDK

SDK설치

에어브릿지 유니티 SDK는 최소 2018.4 버전 이상의 유니티 버전을 필요로 합니다.

주의하세요

에어브릿지 유니티 SDK는 unity-jar-resolver(External Dependency Manager for Unity)를 통해 라이브러리 종속성을 관리하고 있습니다.
Airbridge Unity SDK 1.9.3 미만의 버전을 사용하는 경우 다음 페이지를 통해 미리 해당 유니티 패키지 설정을 완료해 주세요.

Airbridge Unity SDK 1.9.3 이상의 버전부터는 Airbridge Plugin 과 EDM4U 에셋을 모두 자동으로 가져오기 때문에 별도의 유니티 패키지 설정을 하실 필요가 없습니다.

패키지 설치

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

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

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

프로젝트 설정

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

주의하세요

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

주의하세요

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

앱 정보 설정

유니티 상단의 AB180 > Airbridge Settings의 App Name 및 App Token 필드에 대시보드에서 설정된 앱 이름 (Unique ID)과 앱 SDK 토큰 정보를 각각 입력해 주세요.

해당 정보는 Airbridge 대시보드의 → Settings → Tokens 탭에서 확인하실 수 있습니다.

초기화

Airbridge Unity SDK의 경우 별도의 초기화 작업은 필요로 하지 않으나 특수한 경우 각 플랫폼마다 별도의 마이그레이션 작업이 필요할 수도 있습니다.

Application Entry Point 설정

유니티 2023.1 또는 이후 버전을 사용하시면, 프로젝트에서 설정한 [Android Player Settings] > [Other Settings] > [Configuration] > [Application Entry Point]가 무엇이냐에 따라 다르게 설정해주세요.

별도로 설정하지 않으셨다면 Unity 6 버전은 GameActivity 가이드를, Unity 6 버전 미만은 Activity 가이드를 따라 설정해주시면 됩니다.

SDK 설치 확인

에어브릿지 SDK의 기본 설치 및 설정이 완료 후 다음과 같은 방법들을 통해서 올바르게 설정 되었는지 확인하실 수 있습니다.

로그로 확인

해당 앱의 자세한 로그 정보를 확인하고 싶으신 경우, 유니티 상단의 AB180 > Airbridge Settings의 Log Level 필드 설정을 통하여 확인하실 수 있습니다.

대시보드에서 확인

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

주의하세요

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

딥링크 설정


대시보드 설정

각각 iOS 및 Android 플랫폼 별 딥링크 대시보드 설정은 다음과 같습니다.

프로젝트 설정

iOS 딥링크 설정

유니티 상단의 AB180 > Airbridge Settings의 iOS URI Scheme 필드에 대시보드에서 설정된 iOS URI Scheme 정보를 입력해 주세요.

해당 정보는 Airbridge 대시보드의 → Tracking Link → Deep Link 탭에서 확인하실 수 있습니다.

Android 딥링크 설정

유니티 상단의 AB180 > Airbridge Settings의 Android URI Scheme 필드에 대시보드에서 설정된 Android URI Scheme 정보를 입력해 주세요.

해당 정보는 Airbridge 대시보드의 → Tracking Link → Deep Link 탭에서 확인하실 수 있습니다.

커스텀 도메인 설정

Airbridge 대시보드에서 트래킹 링크를 생성하게 되는 경우 deeplink.page 혹은 abr.ge 형태의 트래킹 링크를 사용할 수 있지만, 고객사에서는 트래킹 링크의 브랜딩 및 클릭률(CTR)의 향상을 위해 다음과 같은 설정을 통해 go.my_company.com/abcd와 같이 커스터마이즈 된 URL을 트래킹 링크로 사용할 수 있습니다.

  1. 사용할 커스텀 도메인을 다음 가이드와 같이 설정해 주세요.

  2. 앞서 설정한 커스텀 도메인 주소를 유니티 상단의 AB180 > Airbridge Settings의 Custom Domain 필드에 입력해 주세요.

딥링크 콜백 설정

유저가 클릭한 딥링크 데이터를 전송받기 위해 다음과 같이 메시지를 받기 위한 오브젝트명을 등록해 주세요.

1234
private void Awake()
{
    AirbridgeUnity.SetDeeplinkCallback("AirbridgeManager");
}

위와 같이 Callback을 등록하게 되면 해당 클래스는 다음과 같은 함수를 통해 딥링크 URL을 넘겨받게 됩니다.

1234567891011121314
using UnityEngine;

public class AirbridgeManager : MonoBehaviour
{ 
  private void Awake() {
    AirbridgeUnity.SetDeeplinkCallback("AirbridgeManager");
  }
  
  // Method will call by Airbridge when deeplink detected
  private void OnTrackingLinkResponse(string url)
  {

  }
}

Airbridge Unity는 내부적으로 Unity에서 제공하는 UnitySendMessage 기능을 이용하여 딥링크 정보를 전달하고 있습니다.

딥링크 설정 확인

Airbridge Unity SDK의 딥링크 설정이 완료 후 다음과 같은 링크들을 통하여 해당 모바일 앱의 페이지로 올바르게 이동 되는지 확인하실 수 있습니다.

  • scheme://

딥링크 설정 및 확인이 완료되면 Airbridge 대시보드 → Raw Data → App Real-time Log 탭에서 다음과 같이 확인하실 수 있습니다.

사용자 설정


사용자 식별자 및 설정

Airbridge에서는 웹(Web)과 앱(App)간의 파편화된 사용자의 기여도 측정을 위해 다음과 같은 사용자의 식별자 정보들을 수집합니다.

  • User Email : 이메일

  • User Phone : 전화번호

  • User ID : 사용자 고유 ID (사용자의 특정할 수 있는 ID 값으로 웹과 앱에서 1:1로 대응되어야 합니다)

  • User Alias : 사용자를 나타낼 수 있는 기타 ID (e.g. 로열티 프로그램용 ID, 계열사 통합 ID 등등)

입력되어진 사용자의 이메일과 전화번호는 자동으로 해시화(SHA256)되어 서버로 전송되어 집니다.

Airbridge Unity SDK에서는 다음과 같은 방법을 통해 사용자의 식별자 정보를 설정할 수 있습니다.

1234567
Dictionary<string, string> alias = new Dictionary<string, string>();
AirbridgeUser user = new AirbridgeUser();
user.SetId("personID");
user.SetEmail("persondoe@airbridge.io");
user.SetPhoneNumber("1(123)123-1234");
user.SetAlias("key", "value");
AirbridgeUnity.SetUser(user);
  • User Alias의 개수는 최대 10개입니다.

  • User Alias의 key 는 String 타입이며, 길이는 최대 128자입니다.

  • User Alias의 key 는 ^[a-z_][a-z0-9_]*$ 정규식

    을 만족해야 합니다.

  • User Alias의 value 는 String 타입이며 String의 경우 최대 128자입니다.

사용자의 식별자 정보를 한번 설정하게 되면 모든 이벤트에 해당 식별자 정보가 함께 포함되어 전달됩니다.

사용자 속성 설정

MTA(Multi-Touch Attribution) 분석의 정확도 향상, 내부 데이터 분석, 서드파티(3rd Party) 솔루션 연동 등의 목적으로 사용자의 추가 속성 데이터를 설정할 수 있습니다.

1234
Dictionary<string, object> attrs = new Dictionary<string, object>();
AirbridgeUser user = new AirbridgeUser();
user.SetAttributes("key", "value");
AirbridgeUnity.SetUser(user);
  • User Attribute의 개수는 최대 100개입니다.

  • User Attribute의 key 는 String 타입이며, 길이는 최대 128자입니다.

  • User Attribute의 key 는 ^[a-z_][a-z0-9_]*$ 정규식을 만족해야 합니다.

  • User Attribute의 value 는 Integer, Float, Long, Boolean 타입String 타입이며 String의 경우 최대 1024자입니다.

사용자 설정 확인

Airbridge Unity SDK에서 설정한 유저 정보는 Airbridge 대시보드 → Raw Data → App Real-time Log 탭에서 다음과 같이 확인하실 수 있습니다.

디바이스 설정


디바이스 식별자 설정

SDK에 디바이스 식별자 정보를 설정해 이후 수집되는 모든 이벤트에 디바이스 식별정보를 포함시킬 수 있습니다. 디바이스 식별자가 설정되면 별도로 삭제하지 않을 경우 앱 종료 여부에 관계없이 계속 유지됩니다.

123
AirbridgeUnity.SetDeviceAlias("ADD_YOUR_KEY", "AND_YOUR_VALUE");
AirbridgeUnity.RemoveDeviceAlias("DELETE_THIS_KEY");
AirbridgeUnity.ClearDeviceAlias();

메소드

설명

SetDeviceAlias(string key, string value)

전달한 Key와 Value 쌍을 디바이스 식별자에 추가합니다.

RemoveDeviceAlias(string key)

전달한 Key에 해당하는 디바이스 식별자를 삭제합니다. 해당하는 식별자가 없을 경우 아무런 동작을 하지 않습니다.

ClearDeviceAlias()

모든 디바이스 식별자를 삭제합니다.

이벤트 설정


Airbridge Unity SDK에서 호출하는 모든 이벤트들은 다음과 같이 6개의 하위 속성 값들과 함께 전송할 수 있습니다.

  • Event Category : 이벤트의 이름 Required(string)

  • Event Action : 이벤트 하위 속성값 1 (string)

  • Event Label : 이벤트 하위 속성값 2 (string)

  • Event Value : 이벤트 하위 속성값 3 (double)

  • Event Custom Attributes : 이벤트 하위의 커스텀 데이터 (Dictionary<string, object>)

  • Event Semantic Attributes : 이벤트 하위의 시멘틱 데이터 (Dictionary<string, object>)

사용자 이벤트 전송

Airbridge Unity SDK에서는 편의를 위해 다음과 같은 3가지 유저 이벤트를 제공하고 있습니다.

  • 회원가입 (Sign up)

12345678910
Dictionary<string, string> alias = new Dictionary<string, string>();
AirbridgeUser user = new AirbridgeUser();
user.SetId(UserId);
user.SetEmail(Email);
user.SetPhoneNumber(Phone);
user.SetAlias(alias);
AirbridgeUnity.SetUser(user);

AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.SIGN_UP);
AirbridgeUnity.TrackEvent(@event);

  • 로그인 (Sign in)

12345678910
Dictionary<string, string> alias = new Dictionary<string, string>();
AirbridgeUser user = new AirbridgeUser();
user.SetId(UserId);
user.SetEmail(Email);
user.SetPhoneNumber(Phone);
user.SetAlias(alias);
AirbridgeUnity.SetUser(user);

AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.SIGN_IN);
AirbridgeUnity.TrackEvent(@event);

  • 로그아웃 (Sign out)

123
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.SIGN_OUT);
AirbridgeUnity.TrackEvent(@event);
AirbridgeUnity.ExpireUser();

이커머스 이벤트 전송

Airbridge Unity SDK에서는 편의를 위해 다음과 같은 상품 클래스와 함께 이커머스 이벤트를 제공하고 있습니다.

1234567
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);

  • 홈 화면 (Home Screen)

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

  • 검색 결과 조회 (Search Results)

123456789101112131415161718192021222324
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.25);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
beverages.Add(cocacola);

Airbridge.Ecommerce.Product fanta = new Airbridge.Ecommerce.Product();
fanta.SetId("beverage_2");
fanta.SetName("Fanta");
fanta.SetPrice(10.99);
fanta.SetCurrency("USD");
fanta.SetQuantity(1);
fanta.SetPosition(1);
beverages.Add(fanta);

AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.VIEW_SEARCH_RESULT);
@event.SetQuery("SELECT * FROM beverages");
@event.SetProducts(beverages.ToArray());
@event.SetValue(12.24);
AirbridgeUnity.TrackEvent(@event);

  • 상품 리스트 조회 (Product List)

123456789101112131415161718192021222324
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.25);
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(10.99);
fanta.SetCurrency("USD");
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());
@event.SetValue(12.24);
AirbridgeUnity.TrackEvent(@event);

  • 상품 상세 페이지 조회 (Product Details)

1234567891011
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);

AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.VIEW_PRODUCT_DETAILS);
@event.SetProducts(cocacola);
AirbridgeUnity.TrackEvent(@event);

  • 장바구니 담기 (Add to Cart)

12345678910111213
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);

AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.ADDED_TO_CART);
@event.SetProducts(cocacola);
@event.SetCurrency("USD");
@event.SetValue(1.25);
AirbridgeUnity.TrackEvent(@event);

  • 결제 완료 (Order Complete)

1234567891011121314151617181920212223242526
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.25);
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(10.99f);
fanta.SetCurrency("USD");
fanta.SetQuantity(1);
fanta.SetPosition(2);
beverages.Add(fanta);

AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.ORDER_COMPLETED);
@event.SetTransactionId("transaction_123");
@event.SetProducts(beverages.ToArray());
@event.SetCurrency("USD");
@event.SetInAppPurchased(true);
@event.SetValue(1.25);
AirbridgeUnity.TrackEvent(@event);

커스텀 이벤트 전송

Airbridge Unity SDK에서는 다음과 같은 방법을 통해 커스터마이즈 된 이벤트를 전송할 수 있습니다.

1234567
AirbridgeEvent @event = new AirbridgeEvent("category");
@event.SetAction("action");
@event.SetLabel("label");
@event.SetValue(9999);
@event.AddCustomAttribute("custom_key", "value");
@event.AddSemanticAttribute("query", "query_123");
AirbridgeUnity.TrackEvent(@event);

Semantic Attributes를 직접 구성하여 전달하기 위해서는 다음 페이지를 참조해 주세요.

이벤트 전송 확인

Airbridge Unity SDK에서 전송된 이벤트 정보는 Airbridge 대시보드 → Raw Data → App Real-time Log 탭에서 다음과 같이 확인하실 수 있습니다.

고급 설정


SDK Signature 설정

Airbirdge Unity SDK에서는 유니티 상단의 AB180 > Airbridge Settings의 Sdk Signature Secret ID 필드와 Sdk Signature Secret 필드의 설정을 통해 SDK 를 SDK Spoofing 으로 부터 보호할 수 있습니다.

SDK Signature를 설정하기 위해서는 SDK Signature 보안 정보가 필요합니다. SDK Signature 보안 정보를 생성하기 위한 자세한 내용은 에어브릿지 가이드를 참고해 주세요.

사용자 정보 해시화 설정

내부의 데이터 분석 등의 목적을 위해 HASH(SHA256)하지 않고 사용자의 식별자 정보를 전송하고 싶은 경우, 유니티 상단의 AB180 > Airbridge Settings의 User Info Hash Enabled 필드의 설정을 통해 User Email 그리고 User Phone 정보의 해시화(SHA256)를 중단할 수 있습니다.

주의하세요

해당 옵션은 User Email과 User Phone 등 민감한 개인정보를 제 3자에게 제공하기 때문에 내부적으로 별도의 보안 조치가 선행되어져야 합니다.

세션 타임아웃 설정

Airbirdge Unity SDK에서는 유니티 상단의 AB180 > Airbridge Settings의 Session Timeout Seconds 필드의 설정을 통해 설정된 세션 시간 내에 유저가 앱을 재 실행 하더라도 같은 세션으로 판단하여 앱 실행 이벤트를 다시 보내지 않도록 할 수 있습니다.

옵트인(Opt-in) 설정하기

해당 기능은 GDPR이나 CCPA와 같이 고객으로부터 개인정보보호에 대한 동의를 받아 데이터 수집 및 전송을 진행하는 경우에 유용한 기능입니다.

유니티 상단 메뉴바의 AB180 > Airbridge Settings에서 Auto Start Tracking Enabled 필드를 체크하여 데이터 수집과 전송을 명시적으로 시작할 수 있습니다.

해당 기능을 비활성화한 경우, 다음과 같은 함수를 명시적으로 호출해야 올바르게 데이터 수집이 이루어집니다.

1
AirbridgeUnity.StartTracking();

옵트아웃(Opt-out) 설정하기

알립니다

필수 설정 기능이 아닙니다. 필요한 기능인지 확인한 후에 설정해 주세요.

옵트아웃(Opt-Out)은 유저가 거부하기 전에 유저 정보를 사용하는 정책입니다.

setAutoStartTrackingEnabled 설정을 true로 설정한 후에 이벤트를 수집할 수 없는 시점에 stopTracking 함수를 호출합니다. stopTracking 함수가 호출된 시점부터 이벤트를 수집하지 않습니다.

1
AirbridgeUnity.stopTracking();

Airbridge 링크만 추적 설정

광고주의 앱 내에서 다수의 딥링크 동작으로 인해 Airbridge를 통한 Re-engagement 성과를 한눈에 확인하기 어려운 경우, 유니티 상단의 AB180 > Airbridge Settings의 Track Airbridge Link Only 필드의 설정을 통하여 Airbridge 딥링크를 통해 들어온 성과만 필터링하도록 설정할 수 있습니다.

해당 기능을 활성화할 경우 아래의 조건을 만족한 딥링크를 통해 앱이 오픈 된 경우에 한하여 딥링크 성과로 측정합니다.

  • 대시보드에 등록된 형태의 딥링크를 통해 앱이 오픈 된 경우

  • airbridge.io딥링크를 통해 앱이 오픈 된 경우

  • deeplink.page딥링크를 통해 앱이 오픈 된 경우

  • airbridge_referrer query 정보가 존재하는 경우

위치 정보 수집

Airbridge Unity SDK에서는 유니티 상단의 AB180 > Airbridge Settings의 Location Collection Enabled 필드의 설정을 통하여 유저의 위치 정보를 수집할 수 있습니다.

주의하세요

위치 정보는 합법적인 목적과 방법을 통하여 수집되어야 하므로 본 기능 사용에 주의가 요구됩니다.

해당 기능은 오직 안드로이드에서 사용 가능하며 다음과 같은 권한이 AndroidManifest.xml에 포함되어야 합니다.

12
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

페이스북 디퍼드 앱링크 설정

Facebook의 Deferred App Link를 유니티 상단의 AB180 > Airbridge Settings의 Facebook Deferred App Link Enabled 필드의 설정을 통하여 Airbridge Unity SDK에서 함께 받아 보실 수 있습니다.

주의하세요

해당 기능을 사용하기 위해서 미리 Facebook SDK 설정이 선행되어져야 합니다.
참조 - https://developers.facebook.com/docs/unity/

앱 추적 허용 설정

iOS 14의 정책 변화에 따라 iOS에서 앱 추적 허용 설정(App Tracking Transparency)을 통하여 사용자에게 동의를 얻어야 올바르게 IDFA 정보를 수집할 수 있습니다.

Airbridge Unity SDK에서는 유니티 상단의 AB180 > Airbridge Settings의 iOS Tracking Authorize Timeout Seconds 설정을 통해 설치 이벤트를 지연하여 올바르게 IDFA가 인스톨 이벤트에 포함되도록 설정할 수 있습니다.

App Tracking Transparency Prompt 제공하기

앱 추적 투명성(App Tracking Transparency, ATT) 정책에 따라 iOS 버전 14.5 이상에서 IDFA를 수집하기 위해서는 AppTrackingTransparency를 사용한 팝업창을 제공해야 합니다. AppTrackingTransparency를 사용한 팝업창에서 개인정보 사용에 동의한 유저의 IDFA만 수집할 수 있습니다.

OnCreate.cs
1234
void Start() {
    AppTrackingTransparency.RequestTrackingAuthorization();
}

또는 유니티 가이드를 참고해 팝업창을 제공할 수 있습니다. 2가지 방법 중에서 1가지 방법만 활용해 주세요.

메타 인스톨 리퍼러 수집 설정

메타 인스톨 리퍼러(Meta Install Referrer) 수집에 필요한 설정입니다.

Airbridge Unity SDK에서는 유니티 상단의 AB180 > Airbridge Settings의 Meta Install Referrer (Facebook App ID) 에 Facebook App ID 를 전달합니다.

설정한 이후에 암호 해독 키를 에어브릿지 대시보드에 입력해야 복호화된 메타 인스톨 리퍼러를 확인할 수 있습니다. 암호 해독 키를 입력하는 방법은 에어브릿지 가이드를 참고해 주세요.

Uninstall Tracking 설정 방법

앱 삭제 추적 설정은 Airbridge Unity SDK v1.9.0 이후 버전 부터 사용 가능합니다.

Android Uninstall Tracking

1. Firebase Cloud Messaging 설정

Firebase Cloud Messaging 공식 문서를 참고하여 앱의 기본 설정을 완료해 주세요.

2. Firebase Push Token 전송

Firebase Cloud Messaging 설정을 통해 생성되어지는 Push Token을 다음 가이드를 참고하여 전달해 주세요.

12345678910111213141516
public void Start() {
  Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
  Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}

public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) {
#if UNITY_ANDROID
  AirbridgeUnity.RegisterPushToken(token.Token);
#endif
}

// Make sure the notification is not shown on the device if the remote message value is airbridge-uninstall-tracking.
public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) {
  if (e.Message.Data.ContainsKey("airbridge-uninstall-tracking")) return;
  ...
}

iOS Uninstall Tracking

1. Apple Push Notification service 설정

Unity Mobile Notifications package 공식 문서를 참고하여 해당 패키지를 설치해 주세요.

2. Device Token 전송

APNs Device Token을 다음 가이드를 참고하여 전달해 주세요.

123456789101112131415161718192021222324
void Start()
{
#if UNITY_IOS
  StartCoroutine(RequestAuthorization());
#endif
}

#if UNITY_IOS
IEnumerator RequestAuthorization()
{
  var authorizationOption = AuthorizationOption.Alert | AuthorizationOption.Badge;
  using (var req = new AuthorizationRequest(authorizationOption, true))
  {
    while (!req.IsFinished)
    {
      yield return null;
    };
    if (req.Granted && req.DeviceToken != "")
    {
      AirbridgeUnity.RegisterPushToken(req.DeviceToken);
    }
  }
}
#endif

하이브리드 앱 설정

Web SDK만의 설치로는 앱 설치 및 실행 또는 딥링크 호출 등의 추가적인 이벤트를 트래킹 할 수가 없습니다. Airbridge 에서는 다음과 같은 설정을 통하여 쉽게 하이브리드 앱에서 인앱 이벤트를 호출할 수 있습니다.

12345
AirbridgeWebInterface webInterface;
webInterface = AirbridgeUnity.CreateWebInterface(
    "YOUR_WEB_TOKEN",     // web token
    (msg) => $@"..."      // post command function
);

AirbridgeUnity.CreateWebInterface 를 통해서 Web Interface 를 제어 할 수 있습니다.
아래 연동가이드를 확인 해주세요.

Unity 하이브리드 앱 연동 가이드

주의하세요

Airbridge Unity SDK 1.9.3 버전 부터 하이브리드 앱 설정 기능을 제공합니다.

Troubleshooting


Android

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

  • Airbridge Unity Android의 경우 Content Provider를 통하여 자동으로 초기화 됩니다. 올바른 초기화 작업을 위하여 Project > Plugins > Android > AndroidManifest.xml파일에 다음과 같은 Xml Tag가 반드시 올바르게 명시되어야 합니다.

1234
<provider
    android:authorities="${applicationId}.co.ab180.airbridge.unity.AirbridgeContentProvider"
    android:name="co.ab180.airbridge.unity.AirbridgeContentProvider"
    android:exported="false" />

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

  • Airbridge Unity는 올바른 딥링크의 호출을 위해 Custom Activity를 사용하고 있습니다. 사용자가 이미 Custom Activity를 사용하고 있을 경우, 해당 Custom Activity에 아래와 같은 코드를 추가해 주세요.

1234567891011
@Override
protected void onNewIntent(Intent intent) {
  super.onNewIntent(intent);
  setIntent(intent);
}

@Override
protected void onResume() {
  super.onResume();
  AirbridgeUnity.processDeeplinkData(getIntent());
}

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

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

4. Missing 'package' key attribute on element package at ...

안드로이드 11 버전의 Package Visibility 정책 추가로 해당 버전을 지원하는 모든 어플리케이션에서 다른 어플리케이션과 올바르게 상호작용하기 위해 어떤 패키지와 상호작용이 이루어 지는지에 대해서 manifest의 <queries>를 통해 유저에게 올바르게 고지하여야 합니다.

Airbridge에서는 해당 정책을 준수를 위해 안드로이드 SDK 모듈이 해당 변경사항이 포함되어 있으며 <queries> 태그를 지원하기 위해서는 Gradle 최소 5.6.4 버전 이상 그리고 Android Gradle Plugin 최소 3.6.0 버전 이상을 필요로 합니다.

유니티 버전에 따라 어떠한 Gradle 버전을 포함하고 있는가에 대해서는 다음 페이지를 통해 확인하실 수 있습니다.

만약 사용하는 유니티의 Gradle 버전이 5.6.4 버전 미만 혹은 및 Android Gradle Plugin 버전이 3.6.0 버전 미만인 경우, 다음과 같은 유니티 설정을 통해 버전을 특정하여 사용하실 수 있습니다.

- 유니티 2020.1 또는 이후 버전

다음 버전들은 Gradle 5.6.4 이후 버전과 Android Gradle Plugin 3.6.0 이후 버전을 이미 포함하고 있기 때문에 추가적인 작업을 필요로 하지 않습니다.

- 유니티 2019.3 버전 ~ 2019.4 버전

해당 커스텀 옵션은 유니티 2019.3 patch 7 이후의 버전에서만 가능합니다.

1. Gradle Build Tool 페이지로 이동하여 Gradle5.6.4 이상의 버전을 다운로드해 주세요.

2. Preferences > External Tools로 이동하여 Gradle Installed with Unity (recommended) 체크를 해제하고 다운로드 받은 Gradle파일의 경로를 다음과 같이 설정해 주세요.

3. Project Settings > Player > Android tab > Publishing Settings > Build로 이동하여 다음 옵션들을 모두 선택해 주세요.

a. Custom Main Gradle Template
b. Custom Launcher Gradle Template

4. 다음 자동 생성된 두가지 파일 모두 다음과 같이 변경해 주세요.

  • Assets/Plugins/Android/mainTemplate.gradle

  • Assets/Plugins/Android/launcherTemplate.gradle

12345678910111213141516171819202122
buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        // Must be Android Gradle Plugin 3.6.0 or later. For a list of
        // compatible Gradle versions refer to:
        // https://developer.android.com/studio/releases/gradle-plugin
        classpath 'com.android.tools.build:gradle:3.6.0'
    }
}

allprojects {
   repositories {
      google()
      jcenter()
      flatDir {
        dirs 'libs'
      }
   }
}

- 유니티 2019.1 버전 ~ 2019.2 버전

1. Gradle Build Tool 페이지로 이동하여 Gradle5.6.4 이상의 버전을 다운로드해 주세요.

2. Preferences > External Tools로 이동하여 Gradle Installed with Unity (recommended)체크를 해제하고 다운로드 받은 Gradle파일의 경로를 다음과 같이 설정해 주세요.

3. Project Settings > Player > Android tab > Publishing Settings > Build로 이동하여 Custom Gradle Template옵션을 다음과 같이 선택해 주세요.

4. 생성된 Assets/Plugins/Android/mainTemplate.gradle파일로 이동하여 다음과 같이 변경해 주세요.

12345678
buildscript {
    dependencies {
        // Must be Android Gradle Plugin 3.6.0 or later. For a list of
        // compatible Gradle versions refer to:
        // https://developer.android.com/studio/releases/gradle-plugin
        classpath 'com.android.tools.build:gradle:3.6.0'
    }
}

유니티 2018.4 버전

해당 커스텀 옵션은 유니티 2018.4 patch 24 이후의 버전에서만 가능합니다.

1. Gradle Build Tool 페이지로 이동하여 Gradle5.6.4 이상의 버전을 다운로드해 주세요.

2. Build Settings > Android로 이동하여 다음 이미지와 같이 Build System에서 Gradle을 선택해 주세요.

3. Preferences > External Tools로 이동하여 Gradle Installed with Unity (recommended)체크를 해제하고 다운로드 받은 Gradle파일의 경로를 다음과 같이 설정해 주세요.

4. Project Settings > Player > Android tab > Publishing Settings > Build로 이동하여 Custom Gradle Template옵션을 다음과 같이 선택해 주세요.

5. 생성된 Assets/Plugins/Android/mainTemplate.gradle파일로 이동하여 다음과 같이 변경해 주세요.

12345678
buildscript {
    dependencies {
        // Must be Android Gradle Plugin 3.6.0 or later. For a list of
        // compatible Gradle versions refer to:
        // https://developer.android.com/studio/releases/gradle-plugin
        classpath 'com.android.tools.build:gradle:3.6.0'
    }
}

유니티 2018.3 이하 버전

Gradle 커스터마이즈 옵션은 2018.3 버전 이하의 유니티에서는 지원하지 않습니다.

iOS

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

  • Airbridge Unity iOS의 경우 유니티에서 제공하는 IMPL_APP_CONTROLLER_SUBCLASS를 이용하여 Custom AppController를 생성합니다. 이미 IMPL_APP_CONTROLLER_SUBCLASS를 사용하여 Custom AppController를 구현한 경우 해당 Custom AppController에 아래와 같은 코드를 추가해 주세요.

12345678910
- (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 SDKAssets > Plugins > Airbridge > iOS > Delegate > AUAppController.mm파일 제거해 주세요.

2. iOS 에서 앱 실행 시 바로 종료되는 문제

Text
123
Error loading /var/containers/Bundle/Application/…/Frameworks/UnityFramework.framework/UnityFramework (…)
: dlopen(/var/containers/Bundle/Application/…/Frameworks/UnityFramework.framework/UnityFramework, …)
: Library not loaded: @rpath/AirBridge.framework/AirBridge

Airbridge Unity SDK 1.14.1 ~ 1.16.2 이상의 버전을 사용하는 경우, 1.16.3버전으로 업데이트 해 주세요.

3. iOS 에서 호환되는 AirBrdige 버전을 찾지 못하는 문제

Text
123
[!] CocoaPods could not find compatible versions for pod "AirBridge":
    In Podfile:
        AirBridge (= {MISSING_VERSION})

iOS 에서 호환되는 AirBridge 버전을 찾지 못하는 경우,
아래의 명령어를 실행하여 소스 레포지토리 업데이트를 진행해 주세요.

12
pod repo update
pod install --repo-update

소스 레포지토리 업데이트 후, pod search AirBrdige 명령어를 실행하여 올바른 AirBridge 버전이 레포지토리 내에 존재하는지 확인한 후, iOS 빌드를 진행해 주세요.

샘플 앱

Unity Sample App

마이그레이션 가이드


SDK 업데이트 시, `이전버전` ~ `이후버전` 사이에 해당하는 버전들에 해당하는 내용들을 고려해주세요.

1.14.1

Privacy manifest를 지원함에 따라 Static Library가 Dynamic Library로 변경 되었습니다. EDM4U를 사용하여 설치하는 경우, 유니티 상단의 Assets > External Dependency Manager > iOS Resolver > Settings 을 클릭하여 표시된 iOS Resolver Settings 창의 Podfile Configurations 섹션에서 아래의 체크목록을 확인 한 후, iOS 빌드를 진행해주세요.

옵션

체크 여부

Add use_frameworks! to Podfile

Link frameworks statically

X

1.13.0

딥링크 콜백에서 제공하는 딥링크 URL 이 에어브릿지 대시보드에 입력된 내용을 2번 디코딩하여 제공하는 문제가 1.12.2 에 있었던 것이 해결되었습니다.

1.12.2

딥링크 콜백에서 제공하는 딥링크 URL 에 더이상 airbridge_referrer 가 추가되지 않게 됩니다.

1.12.0

ios app 업데이트 하시는 경우, 마지막으로 계산된 SKAdNetwork Conversion Value 로 확정되고, 추가적으로 계산하지 않습니다.

  • 1.12.0 미만 버전에서는 SKAdNetwork Conversion Value 를 최대 24시간 동안만 계산합니다.

  • 새로 설치하시는 유저에 대해서는 문제되지 않습니다.

deeplink.page가 deprecated 되었습니다. 1.12.0 부터는 abr.ge 로 딥링크 도메인을 사용 하여 코드를 작성 하도록 권장 드립니다

  • deeplink.page 는 하위 호환을 위해 여전히 지원 및 동작은 되고 있습니다.

trackingAuthorizeTimeout 의 기본값이 30초로 변경됩니다.

도움이 되었나요?

더 필요한 내용이 있나요?