Android SDK

Android SDK

1. 기본 설치link

1.1. 패키지 추가link

1.1.1. Gradle 통하여 설치 (build.gradle)link

project/build.gradle 파일에 repository를 추가해 주세요.

allprojects{
...
repositories {
...
maven { url 'https://dl.bintray.com/ab180/airbridge' }
...
}
...
}

app/build.gradle 파일의 dependencies 블럭 안에 다음 내용을 추가해 주세요.

dependencies {
...
implementation 'io.airbridge:sdk-android:2.+'
...
}

1.1.2. aar 파일 통해 직접 설치link

Airbridge SDK에서는 더 나은 안정성과 생산성을 위해 버전 2 부터 JetBrains의 Kotlin과 Couroutines 라이브러리를 함께 사용하고 있습니다. 아래의 링크에서 SDK와 함께 dependency 라이브러리를 함께 프로젝트에 포함시켜 주세요.

라이브러리다운로드 링크
Airbridge SDK Android다운로드
JetBrains Java Annotations다운로드
Kotlin Standard Library다운로드
Kotlinx Coroutines Core다운로드
Kotlinx Coroutines Android다운로드

1.2. 권한 추가link

AndroidManifest.xml 파일에 아래와 같은 권한을 추가해 주세요.

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

1.3. 프로가드(Proguard) 설정link

Airbridge SDK는 내부적으로 consumerProguardFiles를 통해 다음과 같은 내용을 포함하고 있습니다.

# Facebook
-keep class com.facebook.** { *; }
# Airbridge
-keep class co.ab180.airbridge.** { *; }

1.4. MainApplication.java 설정link

app/src/main/java/.../MainApplication.java 파의 onCreate 함수에 아래와 같은 코드를 추가해 주세요.

Airbridge SDK의 올바른 동작을 위하여 반드시 Application 클래스의 onCreate 시점에 init함수가 호출 될 수 있도록 작성해 주세요.

@Override
public void onCreate() {
super.onCreate();
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
.build();
Airbridge.init(this, config);
}

android sdk dashboard token setup kr

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

2. 딥링킹 & 디퍼드 딥링킹 설정link

2.1. Airbridge 대시보드에 딥링킹 정보 입력link

android sdk dashboard deeplink setup kr

Airbridge 대시보드에 아래와 같은 2가지 정보를 입력해야 합니다.

  • Android URI Scheme
  • Android sha256_cert_fingerprints

2.1.1. Android URI Schemelink

사용을 원하는 URL Scheme을 상단의 사진과 같이 Android URL Scheme 영역에 ://를 포함하여 다음과 같이 입력해 주세요.

YOUR_APP_URI_SCHEME://

2.1.2. Android sha256_cert_fingerprintslink

sha256_cert_fingerprints를 취득하는 방법은 아래와 같습니다.

  1. Google Play Store에 앱을 등록할 때 사용한 signing key를 준비해 주세요.
  2. 다음 명령을 Terminal에서 실행해 주세요.
keytool -list -v -keystore my-release-key.keystore
  1. 하단과 같이 Certificate fingerprints 영역의 SHA256 값을 복사해, 상단의 사진과 같이 Android sha256_cert_fingerprints 영역에 입력해 주세요.
...
Certificate fingerprints:
MD5: 4C:65:04:52:F0:3F:F8:65:08:D3:71:86:FC:EF:C3:49
SHA1: C8:BF:B7:B8:94:EA:5D:9D:38:59:FE:99:63:ED:47:B2:D9:5A:4E:CC
SHA256: B5:EF:4D:F9:DC:95:E6:9B:F3:9A:5E:E9:D6:E0:D8:F6:7B:AB:79:C8:78:67:34:D9:A7:01:AB:6A:86:01:0E:99
...

2.2. Intent Filter 설정link

하단에 명시된 절차에 따라서 Intent Filter를 설정해 주세요.

  1. AndroidManifest.xml 파일을 열어주세요.
  2. 딥링크를 처리할 Acitivtyintent-filter를 다음과 같이 추가해 주세요.
<activity ...>
...
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="YOUR_APP_NAME.deeplink.page" />
<data android:scheme="https" android:host="YOUR_APP_NAME.deeplink.page" />
</intent-filter>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="YOUR_APP_NAME.airbridge.io" />
<data android:scheme="https" android:host="YOUR_APP_NAME.airbridge.io" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="YOUR_APP_URI_SCHEME" />
</intent-filter>
...
</activity>
  • YOUR_APP_NAME.deeplink.page : Airbridge App Links 버전 2
  • YOUR_APP_NAME.airbridge.io : Airbridge App Links 버전 1
  • YOUR_APP_URI_SCHEME : URI Scheme 방식의 딥링크

