Unity SDK

SDK 설치

📘

Airbridge Unity SDK는 최소 2018.4 버전 이상의 유니티 버전을 필요로 합니다.

패키지 설치

  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 SettingsApp NameApp Token 필드에 대시보드에서 설정된 앱 이름 (Unique ID)앱 SDK 토큰 정보를 각각 입력해 주세요.

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

초기화

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

SDK 설치 확인

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

🚧

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

딥링크 설정


대시보드 설정

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

프로젝트 설정

iOS 딥링크 설정

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

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

Android 딥링크 설정

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

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

커스텀 도메인 설정

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

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

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

딥링크 콜백 설정

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

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

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

using UnityEngine;

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

  }
}

📘

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

딥링크 설정 확인

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

  • YOUR_APP_URI_SCHEME://

딥링크 설정 및 확인이 완료되면 Airbridge 대시보드 → Row DataApp 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에서는 다음과 같은 방법을 통해 사용자의 식별자 정보를 설정할 수 있습니다.

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);
  • User Alias의 개수는 최대 10개 입니다.
  • User Alias의 key 는 String 타입이며, 길이는 최대 128자 입니다.
  • User Alias의 key 는 ^[a-z_][a-z0-9_]*$ 정규식을 만족해야 합니다.
  • User Alias의 value 는 String 타입이며 String의 경우 최대 1024자 입니다.

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

사용자 속성 설정

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

Dictionary<string, object> attrs = new Dictionary<string, object>();
AirbridgeUser user = new AirbridgeUser();
user.SetAttributes(attrs);
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 대시보드 → Row DataApp Real-time Log 탭에서 다음과 같이 확인하실 수 있습니다.

이벤트 설정


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

  • Event Category : 이벤트의 이름 Required (String)
  • Event Action : 이벤트 하위 속성값 1 (String)
  • Event Label : 이벤트 하위 속성값 2 (String)
  • Event Value : 이벤트 하위 속성값 3 (Float)
  • Event Custom Attributes : 이벤트 하위의 커스텀 데이터 (Map<String, Object>)
  • Event Semantic Attributes : 이벤트 하위의 시멘틱 데이터 (Semantic Attributes Class)

사용자 이벤트 전송

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

  • 회원가입 (Sign up)
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)
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)
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.SIGN_OUT);
AirbridgeUnity.TrackEvent(@event);
AirbridgeUnity.ExpireUser();

이커머스 이벤트 전송

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

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);
  • 홈 화면 (Home Screen)
AirbridgeEvent @event = new AirbridgeEvent(Airbridge.Constants.CATEGORY.VIEW_HOME);
AirbridgeUnity.TrackEvent(@event);
  • 검색 결과 조회 (Search Results)
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_2");
fanta.SetName("Fanta");
fanta.SetPrice(10.99f);
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.SetTotalValue(12.24f);
AirbridgeUnity.TrackEvent(@event);
  • 상품 리스트 조회 (Product List)
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(10.99f);
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.SetTotalValue(12.24f);
AirbridgeUnity.TrackEvent(@event);
  • 상품 상세 페이지 조회 (Product Details)
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.TrackEvent(@event);
  • 장바구니 담기 (Add to Cart)
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);
@event.SetTotalValue(1.25f);
AirbridgeUnity.TrackEvent(@event);
  • 결제 완료 (Order Complete)
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(10.99f);
fanta.SetCurrency("USD");
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);
@event.SetTotalValue(12.24f);
AirbridgeUnity.TrackEvent(@event);

커스텀 이벤트 전송

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

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

📘

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

이벤트 전송 확인

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

고급 설정


사용자 정보 해시화 설정

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

❗️

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

세션 타임아웃 설정

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

개인정보보호 설정

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

유니티 상단의 AB180 > Airbridge SettingsAuto Start Tracking Enabled 필드의 설정을 이용하여 데이터 수집과 전송을 명시적으로 시작할 수 있습니다.

📘

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

AirbridgeUnity.startTracking();

Airbridge 링크 추적 설정

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

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

  • 대시보드에 등록된 형태의 딥링크를 통해 앱이 오픈 된 경우
  • airbridge.io 딥링크를 통해 앱이 오픈 된 경우
  • deeplink.page 딥링크를 통해 앱이 오픈 된 경우
  • airbridge_referrer query 정보가 존재하는 경우

위치 정보 수집

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

❗️

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

🚧

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

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

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

Facebook의 Deferred App Link를 유니티 상단의 AB180 > Airbridge SettingsFacebook 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 SettingsiOS Tracking Authorize Timeout Seconds 설정을 통해 설치 이벤트를 지연하여 올바르게 IDFA가 인스톨 이벤트에 포함되도록 설정할 수 있습니다.

Troubleshooting


Android

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

  • 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를 사용하는 경우

  • 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 되지 않는 경우

  • 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 페이지로 이동하여 Gradle 5.6.4 이상의 버전을 다운로드해 주세요.
  2. Preferences > External Tools로 이동하여 Gradle Installed with Unity (recommanded) 체크를 해제하고 다운로드 받은 Gradle 파일의 경로를 다음과 같이 설정해 주세요.
  1. Project Settings > Player > Android tab > Publishing Settings > Build로 이동하여 다음 옵션들을 모두 선택해 주세요.

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

  1.   다음 자동 생성된 두가지 파일 모두 다음과 같이 변경해 주세요.
  • Assets/Plugins/Android/mainTemplate.gradle
  • Assets/Plugins/Android/launcherTemplate.gradle
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 페이지로 이동하여 Gradle 5.6.4 이상의 버전을 다운로드해 주세요.
  2. Preferences > External Tools로 이동하여 Gradle Installed with Unity (recommanded) 체크를 해제하고 다운로드 받은 Gradle 파일의 경로를 다음과 같이 설정해 주세요.
  1. Project Settings > Player > Android tab > Publishing Settings > Build로 이동하여 Custom Gradle Template 옵션을 다음과 같이 선택해 주세요.
  1. 생성된 Assets/Plugins/Android/mainTemplate.gradle 파일로 이동하여 다음과 같이 변경해 주세요.
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 페이지로 이동하여 Gradle 5.6.4 이상의 버전을 다운로드해 주세요.
  2. Build Settings > Android로 이동하여 다음 이미지와 같이 Build System에서 Gradle을 선택해 주세요.
  1. Preferences > External Tools로 이동하여 Gradle Installed with Unity (recommanded) 체크를 해제하고 다운로드 받은 Gradle 파일의 경로를 다음과 같이 설정해 주세요.
  1. Project Settings > Player > Android tab > Publishing Settings > Build로 이동하여 Custom Gradle Template 옵션을 다음과 같이 선택해 주세요.
  1. 생성된 Assets/Plugins/Android/mainTemplate.gradle 파일로 이동하여 다음과 같이 변경해 주세요.
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 에 아래와 같은 코드를 추가해 주세요.
- (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 파일 제거해 주세요.