2.3. 딥링크 콜백 설정link

상단에서 설정한 Activity에서 추가된 intent-filter의 딥링크를 처리하기 위해서 다음과 같은 작업이 필요합니다.

Airbirdge의 디퍼드 딥링크를 통하여 해당 Activity가 호출된 경우, deferred=true라는 query가 포함되어 전달됩니다.

@Override
protected void onResume() {
super.onResume();
Airbridge.getDeeplink(getIntent(), new AirbridgeCallback<Uri>() {
@Override
public void onSuccess(Uri uri) {
// 딥링크 처리
}
@Override
public void onFailure(Throwable throwable) {
// 에러
}
@Override
public void onComplete() {
// 딥링크 처리 완료시 호출
}
});
}
// 아래의 코드는 원활한 딥링크 처리를 위하여 반드시 필요합니다
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}

2.4. 디퍼드 딥링크 콜백 설정link

Airbridge SDK에서 디퍼드 딥링크가 발생하는 일반적인 경우 AndroidManiest.xml에 설정된 intent-filter에 따라 자동으로 해당 Activity가 호출되며 2.3. 딥링크 콜백 설정과 동일한 방법을 통해 일괄적으로 처리할 수 있습니다.

디퍼드 딥링크를 통해 얻어진 정보를 이용하여 특수한 작업을 처리하거나 혹은 디퍼드 딥릉크를 통해 자동으로 Activity가 호출되는 것을 원치 않는 경우 다음과 같은 방법을 통하여 설정이 가능합니다.

AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
.setOnDeferredDeeplinkReceiveListener(new OnDeferredDeeplinkReceiveListener() {
@Override
public boolean shouldLaunchReceivedDeferredDeeplink(Uri uri) {
// 자동으로 <intent-filter>에 설정된 Activity 호출을 원하는 경우 true, 별도의 처리를 원하는 경우 false를 전달해 주세요.
// Default returning value = true
return true;
}
})
.build();
Airbridge.init(this, config);

2.5. 커스텀 도메인 추가 설정link

Airbridge 대시보드에서 트래킹 링크를 생성하게 되는 경우 deeplink.page 혹은 abr.ge 형태의 트래킹 링크를 사용할 수 있습니다.

고객사에서는 트래킹 링크 브랜딩 및 클릭률(CTR)의 향상을 위해 다음과 같은 설정을 통해 go.my_company.com/abcd와 같이 커스터마이즈 된 URL을 트래킹 링크로 사용할 수 있습니다.

  1. 사용할 커스텀 도메인을 다음 가이드와 같이 설정해 주세요.
  2. res/values/airbridge.xml 파일을 생성해 다음과 같이 추가해 주세요.
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string-array name="co_ab180_airbridge_custom_domains">
<item>YOUR_CUSTOM_DOMAIN</item>
...
</string-array>
</resources>
  1. 2.2. Intent Filter 설정와 같이 딥링크를 처리할 Acitivtyintent-filter를 다음과 같이 추가해 주세요.
<activity ...>
...
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="YOUR_CUSTOM_DOMAIN" />
<data android:scheme="https" android:host="YOUR_CUSTOM_DOMAIN" />
</intent-filter>
...
</activity>

상단에 추가된 YOUR_CUSTOM_DOMAIN은 Airbridge 대시보드에 기입된 정보와 일치해야 합니다.

3. 사용자 정보 트래킹link

3.1. 사람 중심(People-based)의 아이덴티티 정보 전송link

사람 중심(People-based)의 기여도 측정을 위해서는 웹(Web)과 앱(App)간의 파편화된 사용자의 아이덴티티 정보를 함께 통합하여 분석해야 합니다. Airbridge에서는 IRE(Identity Resolution Engine)를 통하여 웹(Web)과 앱(App)간의 파편화된 사용자 정보들을 쉽고 편리하게 통합하고 분석에 활용할 수 있습니다.

Airbridge에서는 다음과 같은 아이덴티티 정보들을 수집합니다.

  • User Email : 이메일
  • User Phone : 전화번호
  • User ID : 사용자 고유 ID (사용자의 특정할 수 있는 ID 값으로 웹과 앱에서 1:1로 대응되어야 합니다)
  • User Alias : 사용자를 나타낼 수 있는 기타 ID (e.g. 로열티 프로그램용 ID, 계열사 통합 ID 등등)

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

Airbridge SDK에서는 다음과 같은 방법으로 아이덴티티 정보를 수집할 수 있습니다.

// Automatically hashed on client side using SHA256
// Can turn off hashing feature with special flag
Airbridge.getCurrentUser().setEmail("testID@ab180.co");
Airbridge.getCurrentUser().setPhone("821012341234");
// Does not hash
Airbridge.getCurrentUser().setId("testID");
Airbridge.getCurrentUser().setAlias("key", "value");
  • User Alias의 개수는 최대 10개 입니다.
  • User Alias의 key 는 String 타입이며, 길이는 최대 128자 입니다.
  • User Alias의 key 는 ^[a-z_][a-z0-9_]*$ 정규식을 만족해야 합니다.
  • User Alias의 value 는 String 타입이며 String의 경우 최대 1024자 입니다.

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

설정되어진 사용자 아이덴티티 정보는 4.3. 사용자 이벤트를 통하여 초기화 하거나 덮어씌울 수 있습니다.

3.1.1. 아이덴티티 정보 전송 시 해시화 설정link

내부의 데이터 분석 등의 목적을 위해 HASH(SHA256)하지 않고 아이덴티티 정보를 전송하고 싶은 경우, 다음과 같은 설정을 통해 User Email 그리고 User Phone 정보의 자동 HASH(SHA256)를 중단할 수 있습니다.

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

// Default User Info Hash Enabled = true
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
.setUserInfoHashEnabled(false)
.build();
Airbridge.init(this, config);

3.2. 사용자 속성(User Attribute) 설정link

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

Airbridge.getCurrentUser().setAttribute("key", "value");
  • 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자 입니다.

4. 인앱 이벤트 트래킹link

4.1. 이벤트 데이터 구조 개요link

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

  • Event Category : 이벤트의 이름 Required (String)
  • Event Action : 이벤트 하위 속성값 1 (String)
  • Event Label : 이벤트 하위 속성값 2 (String)
  • Event Value : 이벤트 하위 속성값 3 (Float)
  • Event Attributes : 이벤트 하위의 커스텀 데이터 (Map<String, Object>)
  • Event Attribute의 key 는 String 타입 입니다.
  • Event Attribute의 value 는 Primitive 타입String 타입이며 1 차원의 Array 혹은 List를 허용합니다. (해당 타입 이 외의 데이터들은 자동으로 무시됩니다)

각각의 하위 속성값들의 설명과 용례는 아래와 같습니다.

  • Airbridge 대시보드 내에서 특정 이벤트에 대한 GroupBy 분석을 위해서는 Event Action, Event Label 값을 사용할 것을 권장합니다. (e.g. 구매 이벤트에 상품 정보 이 외에 구매 지역이나 멤버십 정보를 넣고 싶을 경우 혹은 회원가입 시 추천인을 통하여 왔는지 여부 등등)
  • Airbridge 대시보드 내에서 특정 이벤트에 대한 정량적 측정을 하기 위해서는 Event Value 값을 사용할 것을 권장합니다.
  • 서드파티(3rd Party) 솔루션 (e.g. Amplitude, Braze) 연동 시 비정형 데이터를 넣고 싶을 경우 Event Attribute를 사용할 것을 권장합니다.

Event Category / Event Action / Event Label / Event Value / Event Attribute를 수집하여 어디서 어떻게 사용할 수 있는지는 Airbridge의 Data Spec을 통해서 자세하게 확인이 가능합니다.

4.1.1 Event Categorylink

Airbirdge에서 사용되어지는 모든 이벤트의 Event Category 값은 필수 입니다. 해당 값은 오직 4.2. 기본 이벤트 전송에서 광고주가 지정할 수 있으며, 유저 이벤트나 이커머스 이벤트와 같이 미리 지정된 이벤트의 경우 Event Category는 수정할 수 없습니다.

4.1.2 Event Action / Event Label / Event Value / Event Attributelink

Event Action / Event Label / Event Value / Event Attribute 값들은 4.2. 기본 이벤트 전송을 포함하여 4.3. 사용자 이벤트 전송4.4. 이커머스 이벤트 전송와 같이 미리 지정된 이벤트에도 적용이 가능합니다.

// Event Catogory (Pre-defined)
HomeViewEvent event = new HomeViewEvent();
// Event Action
event.setAction(...);
// Event Label
event.setLabel(...);
// Event Value
event.setValue(...);
// Event Attribute
event.getCustomAttributes().put(...);
Airbridge.trackEvent(event);

4.2. 기본 이벤트 전송link

Airbridge SDK에서 다음과 같은 방법으로 이벤트를 전송 할 수 있습니다.

int eventValue = 10;
Map<String, String> eventAttributes = new HashMap<String, String>();
Airbridge.trackEvent("event_category", "event_action", "event_label", eventValue, eventAttributes);

4.3. 사용자 이벤트 전송link

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

4.3.1. 회원가입 (Sign-up)link

Map<String, String> alias = new HashMap<String, String>()
// userAttributes : User Attribute (NOT Event Attribute)
Map<String, Object> userAttributes = new HashMap<String, Object>()
SignUpEvent event = new SignUpEvent("id", "email", "phone", alias, userAttributes)
Airbridge.trackEvent(event);

회원가입(Sign-up) 시 전달된 데이터는 3. 사용자 정보 트래킹에 자동으로 기록이 됩니다.

4.3.2. 로그인 (Sign-in)link

Map<String, String> alias = new HashMap<String, String>()
// userAttributes : User Attribute (NOT Event Attribute)
Map<String, Object> userAttributes = new HashMap<String, Object>()
SignUpEvent event = new SignInEvent("id", "email", "phone", alias, userAttributes)
Airbridge.trackEvent(event);

로그인(Sign-in) 시 전달된 데이터는 3. 사용자 정보 트래킹에 자동으로 기록이 됩니다.

4.3.3. 로그아웃 (Sign-out)link

SignOutEvent event = new SignOutEvent();
Airbridge.trackEvent(event);

로그아웃(Sign-out) 시 설정된 모든 3. 사용자 정보 트래킹 데이터는 사라지게 됩니다.

4.4. 이커머스 이벤트 전송link

Airbridge SDK에서는 편의를 위해 다음과 같은 이커머스 이벤트를 제공하고 있습니다.

4.4.1. 홈 화면 (Home Screen)link

HomeViewEvent event = new HomeViewEvent();
Airbridge.trackEvent(event);

4.4.2. 검색결과 조회 (Search Results)link

List<Product> products = new ArrayList<Product>();
SearchResultViewEvent event = new SearchResultViewEvent("query", products);
Airbridge.trackEvent(event);

4.4.3. 상품리스트 조회 (Product Catalog)link

List<Product> products = new ArrayList<Product>();
ProductListViewEvent event = new ProductListViewEvent("list_id", products);
Airbridge.trackEvent(event);

4.4.4. 상품상세페이지 조회 (Product View)link

List<Product> products = new ArrayList<Product>();
ProductDetailsViewEvent event = new ProductDetailsViewEvent(products);
Airbridge.trackEvent(event);

4.4.5. 장바구니 담기 (Add to Cart)link

List<Product> products = new ArrayList<Product>();
String currency = "usd";
float totalValue = 19.99f;
AddToCartEvent event = new AddToCartEvent("cart_id", products, currency, totalValue);
Airbridge.trackEvent(event);

4.4.6. 결제완료 (Order Complete)link

List<Product> products = new ArrayList<Product>();
boolean inAppPurchased = true;
String currency = "usd";
float totalValue = 19.99f;
OrderCompletedEvent event = new OrderCompletedEvent("transaction_id", products, currency, totalValue, inAppPurchased);
Airbridge.trackEvent(event);

4.4.7. 상품 (Product)link

Airbridge SDK의 이커머스 이벤트에서는 상품(Product) 객체를 통하여 미리 정의된 상품 정보를 전달할 수 있습니다.

Product product = new Product(
"Tomato_1", // 상품 ID
"Red tomato", // 상품명
"Usd", // 통화 (Currency)
5.99f, // 가격
1, // 수량
0 // Index
);

5. 개인정보보호link

5.1. 트래킹 시작link

해당 기능은 GDPR이나 CCPA와 같이 고객으로부터 개인정보보호 동의를 받아 데이터 수집 및 전송을 진행하는 경우에 유용한 기능입니다. 다음과 같은 방법을 통하여 데이터 수집 및 전송을 명시적으로 시작할 수 있습니다.

Airbridge.startTrackingApplicationonCreate 시점 이후 호출 되는 경우 Install 혹은 Open 이벤트 수집이 무시 될 수 있습니다. 올바른 동작을 위하여 개인 보호 수집 동의 이후에는 ApplicationonCreate 에서 해당 함수를 호출해 주세요.

// Default Auto Start Tracking Enabled = true
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
.setAutoStartTrackingEnabled(false)
.build();
Airbridge.init(this, config);
...
// Set a variable like below
if (properties.isGDPRAccepted) {
Airbridge.startTracking();
}

6. Uninstall 트래킹 (추후 지원 예정)link

Airbridge SDK를 이용하여 Uninstall을 트래킹하기 위해서 다음과 같은 추가 작업이 필요 합니다.

6.1. Firebase Cloud Messaginglink

Airbridge SDK는 Uninstall을 트래킹하기 위하여 Firebase의 Cloud Messaging 기능을 함께 사용하고 있습니다.

6.1.1. Gradle 설정link

app/build.gradle 파일의 dependencies 블럭 안에 다음 내용을 추가해 주세요.

dependencies {
...
implementation 'com.google.firebase:firebase-core:${FIREBASE_CORE_VERSION}'
implementation 'com.google.firebase:firebase-messaging:${FIREBASE_PUSH_MESSAGING_VERSION}'
...
}

6.1.2. Push 토큰 등록link

Firebase Messaging Service를 통하여 Push 토큰을 다음과 같은 방법을 통하여 Airbridge로 전달해 주세요.

참조 - https://firebase.google.com/docs/cloud-messaging/android/receive

AndroidManifest.xml 파일의 <application> 엘리먼트 안에 생성할 Firebase Messaging Service 클래스를 선언해 주세요.

...
<application android:label="@string/app_name" ...>
...
<service android:name=".MyFirebaseMessagingService" android:exported="false">
<intent-service>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-service>
</service>
...
</application>
...

AndroidManifest.xml에서 선언한 Firebase Messaging Service 클래스를 다음과 같이 작성해 주세요.

public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
}
@Override
public void onNewToken(String token) {
super.onNewToken(token);
Airbridge.registerPushToken(token);
}
}

7. 심화 설정 및 기능link

7.1. 세션 타임아웃 (Session Timeout)link

Airbridge SDK에서는 설정된 세션 시간 내에 유저가 앱을 재실행 하는 경우 같은 세션으로 판단하여 앱 실행(App Opens) 이벤트를 다시 보내지 않으나, 해당 시간을 넘어서 유저가 재 실행하는 경우 새로운 앱 실행 이벤트를 발생시킵니다. 이와 같이 유저가 앱을 내렸다가 설정된 세션 시간 이후에 들어오는 경우 앱 실행(App Opens) 이벤트로 바꿔 전송되어 집니다.

// Default Session Timeout = 5 minutes
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
.setSessionTimeoutSeconds(15)
.build();
Airbridge.init(this, config);

7.2. 디바이스 정보link

7.2.1. Device UUIDlink

Airbridge SDK 내부에서 사용되어지는 Device의 고유 식별 정보이며 다음과 같은 방법을 통하여 취득할 수 있습니다.

Airbridge.getDeviceInfo().getUUID(new AirbridgeCallback.SimpleCallback<String>() {
@Override
public void onSuccess(String uuid) {
}
@Override
public void onFailure(Throwable throwable) {
}
});

7.2.2. Advertising Id (ADID)link

Airbridge SDK에서는 별도의 라이브러리 추가 없이도 다음과 같은 방법으로 GAID와 LAT(limit ad tracking) 정보를 다음과 같은 방법을 통하여 취득할 수 있습니다.

Airbridge.getDeviceInfo().getAdvertisingIdInfo(new AirbridgeCallback.SimpleCallback<AdvertisingIdInfo>() {
@Override
public void onSuccess(AdvertisingIdInfo info) {
}
@Override
public void onFailure(Throwable throwable) {
}
});

7.2.3. 레퍼러 정보 수집 (Google)link

Airbridge SDK에서는 별도의 라이브러리 추가 없이도 다음과 같은 방법으로 Google Install Referrer 정보를 다음과 같은 방법을 통하여 취득할 수 있습니다.

Airbridge.getDeviceInfo().getGoogleInstallReferrerDetails(new AirbridgeCallback.SimpleCallback<ReferrerDetails>() {
@Override
public void onSuccess(ReferrerDetails details) {
}
@Override
public void onFailure(Throwable throwable) {
}
});

7.2.4. 레퍼러 정보 수집 (원스토어)link

Airbridge SDK에서는 별도의 라이브러리 추가 없이도 다음과 같은 방법으로 One Store Install Referrer 정보를 다음과 같은 방법을 통하여 취득할 수 있습니다.

Airbridge.getDeviceInfo().getOneStoreInstallReferrerDetails(new AirbridgeCallback.SimpleCallback<ReferrerDetails>() {
@Override
public void onSuccess(ReferrerDetails details) {
}
@Override
public void onFailure(Throwable throwable) {
}
});

7.2.5. Device Aliaslink

Airbridge SDK에서 Device 단위의 Alias 정보를 추가하거나 변경할 수 있습니다.

Device AliasUser Alias와는 다른 별도로 관리되어지는 값입니다.

Airbridge.getDeviceInfo().setAlias(...);
Airbridge.getDeviceInfo().removeAlias(...);
Airbridge.getDeviceInfo().clearAlias();

광고주의 앱 내에서 다수의 딥링크 동작으로 인해 Airbridge를 통한 Re-engagement 성과를 한눈에 확인하기 어려운 경우, 다음과 같은 방법을 통하여 Airbridge 딥링크를 통해 들어온 성과만 필터링하도록 설정할 수 있습니다.

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

  • airbridge.io 딥링크를 통해 앱이 오픈 된 경우
  • deeplink.page 딥링크를 통해 앱이 오픈 된 경우
  • 2.5. 커스텀 도메인 추가 설정와 같이 대시보드에 등록된 형태의 딥링크를 통해 앱이 오픈 된 경우
  • airbridge_referrer query 정보가 존재하는 경우
// Default Airbridge Link Only = false
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
.setTrackAirbridgeLinkOnly(true)
.build();
Airbridge.init(this, config);

7.4. 위치 정보 수집link

Airbridge SDK에서는 다음과 같은 방법을 통하여 유저의 위치 정보를 수집할 수 있습니다.

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

Airbridge SDK에서는 LastKnownLocation 정보를 수집하게 됩니다. GPS 정보를 가져오지 않은 상태에서는 해당 권한과 설정이 완료되었더라도 값이 존재하지 않을 수 있습니다.

...
// 택 1
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
...
// Default Location Collection Enabled = false
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
.setLocationCollectionEnabled(true)
.build();
Airbridge.init(this, config);

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

Facebook의 Deferred App Link를 간단한 세팅을 통하여 Airbridge SDK에서 함께 받아 보실 수 있습니다.

Airbridge SDK에서 디퍼드 딥링크 정보를 받는 방법은 2.4. 디퍼드 딥링크 콜백 설정를 참조해 주세요

참조 - https://developers.facebook.com/docs/app-events/getting-started-app-events-android

참조 - https://developers.facebook.com/docs/app-ads/deep-linking

project/build.gradle 파일에 repository를 추가해 주세요.

repositories {
...
mavenCentral()
...
}

app/build.gradle 파일의 dependencies 블럭 안에 다음 내용을 추가해 주세요.

dependencies {
...
implementation 'com.facebook.android:facebook-android-sdk:[5,6)'
...
}

app/res/values/string.xml 파일에 다음과 같은 string을 추가해 주세요.

...
<string name="facebook_app_id">FACEBOOK_APP_ID</string>
...

AndroidManifest.xml 파일의 <application> 엘리먼트 안에 다음과 같은 <meta-data>를 추가해 주세요

...
<application android:label="@string/app_name" ...>
...
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
...
</application>
...
// Default Facebook Deferred App Link Enabled = false
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
.setFacebookDeferredAppLinkEnabled(true)
.build();
Airbridge.init(this, config);

8. 테스트 및 디버깅link

8.1. SDK 설치 확인 방법link

  1. 테스트 디바이스에서 해당 앱을 미리 제거해 주세요.
  2. 해당 테스트를 원하는 디바이스에서 앱을 설치 및 실행해 주세요.
  3. Airbridge 대시보드 → Raw DataApp Real-time Logs로 들어가주세요.
  4. 검색창에 해당 기기의 Google Advertising ID를 입력해 주세요.

검색창에 입력한 Google Advertising ID를 가진 Install(Event Category 컬럼)인 이벤트가 확인되지 않는다면 위의 가이드에 안내된 대로 설치되었는지 다시 확인해 주세요.

Android 디바이스에서 설정Google 설정광고내 광고 ID 확인 항목에서 해당 기기의 Google Advertising ID를 확인할 수 있습니다.

8.2. 앱을 통한 간편 테스트link

Airbridge SDK 설치 여부를 Airbridge Integration Test 앱을 통하여 간략한 정보를 편하게 확인하실 수 있습니다.

8.3. LogCat 확인 방법link

해당 앱의 자세한 로그 정보를 LogCat에서 확인하고 싶으신 경우 다음과 같은 방법을 통하여 확인하실 수 있습니다.

해당 사용자의 정보가 노출될 수 있기 때문에 해당 옵션은 Build.DEBUG 인 경우에만 동작 할 수 있도록 처리해 주세요.

// Default log level = Log.INFO
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
.setLogLevel(Log.DEBUG)
.build();
Airbridge.init(this, config);

9. Airbridge V2 마이그레이션 가이드link

9.1. Dependencieslink

Airbridge SDK 2버전에서 부터는 더 나은 안정성과 생산성을 위하여 JetBrains사의 Kotlin을 적극적으로 활용하고 있습니다. Gradle 빌드 툴 혹은 Android Studio를 사용하신다면 추가적인 별도의 작업이 필요로 하지 않으나 aar 파일을 직접 추가해야 하는 경우에는 다음과 같은 라이브러리들이 포함해 주세요.

dependencies {
...
implementation 'org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version'
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinx_cotoutines_version'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_cotoutines_version'
...
}

9.2. Package nameslink

Airbridge SDK 2버전에서는 ‘io.airbridge’ 패키지 명이 ‘co.ab180.airbridge’로 변경됩니다.

package io.airbridge; // Old
package co.ab180.airbridge; // New

9.3. Class nameslink

Airbridge SDK 2버전에서는 대표 클래스 이름이 ‘AirBridge’ 에서 ‘Airbridge’로 변경됩니다.

io.airbridge.AirBridge // Old
co.ab180.airbridge.Airbridge // New

9.4. Resources nameslink

9.4.1. Custom Domainlink

Airbridge SDK 2버전에서는 airbridge.xmlco_ab180_airbridge_customDomains의 리소스 이름이 co_ab180_airbridge_custom_domains로 변경됩니다.

R.array.co_ab180_airbridge_customDomains // Old
R.array.co_ab180_airbridge_custom_domains // New

9.4.2. Custom Domain Optionlink

Airbridge SDK 2버전에서는 더 이상 ‘airbridge.xml’의 ‘co_ab180_airbridge_deeplink_scheme’ 및 ‘co_ab180_airbridge_deeplink_host’ 기능을 제공하지 않습니다.

R.string.co_ab180_airbridge_deeplink_scheme // Removed
R.string.co_ab180_airbridge_deeplink_host // Removed

9.5. Configslink

Airbridge SDK 2버전에서는 AirbridgeConfig를 통하여 app name, token, session timeout 등등 다양한 옵션들을 통합하여 관리하도록 변경되었습니다. 자세한 변경 사항은 7. 심화 설정 및 기능 섹션을 참고해 주세요.

9.6. 사용자 이벤트 전송link

Airbridge SDK 2버전에서는 User 관련 이벤트는 모두 다음과 같이 변동 됩니다.

SignUpEvent event = new SignUpEvent(...);
...
SignInEvent event = new SignInEvent(...);
...
SignOutEvent event = new SignOutEvent();
...
Airbridge.trackEvent(event);

User의 속성들을 변경해야 하는 경우 다음과 같은 방법으로 추가하거나 변경할 수 있습니다.

Airbridge.getCurrentUser().setId(...)
Airbridge.getCurrentUser().setEmail(...)
Airbridge.getCurrentUser().setPhone(...)
Airbridge.getCurrentUser().setAlias(...)
Airbridge.getCurrentUser().setAttribute(...)

9.7. 이커머스 이벤트 전송link

Airbridge SDK 2버전에서 달라진 패키지 명 이외에는 기존에 사용하던 방식과 동일하게 이커머스 이벤트를 사용하실 수 있습니다.

package io.airbridge.ecommerce; // Old
package co.ab180.airbridge.event.ecommerce; // New

10. Troubleshootinglink

안드로이드 앱에서 Auto Backup이 필요로 하는 경우 Auto Backup Rules의 정의가 필요할 수 있습니다. 이 같은 경우에 Airbridge SDK에서는 내부 데이터의 자동 복제를 방지하기 위하여 별도의 airbridge_auto_backup_rules.xmlAndroidManifest.xml에 정의하고 있어 빌드 시 Manifest merger failed : Attribute application@fullBackupContent value=(true)과 같은 충돌이 발생할 수 있습니다.

다음과 같은 충돌이 발생한 경우 tools:replace="android:fullBackupContent"의 설정과 해당 커스터마이즈 된 auto backup rule 파일에 추가적인 Merging 작업을 필요로 합니다.

Airbridge SDK에서 정의하는 auto backup rule은 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<exclude domain="sharedpref" path="airbridge-internal" />
<exclude domain="sharedpref" path="airbridge-install" />
<exclude domain="sharedpref" path="airbridge-user-info" />
<exclude domain="sharedpref" path="airbridge-user-alias" />
<exclude domain="sharedpref" path="airbridge-user-attributes" />
<exclude domain="sharedpref" path="airbridge-device-alias" />
<exclude domain="database" path="airbridge.db" />
</full-backup-content>

11. 하이브리드 앱link

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

앱 설치, 앱 실행, 딥링크 실행 이벤트를 트래킹하기 위해서는 해당 Airbridge Android SDK의 설치가 미리 완료되어져야 합니다.

11.1. 웹뷰 환경에서의 이벤트 전송link

참조 - Building web apps in WebView

참조 - Understanding Android webview javascript interface

제공되는 모든 코드는 예시일 뿐 해당 앱의 용도에 알맞게 변경해 주세요.

대상 Web View에 다음과 같이 Airbridge::setJavascriptInterface 함수를 호출해 주세요.

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initWebView();
}
void initWebView(DeviceInfo deviceInfo) {
webView = findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
Airbridge.setJavascriptInterface(webView, "YOUR_WEB_TOKEN");
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://dev.blog.airbridge.io/websdk-web-app/");
}
}

android sdk dashboard web token setup kr

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

실제 사용할 웹 페이지에서 다음과 같이 Web SDK를 초기화해 주세요.

(function(a_,i_,r_,_b,_r,_i,_d,_g,_e){if(!a_[_b]||!a_[_b].queue){_g=i_.getElementsByTagName(r_)[0];a_[_b]={queue:[]};_d={};for(_i=0;_i<_r.length;_d={$jscomp$loop$prop$m$2:_d.$jscomp$loop$prop$m$2},_i++)_d.$jscomp$loop$prop$m$2=_r[_i],~_d.$jscomp$loop$prop$m$2.indexOf(".")&&(_e=_d.$jscomp$loop$prop$m$2.split(".")[0],a_[_b][_e]=a_[_b][_e]||{},a_[_b][_e][_d.$jscomp$loop$prop$m$2.split(".")[1]]=function(_d){return function(){a_[_b].queue.push([_d.$jscomp$loop$prop$m$2,arguments])}}(_d)),a_[_b][_d.$jscomp$loop$prop$m$2]=function(_d){return function(){a_[_b].queue.push([_d.$jscomp$loop$prop$m$2,arguments])}}(_d);_d=i_.createElement(r_);_d.async=1;_d.src="//static.airbridge.io/sdk/latest/airbridge.min.js";_g.parentNode.insertBefore(_d,_g)}})(window,document,"script","airbridge","init setBanner setDownload setDeeplinks sendSMS sendWeb setUserAgent setUserAlias addUserAlias setMobileAppData setUserId setUserEmail setUserPhone setUserAttributes setDeviceIFV setDeviceIFA setDeviceGAID events.send events.signIn events.signUp events.signOut events.purchased events.addedToCart events.productDetailsViewEvent events.homeViewEvent events.productListViewEvent events.searchResultViewEvent".split(" "));
airbridge.init({
app: 'app_name',
webToken: 'app_token'
});

12. 서드파티 연동link

12.1 Braze 연동link

Braze는 가장 잘 알려진 모바일 마케팅 자동화(MMA, Mobile Marketing Automation) 솔루션으로, 다음과 같은 설정을 통해서 Airbridge에서 수집된 채널별 캠페인 별 유저 정보들을 이용하여 유저 세그먼트 및 타겟팅 함으로써 정교한 캠패인 집행이 가능합니다.

AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
.setBrazeIntegrationEnabled(true)
.build();
Airbridge.init(this, config);