에어브릿지로 이동합니다.
에어브릿지 대시보드에서 [새로운 앱 등록]을 클릭해 앱을 등록합니다.
앱을 등록한 후에 해당 앱의 에어브릿지 대시보드 [트래킹링크]>[딥링크]에서 딥링크 정보를 등록합니다.
안드로이드 URI 스킴
딥링크에 사용할 스킴을 입력해주세요. 에어브릿지는 입력한 스킴을 사용하는 딥링크만 트래킹링크에 설정할 수 있고, 트래킹링크로 앱이 열릴 때 설정한 딥링크가 전달됩니다. 예: scheme://
안드로이드 패키지 이름
앱의 패키지이름을 입력해주세요. 예: com.example.application
sha256_cert_fingerprints
앱에 서명하는 KeyStore
파일의 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
해쉬값을 찾는 방법은 아래를 참고해주세요.
# Command
keytool -list -v -keystore YOUR_KEYSTORE.keystore
# Result
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
iOS URI 스킴
딥링크에 사용할 스킴을 입력해주세요. 에어브릿지는 입력한 스킴을 사용하는 딥링크만 트래킹링크에 설정할 수 있고, 트래킹링크로 앱이 열릴 때 설정한 딥링크가 전달됩니다. 예: scheme://
iOS 앱 ID
애플 개발자 대시보드의 앱의 [Identifier]에서 App ID Prefix
, Bundle ID
값을 가져와서 App ID Prefix
+ . + Bundle ID
형식으로 입력해주세요. 예: 9JA89QQLNQ.com.apple.wwdc
앱에 에어브릿지 SDK를 설치하고 필수 설정을 완료하세요.
전체 내용은 안드로이드 SDK 문서를 참고해주세요.
에어브릿지 안드로이드 SDK를 설치합니다. SDK를 설치할 프로젝트의 build.gradle
또는 settings.gradle
중 repositories
블락이 있는 파일에 SDK 저장소를 선언하세요. 그리고 어플리케이션의 build.gradle
파일에서 SDK 패키지를 추가하세요.
아래 링크에서 최신버전을 확인하고 $HERE_LATEST_VERSION
에 입력하세요.
SDK 버전 목록: 링크
프로젝트 build.gradle
또는 settings.gradle
파일
allprojects {
repositories {
maven { url "https://sdk-download.airbridge.io/maven" }
}
}
allprojects {
repositories {
maven("https://sdk-download.airbridge.io/maven")
}
}
dependencyResolutionManagement {
repositories {
maven { url "https://sdk-download.airbridge.io/maven" }
}
}
dependencyResolutionManagement {
repositories {
maven("https://sdk-download.airbridge.io/maven")
}
}
어플리케이션 build.gradle
파일
dependencies {
// Replace $HERE_LATEST_VERSION with latest version
// - Versions: https://sdk-download.airbridge.io/maven
// - Example: implementation "io.airbridge:sdk-android:0.0.0"
implementation "io.airbridge:sdk-android:$HERE_LATEST_VERSION"
}
dependencies {
// Replace $HERE_LATEST_VERSION with latest version
// - Versions: https://sdk-download.airbridge.io/maven
// - Example: implementation "io.airbridge:sdk-android:0.0.0"
implementation("io.airbridge:sdk-android:$HERE_LATEST_VERSION")
}
MainApplication
클래스를 생성하고 AndroidManifest.xml
에 추가하세요. 그리고 클래스의 onCreate
함수에서 SDK를 초기화하세요.
YOUR_APP_NAME
과 YOUR_APP_SDK_TOKEN
은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.
<application
android:name=".MainApplication"
...>
import android.app.Application
import co.ab180.airbridge.Airbridge
class MainApplication: Application() {
override fun onCreate() {
super.onCreate()
// YOUR_APP_NAME: Input your app name
// YOUR_APP_SDK_TOKEN: Input your app token
val option = AirbridgeOptionBuilder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
.build()
Airbridge.initializeSDK(this, option)
}
}
import android.app.Application;
import co.ab180.airbridge.Airbridge;
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// YOUR_APP_NAME: Input your app name
// YOUR_APP_SDK_TOKEN: Input your app token
AirbridgeOption option = new AirbridgeOptionBuilder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
.build();
Airbridge.initializeSDK(this, option);
}
}
AndroidManifest.xml
파일의 각 태그의 내용에 따라 선택적으로 백업룰을 설정해주세요.
<manifest>
태그의 xmlns:tools
에 내용을 추가해주세요.
<application>
태그에 android:allowBackup
이 있으면 tools:replace
에 값을 추가해주세요.
<application>
태그에 android:dataExtractionRules
이 있으면 tools:replace
에 값을 추가하고 파일에 아래의 규칙을 추가해주세요.
<application>
태그에 android:fullBackupContent
이 있으면 tools:replace
에 값을 추가하고 파일에 아래의 규칙을 추가해주세요.
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
...>
<application
android:allowBackup="..."
android:dataExtractionRules="..."
android:fullBackupContent="..."
tools:replace="android:allowBackup,android:dataExtractionRules,android:fullBackupContent"
...>
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
<cloud-backup>
<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" />
</cloud-backup>
<device-transfer>
<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" />
</device-transfer>
</data-extraction-rules>
<?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>
딥링크를 설정합니다. 아래 3가지 설정을 모두 완료하세요.
딥링크를 처리하는 Activity 클래스를 생성하고 AndroidManifest.xml
에 추가하세요. 그리고 에어브릿지 딥링크 3개를 Intent Filter
에 추가하세요. 에어브릿지는 트래킹 링크가 작동할 때 브라우저, 설치 여부 등에 따라 이 중 가장 적합한 딥링크로 앱을 실행합니다.
YOUR_SCHEME
은 에어브릿지 대시보드의 [트래킹링크]>[딥링크]에서 확인한 값을 ://
없이 사용합니다. YOUR_APP_NAME
과 YOUR_APP_SDK_TOKEN
은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.
<application ...>
...
<activity android:name=".DeeplinkActivity" ...>
...
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- YOUR_SCHEME: Input your Android URI Scheme -->
<data android:scheme="YOUR_SCHEME" />
</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" />
<!-- YOUR_APP_NAME: Input your App Name -->
<data android:scheme="http" android:host="YOUR_APP_NAME.abr.ge" />
<data android:scheme="https" android:host="YOUR_APP_NAME.abr.ge" />
</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" />
<!-- YOUR_APP_NAME: Input your App Name -->
<data android:scheme="http" android:host="YOUR_APP_NAME.airbridge.io" />
<data android:scheme="https" android:host="YOUR_APP_NAME.airbridge.io" />
</intent-filter>
...
</activity>
...
</application>
딥링크를 처리하는 Activity
클래스의 onCreate
함수에서 handleDeeplink
함수를 호출해 에어브릿지 딥링크를 트래킹 링크에 설정된 딥링크로 변환하도록 설정합니다. 그리고 유저가 앱 페이지로 이동할 수 있도록 설정하세요.
앱이 에어브릿지 딥링크로 실행되면 isAirbridgeDeeplink
는 true
가 되고, 콜백함수의 uri
에는 설정된 딥링크가 전달됩니다.
앱이 다른 플랫폼의 딥링크로 실행되면 isAirbridgeDeeplink
는 false
가 되고, 콜백함수는 호출되지 않습니다.
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import co.ab180.airbridge.Airbridge
class DeeplinkActivity: AppCompatActivity() {
override fun onResume() {
super.onResume()
val isAirbridgeDeeplink = Airbridge.handleDeeplink(intent) { uri ->
// when app is opened with airbridge deeplink
// show proper content using url (YOUR_SCHEME://...)
}
if (isAirbridgeDeeplink) return
// when app is opened with other deeplink
// use existing logic as it is
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
setIntent(intent)
}
}
import android.content.Intent;
import androidx.appcompat.app.AppCompatActivity;
import co.ab180.airbridge.Airbridge;
public class DeeplinkActivity extends AppCompatActivity {
@Override
protected void onResume() {
super.onResume();
boolean isAirbridgeDeeplink = Airbridge.handleDeeplink(getIntent(), uri -> {
// when app is opened with airbridge deeplink
// show proper content using url (YOUR_SCHEME://...)
});
if (isAirbridgeDeeplink) return;
// when app is opened with other deeplink
// use existing logic as it is
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
}
앱에서 사용하는 생명주기에 따라 앱이 열릴 때, handleDeferredDeeplink
함수를 호출해 앱을 설치하기 전에 열었던 트래킹링크에 설정된 딥링크를 획득해주세요. 그리고 유저를 적절한 화면으로 이동시켜주세요. (handleDeferredDeeplink
함수를 호출하는 클래스, 함수, 시점은 자유롭게 바꿔도 됩니다.)
앱을 설치하고 함수가 처음으로 호출되면 isFirstCalled
는 true
가 되고, 콜백의 uri
에는 앱을 설치하기 전에 트래킹링크를 열었다면 설정된 딥링크가, 아니라면 null
이 전달됩니다.
앱을 설치하고 함수가 이후로 호출되면 isFirstCalled
는 false
가 되고, 콜백은 호출되지 않습니다.
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import co.ab180.airbridge.Airbridge
class MainActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val isFirstCalled = Airbridge.handleDeferredDeeplink { uri ->
// when handleDeferredDeeplink is called firstly after install
if (uri != null) {
// show proper content using uri (YOUR_SCHEME://...)
}
}
if (isFirstCalled) return
// when handleDeferredDeeplink is called secondly or later after install
// use existing logic as it is
}
}
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import co.ab180.airbridge.Airbridge;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean isFirstCalled = Airbridge.handleDeferredDeeplink(uri -> {
// when app is opened with airbridge deeplink
if (uri != null) {
// show proper content using uri (YOUR_SCHEME://...)
}
});
if (isFirstCalled) return;
// when app is opened with other deeplink
// use existing logic as it is
}
}
trackEvent
함수를 호출해 이벤트를 전송하도록 설정합니다. 에어브릿지가 제공하는 스탠다드 카테고리와 시맨틱 어트리뷰트를 사용하는 것을 권장합니다. 커스텀 카테고리와 커스텀 어트리뷰트를 직접 정의해 사용할 수도 있습니다. 자세한 내용은 Android SDK 가이드를 참고하세요.
Airbridge.trackEvent(
// StandardCategory
// or "CustomEvent" (CustomCategory)
AirbridgeCategory.ORDER_COMPLETED,
// SemanticAttributes
mapOf(
AirbridgeAttribute.VALUE to 11,
AirbridgeAttribute.TRANSACTION_ID to "8065ef16-162b-4a82-b683-e51aefdda7d5",
AirbridgeAttribute.CURRENCY to "USD",
AirbridgeAttribute.IN_APP_PURCHASED to true,
),
// CustomAttributes
mapOf(
"key" to "value",
)
)
Airbridge.trackEvent(
// StandardCategory
// or "CustomEvent" (CustomCategory)
AirbridgeCategory.ORDER_COMPLETED,
// SemanticAttributes
new HashMap() {{
put(AirbridgeAttribute.VALUE, 11);
put(AirbridgeAttribute.TRANSACTION_ID, "8065ef16-162b-4a82-b683-e51aefdda7d5");
put(AirbridgeAttribute.CURRENCY, "USD");
put(AirbridgeAttribute.IN_APP_PURCHASED, true);
}},
// CustomAttributes
new HashMap() {{
put("key", "value");
}}
);
전체 내용은 iOS SDK 문서를 참고해주세요.
에어브릿지 iOS SDK를 설치합니다.
1. Xcode에서 [File]에서 [Add Packages...]를 클릭해 주세요.
2. 검색창에 아래 주소를 입력하고 [Add Package]를 클릭합니다.
3. [Add Package]를 계속해서 클릭합니다.
4. Xcode의 [Package Dependencies]에서 에어브릿지 iOS SDK 추가를 확인할 수 있습니다.
주의하세요
[Xcode]>[YOUR_PROJECT]>[Build Settings]>[User Script Sandboxing]을 No로 설정한 후에 iOS SDK를 설치해야 합니다. 자세한 내용은 CocoaPods 문서를 참고해 주세요.
1. brew install cocoapods
로 CocoaPods를 설치합니다.
2. pod init
로 Podfile을 생성합니다.
3. Podfile에 아래 코드로 SDK를 의존성으로 추가합니다. 그리고 아래 링크에서 최신버전을 확인하고 $HERE_LATEST_VERSION
에 입력하세요.
SDK 버전 목록: 링크
target '[Project Name]' do
...
# Replace $HERE_LATEST_VERSION with latest version
# - Versions: https://help.airbridge.io/developers/release-note-ios-sdk
# - Example: pod 'airbridge-ios-sdk', '4.X.X'
pod 'airbridge-ios-sdk', '$HERE_LATEST_VERSION'
...
end
4. pod install --repo-update
를 입력하면 설치가 진행됩니다
5. YOUR_PROJECT.xcworkspace
를 실행하면 에어브릿지 iOS SDK가 정상적으로 설치된 것을 확인할 수 있습니다.
주의하세요
Tuist의 Tuist's XcodeProj-based integration 방식으로는 에어브릿지 iOS SDK를 설치할 수 없습니다. 반드시 Xcode's default integration 방식으로 설치해 주세요.
1. tuist edit
명령어를 실행합니다.
2. project.packages
에 remote
를 추가합니다. project.targets[...].target.dependencies
에 package
를 추가합니다. 그리고 아래 링크에서 최신버전을 확인하고 $HERE_LATEST_VERSION
에 입력하세요.
SDK 버전 목록: 링크
import ProjectDescription
let project = Project(
packages: [
.remote(
url: "https://github.com/ab180/airbridge-ios-sdk-deployment",
// Replace $HERE_LATEST_VERSION with latest version
// - Versions: https://help.airbridge.io/developers/release-note-ios-sdk
// - Example: requirement: .exact(from: "4.X.X")
requirement: .exact(from: "$HERE_LATEST_VERSION")
),
...
],
targets: [
.target(
dependencies: [
.package(product: "Airbridge", type: .runtime),
...
]
),
...
],
...
)
3. tuist generate
명령어를 실행합니다.
4. Xcode의 Package Dependencies에 Airbridge가 추가됩니다.
1. 아래 링크에서 에어브릿지 iOS SDK를 다운로드합니다.
2. Airbridge.xcframework를 프로젝트에 추가합니다. [Xcode]>[프로젝트 파일]>[General]>[Frameworks, Libraries, and Embedded Content]에서 ‘+’를 클릭합니다.
3. [Add Other...]에서 ‘Add Files...’를 클릭하고 Airbridge.xcframework를 선택합니다.
4. Airbridge.xcframework의 Embed를 Do not Embed로 설정합니다.
5. SDK의 의존성에 해당하는 Framework를 프로젝트에 추가합니다. [Xcode]>[프로젝트 파일]>[General]>[Frameworks, Libraries, and Embedded Content]에서 ‘+’를 클릭합니다.
6. 아래 Framework를 모두 추가합니다. 추가한 Framework의 Embed를 Do not Embed로 설정합니다. 그리고 [Xcode]>[프로젝트 파일]>[Build Phase]>[Link Binary With Libraries]에서 Status를 Optional로 설정합니다.
Framework | 설명 |
---|---|
AdSupport.framework | IDFA를 수집하는데 사용합니다. |
CoreTelephony.framework | 통신사 정보를 수집하는데 사용합니다. |
StoreKit.framework | SKAdNetwork 정보를 수집하는데 사용합니다. |
AppTrackingTransparency.framework | 추적 허용 상태정보를 수집하는데 사용합니다. |
AdServices.framework | Apple Ads의 어트리뷰션 정보를 수집하는데 사용합니다. (iOS 14.3+) |
WebKit.framework | Web SDK와 연동하여 이벤트를 수집하는데 사용합니다. |
앱에서 사용하는 생명주기에 따라 앱이 열릴 때, SDK를 초기화하세요.
YOUR_APP_NAME
과 YOUR_APP_SDK_TOKEN
은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.
import UIKit
import Airbridge
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let option = AirbridgeOptionBuilder(name: "YOUR_APP_NAME", token: "YOUR_APP_SDK_TOKEN")
.build()
Airbridge.initializeSDK(option: option)
return true
}
}
import UIKit
import Airbridge
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let option = AirbridgeOptionBuilder(name: "YOUR_APP_NAME", token: "YOUR_APP_SDK_TOKEN")
.build()
Airbridge.initializeSDK(option: option)
return true
}
}
import SwiftUI
import Airbridge
@main
struct ExampleApp: App {
init() {
let option = AirbridgeOptionBuilder(name: "YOUR_APP_NAME", token: "YOUR_APP_SDK_TOKEN")
.build()
Airbridge.initializeSDK(option: option)
}
}
#import "AppDelegate.h"
#import <Airbridge/Airbridge.h>
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
AirbridgeOptionBuilder* optionBuilder = [[AirbridgeOptionBuilder alloc] initWithName:@"YOUR_APP_NAME"
token:@"YOUR_APP_SDK_TOKEN"];
AirbridgeOption* option = [optionBuilder build];
[Airbridge initializeSDKWithOption:option];
return YES;
}
@end
#import "AppDelegate.h"
#import <Airbridge/Airbridge.h>
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
AirbridgeOptionBuilder* optionBuilder = [[AirbridgeOptionBuilder alloc] initWithName:@"YOUR_APP_NAME"
token:@"YOUR_APP_SDK_TOKEN"];
AirbridgeOption* option = [optionBuilder build];
[Airbridge initializeSDKWithOption:option];
return YES;
}
@end
ATT 프롬프트를 제공할 때 사용할 문구를 정해서 Info.plist
파일의 NSUserTrackingUsageDescription
키에 입력합니다.
Xcode > YOUR_PROJECT > Info > Custom iOS Target Properties로 이동해주세요.
Key의 항목들에 마우스를 가져가면 표시되는 + 버튼을 누르고 Privacy - Tracking Usage Description
를 입력해 주세요.
Value에 표시할 문구를 입력해 주세요.
1. tuist edit 명령어를 실행해주세요.
2. project.targets[...].infoPlist
의 .extendingDefault
에 키로 NSUserTrackingUsageDescription
를, 밸류로 문구를 입력해주세요.
import ProjectDescription
let project = Project(
targets: [
.target(
infoPlist: .extendingDefault(
with: [
"NSUserTrackingUsageDescription": "YOUR_DESCRIPTION",
...
]
),
...
),
...
]
...
)
유저가 앱을 실행한 직후 또는 다른 원하는 시점에 ATT 프롬프트가 디바이스에 나타나도록 설정합니다.
import AppTrackingTransparency
...
var observer: Any?
observer = NotificationCenter.default.addObserver(
forName: UIApplication.didBecomeActiveNotification,
object: nil,
queue: nil
) { [weak self] _ in
if #available(iOS 14, *) {
ATTrackingManager.requestTrackingAuthorization { _ in }
}
if let observer = self?.observer {
NotificationCenter.default.removeObserver(observer)
}
}
#import <Airbridge/Airbridge.h>
#import <AppTrackingTransparency/AppTrackingTransparency.h>
...
__weak id observer;
observer = [NSNotificationCenter.defaultCenter addObserverForName:UIApplicationDidBecomeActiveNotification
object:nil
queue:nil
usingBlock:^(NSNotification * _Nonnull notification) {
if (@available(iOS 14, *)) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {}];
}
if (observer != nil) {
[NSNotificationCenter.defaultCenter removeObserver:observer];
}
}];
SDK는 유저가 ATT 프롬프트에서 동의 여부를 결정할 때까지 설치 이벤트를 수집하지 않고 디퍼드 딥링크를 작동하지 않습니다. 이에 대한 타임아웃을 설정해주세요. (기본적으로 30초이고 최대 1시간까지 설정할 수 있습니다. ATT 프롬프트를 사용하지 않는다면 0초로 설정해주세요.)
import Airbridge
...
let option = AirbridgeOptionBuilder(name: "YOUR_APP_NAME",
token: "YOUR_APP_SDK_TOKEN")
.setAutoDetermineTrackingAuthorizationTimeout(second: 30)
.build()
Airbridge.initializeSDK(option: option)
#import <Airbridge/Airbridge.h>
...
AirbridgeOptionBuilder* optionBuilder = [[AirbridgeOptionBuilder alloc] initWithName:@"YOUR_APP_NAME"
token:@"YOUR_APP_SDK_TOKEN"];
[optionBuilder setAutoDetermineTrackingAuthorizationTimeoutWithSecond:30];
AirbridgeOption* option = [optionBuilder build];
[Airbridge initializeSDKWithOption:option];
딥링크를 설정합니다. 아래 3가지 설정을 모두 완료하세요.
앱에 에어브릿지 딥링크 3개를 설정해주세요. 에어브릿지는 트래킹 링크가 작동할 때 브라우저, 설치 여부 등에 따라 이 중 가장 적합한 딥링크로 앱을 실행합니다.
YOUR_SCHEME
은 에어브릿지 대시보드의 [트래킹링크]>[딥링크]에서 확인한 값을 ://
없이 사용합니다. YOUR_APP_NAME
과 YOUR_APP_SDK_TOKEN
은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.
스킴 딥링크 앱 설정
Xcode에서 [YOUR_PROJECT]>[Info]>[URL Types]로 이동하고 '+'를 클릭합니다. 그리고 YOUR_SCHEME
을 입력합니다.
유니버셜 링크 앱 설정
Xcode에서 [YOUR_PROJECT]>[Signing & Capabilities]로 이동하고 '+ Capability'를 클릭합니다. 그리고 Associated Domains를 선택하고 applinks:YOUR_APP_NAME.airbridge.io
와 applinks:YOUR_APP_NAME.abr.ge
를 추가합니다.
앱에서 사용하는 생명주기에 따라 앱이 딥링크로 열릴 때, trackDeeplink
함수를 호출해 SDK가 딥링크 이벤트를 수집할 수 있게 해주세요. 그리고 handleDeeplink
함수를 호출해 에어브릿지 딥링크를 트래킹 링크에 설정된 스킴 딥링크로 변환하도록 설정합니다. 그리고 유저가 앱 페이지로 이동할 수 있도록 설정하세요.
앱이 에어브릿지 딥링크로 실행되면 isAirbridgeDeeplink
는 true
가 되고, 콜백함수의 url
에는 설정된 딥링크가 전달됩니다.
앱이 다른 플랫폼의 딥링크로 실행되면 isAirbridgeDeeplink
는 false
가 되고, 콜백 함수는 호출되지 않습니다.
import UIKit
import Airbridge
@main
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
// when app is opened with airbridge deeplink
func handleAirbridgeDeeplink(url: URL) {
// show proper content using url (YOUR_SCHEME://...)
}
// when terminated app is opened with scheme deeplink or universal links
func scene(
_ scene: UIScene,
willConnectTo session: UISceneSession,
options connectionOptions: UIScene.ConnectionOptions
) {
// when app is opened with scheme deeplink
if let url = connectionOptions.urlContexts.first?.url {
// track deeplink
Airbridge.trackDeeplink(url: url)
// handle deeplink
var isAirbridgeDeeplink = Airbridge.handleDeeplink(url: url) { url in
// when app is opened with airbridge deeplink
// show proper content using url (YOUR_SCHEME://...)
handleAirbridgeDeeplink(url: url)
}
if isAirbridgeDeeplink { return }
// when app is opened with other deeplink
// use existing logic as it is
}
// when app is opened with universal links
else if let userActivity = connectionOptions.userActivities.first {
// track deeplink
Airbridge.trackDeeplink(userActivity: userActivity)
// handle deeplink
var isAirbridgeDeeplink = Airbridge.handleDeeplink(userActivity: userActivity) { url in
// when app is opened with airbridge deeplink
// show proper content using url (YOUR_SCHEME://...)
handleAirbridgeDeeplink(url: url)
}
if isAirbridgeDeeplink { return }
// when app is opened with other deeplink
// use existing logic as it is
}
}
// when backgrounded app is opened with scheme deeplink
func scene(
_ scene: UIScene,
openURLContexts URLContexts: Set<UIOpenURLContext>
) {
guard let url = URLContexts.first?.url else { return }
// track deeplink
Airbridge.trackDeeplink(url: url)
// handle deeplink
var isAirbridgeDeeplink = Airbridge.handleDeeplink(url: url) { url in
// when app is opened with airbridge deeplink
// show proper content using url (YOUR_SCHEME://...)
handleAirbridgeDeeplink(url: url)
}
if isAirbridgeDeeplink { return }
// when app is opened with other deeplink
// use existing logic as it is
}
// when backgrounded app is opened with universal links
func scene(
_ scene: UIScene,
continue userActivity: NSUserActivity
) {
// track deeplink
Airbridge.trackDeeplink(userActivity: userActivity)
// handle deeplink
var isAirbridgeDeeplink = Airbridge.handleDeeplink(userActivity: userActivity) { url in
// when app is opened with airbridge deeplink
// show proper content using url (YOUR_SCHEME://...)
handleAirbridgeDeeplink(url: url)
}
if isAirbridgeDeeplink { return }
// when app is opened with other deeplink
// use existing logic as it is
}
}
import UIKit
import Airbridge
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
// when app is opened with airbridge deeplink
func handleAirbridgeDeeplink(url: URL) {
// show proper content using url (YOUR_SCHEME://...)
}
// when app is opened with scheme deeplink
func application(
_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]
) -> Bool {
// track deeplink
Airbridge.trackDeeplink(url: url)
// handle deeplink
var isAirbridgeDeeplink = Airbridge.handleDeeplink(url: url) { url in
// when app is opened with airbridge deeplink
// show proper content using url (YOUR_SCHEME://...)
handleAirbridgeDeeplink(url: url)
}
if isAirbridgeDeeplink { return }
// when app is opened with other deeplink
// use existing logic as it is
return isAirbridgeDeeplink
}
// when app is opened with universal links
func application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
) -> Bool {
// track deeplink
Airbridge.trackDeeplink(userActivity: userActivity)
// handle deeplink
var isAirbridgeDeeplink = Airbridge.handleDeeplink(userActivity: userActivity) { url in
// when app is opened with airbridge deeplink
// show proper content using url (YOUR_SCHEME://...)
handleAirbridgeDeeplink(url: url)
}
if isAirbridgeDeeplink { return }
// when app is opened with other deeplink
// use existing logic as it is
return isAirbridgeDeeplink
}
}
import SwiftUI
import Airbridge
@main
struct ActualApp: App {
var body: some Scene {
WindowGroup {
ContentView()
// when app is opened with scheme deeplink or universal links
.onOpenURL { url in
// track deeplink
Airbridge.trackDeeplink(url: url)
// handle deeplink
var isAirbridgeDeeplink = Airbridge.handleDeeplink(url: url) { url in
// when app is opened with airbridge deeplink
// show proper content using url (YOUR_SCHEME://...)
}
if isAirbridgeDeeplink { return }
// when app is opened with other deeplink
// use existing logic as it is
}
}
}
}
#import "AppDelegate.h"
#import <Airbridge/Airbridge.h>
@interface SceneDelegate ()
@end
@implementation SceneDelegate
// when app is opened with airbridge deeplink
- (void)handleAirbridgeDeeplink:(NSURL *)url {
// show proper content using url (YOUR_SCHEME://...)
}
// when terminated app is opened with scheme deeplink or universal links
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
// when app is opened with scheme deeplink
NSURL* url = connectionOptions.URLContexts.allObjects.firstObject.URL;
NSUserActivity* userActivity = connectionOptions.userActivities.allObjects.firstObject;
if (url != nil) {
// track deeplink
[Airbridge trackDeeplinkWithUrl:url];
// handle deeplink
BOOL isAirbridgeDeeplink = [Airbridge handleDeeplinkWithUrl:url onSuccess:^(NSURL* url) {
// when app is opened with airbridge deeplink
// show proper content using url (YOUR_SCHEME://...)
[self handleAirbridgeDeeplink:url];
}];
if (isAirbridgeDeeplink) { return; }
// when app is opened with other deeplink
// use existing logic as it is
}
else if (userActivity != nil) {
// track deeplink
[Airbridge trackDeeplinkWithUserActivity:userActivity];
// handle deeplink
BOOL isAirbridgeDeeplink = [Airbridge handleDeeplinkWithUserActivity:userActivity onSuccess:^(NSURL* url) {
// when app is opened with airbridge deeplink
// show proper content using url (YOUR_SCHEME://...)
[self handleAirbridgeDeeplink:url];
}];
if (isAirbridgeDeeplink) { return; }
// when app is opened with other deeplink
// use existing logic as it is
}
}
// when backgrounded app is opened with scheme deeplink
- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts {
NSURL* url = URLContexts.allObjects.firstObject.URL;
if (url == nil) { return; }
// track deeplink
[Airbridge trackDeeplinkWithUrl:url];
// handle deeplink
BOOL isAirbridgeDeeplink = [Airbridge handleDeeplinkWithUrl:url onSuccess:^(NSURL* url) {
// when app is opened with airbridge deeplink
// show proper content using url (YOUR_SCHEME://...)
[self handleAirbridgeDeeplink:url];
}];
if (isAirbridgeDeeplink) { return; }
// when app is opened with other deeplink
// use existing logic as it is
}
// when backgrounded app is opened with universal links
- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity {
// track deeplink
[Airbridge trackDeeplinkWithUserActivity:userActivity];
// handle deeplink
BOOL isAirbridgeDeeplink = [Airbridge handleDeeplinkWithUserActivity:userActivity onSuccess:^(NSURL* url) {
// when app is opened with airbridge deeplink
// show proper content using url (YOUR_SCHEME://...)
[self handleAirbridgeDeeplink:url];
}];
if (isAirbridgeDeeplink) { return; }
// when app is opened with other deeplink
// use existing logic as it is
}
@end
#import "AppDelegate.h"
#import <Airbridge/Airbridge.h>
@interface AppDelegate ()
@end
@implementation AppDelegate
// when app is opened with airbridge deeplink
- (void)handleAirbridgeDeeplink:(NSURL *)url {
// show proper content using url (YOUR_SCHEME://...)
}
// when app is opened with scheme deeplink
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
// track deeplink
[Airbridge trackDeeplinkWithUrl:url];
// handle deeplink
BOOL isAirbridgeDeeplink = [Airbridge handleDeeplinkWithUrl:url onSuccess:^(NSURL* url) {
// when app is opened with airbridge deeplink
// show proper content using url (YOUR_SCHEME://...)
[self handleAirbridgeDeeplink:url];
}];
if (isAirbridgeDeeplink) { return; }
// when app is opened with other deeplink
// use existing logic as it is
return isAirbridgeDeeplink;
}
// when app is opened with universal links
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
// track deeplink
[Airbridge trackDeeplinkWithUserActivity:userActivity];
// handle deeplink
BOOL isAirbridgeDeeplink = [Airbridge handleDeeplinkWithUserActivity:userActivity onSuccess:^(NSURL* url) {
// when app is opened with airbridge deeplink
// show proper content using url (YOUR_SCHEME://...)
[self handleAirbridgeDeeplink:url];
}];
if (isAirbridgeDeeplink) { return; }
// when app is opened with other deeplink
// use existing logic as it is
return isAirbridgeDeeplink;
}
@end
앱에서 사용하는 생명주기에 따라 앱이 열릴 때, handleDeferredDeeplink
함수를 호출해 앱을 설치하기 전에 열었던 트래킹링크에 설정된 딥링크를 획득해주세요. 그리고 유저를 적절한 화면으로 이동시켜주세요. (handleDeferredDeeplink
함수를 호출하는 클래스, 함수, 시점은 자유롭게 바꿔도 됩니다.)
앱을 설치하고 함수가 처음으로 호출되면 isFirstCalled
는 true
가 되고, 콜백의 uri
에는 앱을 설치하기 전에 트래킹링크를 열었다면 설정된 딥링크가, 아니라면 null
이 전달됩니다.
앱을 설치하고 함수가 이후로 호출되면 isFirstCalled
는 false
가 되고, 콜백은 호출되지 않습니다.
import UIKit
import Airbridge
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let option = AirbridgeOptionBuilder(name: "YOUR_APP_NAME", token: "YOUR_APP_SDK_TOKEN")
.build()
Airbridge.initializeSDK(option: option)
let isFirstCalled = Airbridge.handleDeferredDeeplink() { url in
// when handleDeferredDeeplink is called firstly after install
if let url {
// show `proper content using url (YOUR_SCHEME://...)
}
}
if (isFirstCalled) { return true }
// when handleDeferredDeeplink is called secondly or later after install
// use existing logic as it is
return true
}
}
import UIKit
import Airbridge
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let option = AirbridgeOptionBuilder(name: "YOUR_APP_NAME", token: "YOUR_APP_SDK_TOKEN")
.build()
Airbridge.initializeSDK(option: option)
let isFirstCalled = Airbridge.handleDeferredDeeplink() { url in
// when handleDeferredDeeplink is called firstly after install
if let url {
// show `proper content using url (YOUR_SCHEME://...)
}
}
if (isFirstCalled) { return true }
// when handleDeferredDeeplink is called secondly or later after install
// use existing logic as it is
return true
}
}
import SwiftUI
import Airbridge
@main
struct ExampleApp: App {
init() {
let option = AirbridgeOptionBuilder(name: "YOUR_APP_NAME", token: "YOUR_APP_SDK_TOKEN")
.build()
Airbridge.initializeSDK(option: option)
let isFirstCalled = Airbridge.handleDeferredDeeplink() { url in
// when handleDeferredDeeplink is called firstly after install
if let url {
// show `proper content using url (YOUR_SCHEME://...)
}
}
if (isFirstCalled) { return true }
// when handleDeferredDeeplink is called secondly or later after install
// use existing logic as it is
}
}
#import "AppDelegate.h"
#import <Airbridge/Airbridge.h>
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
AirbridgeOptionBuilder* optionBuilder = [[AirbridgeOptionBuilder alloc] initWithName:@"YOUR_APP_NAME"
token:@"YOUR_APP_SDK_TOKEN"];
AirbridgeOption* option = [optionBuilder build];
[Airbridge initializeSDKWithOption:option];
BOOL isFirstCalled = [Airbridge handleDeferredDeeplinkOnSuccess:^(NSURL* url) {
// when handleDeferredDeeplink is called firstly after install
if let url {
// show `proper content using url (YOUR_SCHEME://...)
}
}];
if (isFirstCalled) { return YES; }
// when handleDeferredDeeplink is called secondly or later after install
// use existing logic as it is
return YES;
}
@end
#import "AppDelegate.h"
#import <Airbridge/Airbridge.h>
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
AirbridgeOptionBuilder* optionBuilder = [[AirbridgeOptionBuilder alloc] initWithName:@"YOUR_APP_NAME"
token:@"YOUR_APP_SDK_TOKEN"];
AirbridgeOption* option = [optionBuilder build];
[Airbridge initializeSDKWithOption:option];
BOOL isFirstCalled = [Airbridge handleDeferredDeeplinkOnSuccess:^(NSURL* url) {
// when handleDeferredDeeplink is called firstly after install
if let url {
// show `proper content using url (YOUR_SCHEME://...)
}
}];
if (isFirstCalled) { return YES; }
// when handleDeferredDeeplink is called secondly or later after install
// use existing logic as it is
return YES;
}
@end
trackEvent
함수를 호출해 이벤트를 전송하도록 설정합니다. 에어브릿지가 제공하는 스탠다드 카테고리와 시맨틱 어트리뷰트를 사용하는 것을 권장합니다. 커스텀 카테고리와 커스텀 어트리뷰트를 직접 정의해 사용할 수도 있습니다. 자세한 내용은 iOS SDK 가이드를 참고하세요.
Airbridge.trackEvent(
// StandardCategory
// or "CustomEvent" (CustomCategory)
category: AirbridgeCategory.ORDER_COMPLETED,
// SemanticAttributes
semanticAttributes: [
AirbridgeAttribute.VALUE: 11,
AirbridgeAttribute.TRANSACTION_ID: "8065ef16-162b-4a82-b683-e51aefdda7d5",
AirbridgeAttribute.CURRENCY: "USD",
AirbridgeAttribute.IN_APP_PURCHASED: true,
],
// CustomAttributes
customAttributes: [
"key": "value",
]
)
// StandardCategory
// or "CustomEvent" (CustomCategory)
[Airbridge trackEventWithCategory:@"event" semanticAttributes:@{
// SemanticAttributes
AirbridgeAttribute.VALUE: @(11),
AirbridgeAttribute.TRANSACTION_ID: @"8065ef16-162b-4a82-b683-e51aefdda7d5",
AirbridgeAttribute.CURRENCY: @"USD",
AirbridgeAttribute.IN_APP_PURCHASED: @(YES),
} customAttributes:@{
// CustomAttributes
@"key": @"value",
}];
전체 내용은 웹 SDK 문서를 참고해주세요.
에어브릿지 웹 SDK를 설치합니다.
<!-- Add to <head> tag -->
<script>
(function(a_,i_,r_,_b,_r,_i,_d,_g,_e){if(!a_[_b]){var n=function(){var c=i_.createElement(r_);c.onerror=function(){g.queue.filter(function(a){return 0<=_d.indexOf(a[0])}).forEach(function(a){a=a[1];a=a[a.length-1];"function"===typeof a&&a("error occur when load airbridge")})};c.async=1;c.src=_r;"complete"===i_.readyState?i_.head.appendChild(c):a_.addEventListener("load",function h(){a_.removeEventListener("load",h);i_.head.appendChild(c)})},g={queue:[],get isSDKEnabled(){return!1}};_i.concat(_d).forEach(function(c){var a=c.split("."),h=a.pop();a.reduce(function(p,q){return p[q]=p[q]||{}},g)[h]=function(){g.queue.push([c,arguments])}});a_[_b]=g;0<_g?(_b=new (a_.XDomainRequest||a_.XMLHttpRequest),_i=function(){},_b.open("GET",_r),_b.timeout=_g,_b.onload=function(){n()},_b.onerror=_i,_b.onprogress=_i,_b.ontimeout=_i,_b.send()):n()}})(window,document,"script","airbridge","//static.airbridge.io/sdk/latest/airbridge.min.js","init startTracking stopTracking fetchResource openBanner setBanner setDownload setDownloads openDeeplink setDeeplinks sendWeb setUserAgent setMobileAppData setUserID clearUserID setUserEmail clearUserEmail setUserPhone clearUserPhone setUserAttribute removeUserAttribute clearUserAttributes setUserAlias removeUserAlias clearUserAlias clearUser setUserId setUserAttributes addUserAlias setDeviceAlias removeDeviceAlias clearDeviceAlias setDeviceIFV setDeviceIFA setDeviceGAID events.send events.signIn events.signUp events.signOut events.purchased events.addedToCart events.productDetailsViewEvent events.homeViewEvent events.productListViewEvent events.searchResultViewEvent".split(" "),["events.wait","createTouchpoint"],0);
</script>
npm install airbridge-web-sdk-loader
yarn add airbridge-web-sdk-loader
pnpm install airbridge-web-sdk-loader
npm, yarn, pnpm 방식으로 설치하면 아래와 같이 airbridge
를 import
합니다. script 방식으로 설치하면 자동으로 window
에 airbridge
가 추가됩니다.
import airbridge from 'airbridge-web-sdk-loader'
웹사이트가 열릴 때, SDK를 초기화해주세요.
YOUR_APP_NAME
과 YOUR_WEB_SDK_TOKEN
은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_SDK_TOKEN',
})
유저를 웹사이트에서 앱으로 보내기 위해서는 openDeeplink
함수를 호출해 앱을 설치한 유저는 앱으로, 앱을 설치하지 않은 유저는 앱 스토어 또는 웹사이트로 보내도록 설정하세요.
airbridge.openDeeplink({
deeplinks: {
ios: 'example://detail?id=1',
android: 'example://detail?id=1',
desktop: 'https://example.com/detail?id=1'
},
fallbacks: {
ios: 'itunes-appstore', // or 'https://example.com'
android: 'google-play' // or 'https://example.com'
}
})
trackEvent
함수를 호출해 이벤트를 전송해주세요. 되도록 에어브릿지가 제공하는 스탠다드 카테고리와 시맨틱 어트리뷰트를 사용하시는 것을 권장합니다. 또는 커스텀 카테고리와 커스텀 어트리뷰트를 직접 정의해 사용할 수 있습니다. 자세한 내용은 웹 SDK 가이드를 참고해주세요.
// StandardCategory
// or "CustomEvent" (CustomCategory)
airbridge.events.send('airbridge.ecommerce.order.completed', {
value: 11,
// SemanticAttributes
semanticAttributes: {
transactionID: '8065ef16-162b-4a82-b683-e51aefdda7d5',
currency: 'USD',
inAppPurchased: true,
},
// CustomAttributes
customAttributes: {
key: 'value',
}
})
전체 내용은 리액트 네이티브 SDK 문서를 참고해주세요.
에어브릿지 리액트 네이티브 SDK를 설치합니다.
npm install airbridge-react-native-sdk
cd ios; pod install
앱이 열릴 때, SDK를 초기화해주세요.
YOUR_APP_NAME
과 YOUR_APP_SDK_TOKEN
은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.
ios/YOUR_PROJECT_NAME/AppDelegate.m
파일
import AirbridgeReactNative
...
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
AirbridgeReactNative.initializeSDK(name: "YOUR_APP_NAME", token:"YOUR_APP_SDK_TOKEN")
...
}
#import <AirbridgeReactNative/AirbridgeReactNative.h>
...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[AirbridgeReactNative initializeSDKWithName:@"YOUR_APP_NAME" token:@"YOUR_APP_SDK_TOKEN"];
...
}
android/app/src/main/java/.../MainApplication.kt
파일
import co.ab180.airbridge.reactnative.AirbridgeReactNative
...
override fun onCreate() {
super.onCreate()
AirbridgeReactNative.initializeSDK(this, "YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
...
}
import co.ab180.airbridge.reactnative.AirbridgeReactNative;
...
@Override
public void onCreate() {
super.onCreate();
AirbridgeReactNative.initializeSDK(this, "YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN");
...
}
에어브릿지 리액트 네이티브 SDK를 사용하기 위한 설정값을 입력해 주세요.
{
"sdkEnabled": boolean,
"logLevel": "debug" | "info" | "warning" | "error" | "fault",
"autoStartTrackingEnabled": boolean,
"autoDetermineTrackingAuthorizationTimeoutInSecond": number,
"trackMetaDeferredAppLinkEnabled": boolean,
"sessionTimeoutInSecond": number,
"metaInstallReferrerAppID": string,
"trackAirbridgeDeeplinkOnlyEnabled": boolean,
"trackInSessionLifecycleEventEnabled": boolean,
"hashUserInformationEnabled": boolean,
"sdkSignatureID": string,
"sdkSignatureSecret": string,
"clearEventBufferOnInitializeEnabled": boolean,
"eventBufferCountLimit": number,
"eventBufferSizeLimitInGibibyte": number,
"eventTransmitIntervalInSecond": number,
"isHandleAirbridgeDeeplinkOnly": boolean,
"collectTCFDataEnabled": boolean
}
1. 리액트 네이티브 프로젝트 폴더 최상단에 airbridge.json
파일을 생성하고 위와 같이 JSON을 입력합니다.
2. 설정이 필요하지 않은 값은 키값을 생략합니다.
AndroidManifest.xml
파일의 각 태그의 내용에 따라 선택적으로 백업룰을 설정해주세요.
<manifest>
태그의 xmlns:tools
에 내용을 추가해주세요.
<application>
태그에 android:allowBackup
이 있으면 tools:replace
에 값을 추가해주세요.
<application>
태그에 android:dataExtractionRules
이 있으면 tools:replace
에 값을 추가하고 파일에 아래의 규칙을 추가해주세요.
<application>
태그에 android:fullBackupContent
이 있으면 tools:replace
에 값을 추가하고 파일에 아래의 규칙을 추가해주세요.
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
...>
<application
android:allowBackup="..."
android:dataExtractionRules="..."
android:fullBackupContent="..."
tools:replace="android:allowBackup,android:dataExtractionRules,android:fullBackupContent"
...>
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
<cloud-backup>
<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" />
</cloud-backup>
<device-transfer>
<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" />
</device-transfer>
</data-extraction-rules>
<?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>
ATT 프롬프트를 애플 가이드에 따라 원하는 시점에 표시해주세요.
SDK는 사용자가 ATT 프롬프트에서 동의여부를 결정할때까지 설치이벤트 수집 및 디퍼드 딥링크 전달을 지연시킵니다. 이에 대한 타임아웃을 설정해주세요. (기본적으로 30초이고 최대 1시간까지 설정할 수 있습니다. ATT 프롬프트를 사용하지 않는다면 0초로 설정해주세요.)
리액트 네이티브 프로젝트 폴더 최상단에 airbridge.json
파일을 생성하고 설정해주세요.
{
"autoDetermineTrackingAuthorizationTimeoutInSecond": 30
}
딥링크를 설정합니다. 아래 3가지 설정을 모두 완료하세요.
앱에 에어브릿지 딥링크 3개를 설정해주세요. 에어브릿지는 트래킹 링크가 작동할 때 브라우저, 설치 여부 등에 따라 이 중 가장 적합한 딥링크로 앱을 실행합니다.
YOUR_SCHEME
은 에어브릿지 대시보드의 [트래킹링크]>[딥링크]에서 확인한 값을 ://
없이 사용합니다. YOUR_APP_NAME
과 YOUR_APP_SDK_TOKEN
은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.
ios/YOUR_PROJECT_NAME.xcodeproj
파일
스킴 딥링크 앱 설정
Xcode에서 [YOUR_PROJECT]>[Info]>[URL Types]로 이동하고 '+'를 클릭합니다. 그리고 YOUR_SCHEME
을 입력합니다.
유니버셜 링크 앱 설정
Xcode에서 [YOUR_PROJECT]>[Signing & Capabilities]로 이동하고 '+ Capability'를 클릭합니다. 그리고 Associated Domains를 선택하고 applinks:YOUR_APP_NAME.airbridge.io
와 applinks:YOUR_APP_NAME.abr.ge
를 추가합니다.
android/app/src/main/AndroidManifest.xml
파일
<application ...>
...
<activity android:name=".DeeplinkActivity" ...>
...
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- YOUR_SCHEME: Input your Android URI Scheme -->
<data android:scheme="YOUR_SCHEME" />
</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" />
<!-- YOUR_APP_NAME: Input your App Name -->
<data android:scheme="http" android:host="YOUR_APP_NAME.abr.ge" />
<data android:scheme="https" android:host="YOUR_APP_NAME.abr.ge" />
</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" />
<!-- YOUR_APP_NAME: Input your App Name -->
<data android:scheme="http" android:host="YOUR_APP_NAME.airbridge.io" />
<data android:scheme="https" android:host="YOUR_APP_NAME.airbridge.io" />
</intent-filter>
...
</activity>
...
</application>
앱이 딥링크로 열릴 때, trackDeeplink
함수를 호출해 SDK가 딥링크 이벤트를 수집할 수 있게 해주세요.
ios/YOUR_PROJECT_NAME/AppDelegate.m
파일
import AirbridgeReactNative
...
// when app is opened with scheme deeplink
func application(
_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]
) -> Bool {
// track deeplink
AirbridgeReactNative.trackDeeplink(url: url)
return true
}
...
// when app is opened with universal links
func application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
) -> Bool {
// track deeplink
AirbridgeReactNative.trackDeeplink(userActivity: userActivity)
return true
}
#import <AirbridgeReactNative/AirbridgeReactNative.h>
...
// when app is opened with scheme deeplink
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
// track deeplink
[AirbridgeReactNative trackDeeplinkWithUrl:url];
return YES;
}
...
// when app is opened with universal links
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
// track deeplink
[AirbridgeReactNative trackDeeplinkWithUserActivity:userActivity];
return YES;
}
android/app/src/main/java/.../MainActivity.kt
파일
import co.ab180.airbridge.reactnative.AirbridgeReactNative
...
override fun onResume() {
super.onResume()
AirbridgeReactNative.trackDeeplink(intent)
}
...
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
setIntent(intent)
}
import co.ab180.airbridge.reactnative.AirbridgeReactNative;
...
@Override
protected void onResume() {
super.onResume();
AirbridgeReactNative.trackDeeplink(getIntent());
}
...
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
setOnDeeplinkReceived
함수를 호출해 에어브릿지 딥링크를 원래 트래킹링크에 설정된 딥링크로 변환해 전달받아주세요. 그리고 유저를 적절한 화면으로 이동시켜주세요.
import { Airbridge } from 'airbridge-react-native-sdk'
...
Airbridge.setOnDeeplinkReceived((url) => {
// show proper content using url
})
디퍼드 딥링크는 자동으로 OnDeeplinkReceived
에 전달되기 때문에 별도의 설정이 필요하지 않습니다.
trackEvent
함수를 호출해 이벤트를 전송해주세요. 되도록 에어브릿지가 제공하는 스탠다드 카테고리와 시맨틱 어트리뷰트를 사용하시는 것을 권장합니다. 또는 커스텀 카테고리와 커스텀 어트리뷰트를 직접 정의해 사용할 수 있습니다. 자세한 내용은 리엑트 네이티브 SDK 가이드를 참고해주세요.
import { Airbridge, AirbridgeCategory, AirbridgeAttribute } from 'airbridge-react-native-sdk'
// StandardCategory
// or "CustomEvent" (CustomCategory)
Airbridge.trackEvent(AirbridgeCategory.ORDER_COMPLETED, {
// SemanticAttributes
[AirbridgeAttribute.VALUE]: 11,
[AirbridgeAttribute.TRANSACTION_ID]: '8065ef16-162b-4a82-b683-e51aefdda7d5',
[AirbridgeAttribute.CURRENCY]: 'USD',
[AirbridgeAttribute.IN_APP_PURCHASED]: true,
}, {
// CustomAttributes
'key': 'value',
})
전체 내용은 플러터 SDK 문서를 참고해주세요.
에어브릿지 플러터 SDK를 설치합니다.
pubspec.yaml
파일의 dependencies
블럭 안에 다음과 같은 라인을 추가해 주세요. 그리고 아래 링크에서 최신버전을 확인하고 $HERE_LATEST_VERSION
에 입력하세요.
SDK 버전 목록: 링크
dependencies:
# Replace $HERE_LATEST_VERSION with latest version
# - Versions: https://pub.dev/packages/airbridge_flutter_sdk/versions
# - Example: airbridge_flutter_sdk: 0.0.0
airbridge_flutter_sdk: $HERE_LATEST_VERSION
해당 프로젝트의 최상위 파일의 위치에서 Terminal
을 열어 다음 명령어를 실행해 주세요.
Airbridge Flutter SDK 는 Flutter 1.20.0 이상, Dart 2.12.0 이상 에서만 작동합니다.
flutter pub get
앱이 열릴 때, SDK를 초기화해주세요.
YOUR_APP_NAME
과 YOUR_APP_SDK_TOKEN
은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.
ios/YOUR_PROJECT_NAME/AppDelegate.m
파일
import airbridge_flutter_sdk
...
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
AirbridgeFlutter.initializeSDK(name: "YOUR_APP_NAME", token:"YOUR_APP_SDK_TOKEN")
...
}
#import <AirbridgeFlutter/AirbridgeFlutter.h>
...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[AirbridgeFlutter initializeSDKWithName:@"YOUR_APP_NAME" token:@"YOUR_APP_SDK_TOKEN"];
...
}
android/app/src/main/java/.../MainApplication.kt
파일
import co.ab180.airbridge.flutter.AirbridgeFlutter
...
override fun onCreate() {
super.onCreate()
AirbridgeFlutter.initializeSDK(this, "YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
...
}
import co.ab180.airbridge.flutter.AirbridgeFlutter;
...
@Override
public void onCreate() {
super.onCreate();
AirbridgeFlutter.initializeSDK(this, "YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN");
...
}
에어브릿지 플러터 SDK를 사용하기 위한 설정값을 입력합니다.
{
"sdkEnabled": boolean,
"logLevel": "debug" | "info" | "warning" | "error" | "fault",
"autoStartTrackingEnabled": boolean,
"autoDetermineTrackingAuthorizationTimeoutInSecond": number,
"trackMetaDeferredAppLinkEnabled": boolean,
"sessionTimeoutInSecond": number,
"metaInstallReferrerAppID": string,
"trackAirbridgeDeeplinkOnlyEnabled": boolean,
"trackInSessionLifecycleEventEnabled": boolean,
"hashUserInformationEnabled": boolean,
"sdkSignatureID": string,
"sdkSignatureSecret": string,
"clearEventBufferOnInitializeEnabled": boolean,
"eventBufferCountLimit": number,
"eventBufferSizeLimitInGibibyte": number,
"eventTransmitIntervalInSecond": number,
"isHandleAirbridgeDeeplinkOnly": boolean,
"collectTCFDataEnabled": boolean
}
1. 리액트 네이티브 프로젝트 폴더 최상단에 airbridge.json
파일을 생성하고 위와 같이 JSON을 입력합니다.
2. 설정이 필요하지 않은 값은 키값을 생략합니다.
AndroidManifest.xml
파일의 각 태그의 내용에 따라 선택적으로 백업룰을 설정해주세요.
<manifest>
태그의 xmlns:tools
에 내용을 추가해주세요.
<application>
태그에 android:allowBackup
이 있으면 tools:replace
에 값을 추가해주세요.
<application>
태그에 android:dataExtractionRules
이 있으면 tools:replace
에 값을 추가하고 파일에 아래의 규칙을 추가해주세요.
<application>
태그에 android:fullBackupContent
이 있으면 tools:replace
에 값을 추가하고 파일에 아래의 규칙을 추가해주세요.
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
...>
<application
android:allowBackup="..."
android:dataExtractionRules="..."
android:fullBackupContent="..."
tools:replace="android:allowBackup,android:dataExtractionRules,android:fullBackupContent"
...>
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
<cloud-backup>
<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" />
</cloud-backup>
<device-transfer>
<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" />
</device-transfer>
</data-extraction-rules>
<?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>
ATT 프롬프트를 애플 가이드에 따라 원하는 시점에 표시해주세요.
SDK는 사용자가 ATT 프롬프트에서 동의여부를 결정할때까지 설치이벤트 수집 및 디퍼드 딥링크 전달을 지연시킵니다. 이에 대한 타임아웃을 설정해주세요. (기본적으로 30초이고 최대 1시간까지 설정할 수 있습니다. ATT 프롬프트를 사용하지 않는다면 0초로 설정해주세요.)
플러터 프로젝트 폴더 최상단에 airbridge.json
파일을 생성하고 설정해주세요.
{
"autoDetermineTrackingAuthorizationTimeoutInSecond": 30
}
딥링크를 설정합니다. 아래 3가지 설정을 모두 완료하세요.
앱에 에어브릿지 딥링크 3개를 설정해주세요. 에어브릿지는 트래킹 링크가 작동할 때 브라우저, 설치 여부 등에 따라 이 중 가장 적합한 딥링크로 앱을 실행합니다.
YOUR_SCHEME
은 에어브릿지 대시보드의 [트래킹링크]>[딥링크]에서 확인한 값을 ://
없이 사용합니다. YOUR_APP_NAME
과 YOUR_APP_SDK_TOKEN
은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.
ios/YOUR_PROJECT_NAME.xcodeproj
파일
스킴 딥링크 앱 설정
Xcode에서 [YOUR_PROJECT]>[Info]>[URL Types]로 이동하고 '+'를 클릭합니다. 그리고 YOUR_SCHEME
을 입력합니다.
유니버셜 링크 앱 설정
Xcode에서 [YOUR_PROJECT]>[Signing & Capabilities]로 이동하고 '+ Capability'를 클릭합니다. 그리고 Associated Domains를 선택하고 applinks:YOUR_APP_NAME.airbridge.io
와 applinks:YOUR_APP_NAME.abr.ge
를 추가합니다.
android/app/src/main/AndroidManifest.xml
파일
<application ...>
...
<activity android:name=".DeeplinkActivity" ...>
...
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- YOUR_SCHEME: Input your Android URI Scheme -->
<data android:scheme="YOUR_SCHEME" />
</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" />
<!-- YOUR_APP_NAME: Input your App Name -->
<data android:scheme="http" android:host="YOUR_APP_NAME.abr.ge" />
<data android:scheme="https" android:host="YOUR_APP_NAME.abr.ge" />
</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" />
<!-- YOUR_APP_NAME: Input your App Name -->
<data android:scheme="http" android:host="YOUR_APP_NAME.airbridge.io" />
<data android:scheme="https" android:host="YOUR_APP_NAME.airbridge.io" />
</intent-filter>
...
</activity>
...
</application>
앱이 딥링크로 열릴 때, trackDeeplink
함수를 호출해 SDK가 딥링크 이벤트를 수집할 수 있게 해주세요.
ios/YOUR_PROJECT_NAME/AppDelegate.m
파일
import airbridge_flutter_sdk
...
// when app is opened with scheme deeplink
override func application(
_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]
) -> Bool {
// track deeplink
AirbridgeFlutter.trackDeeplink(url: url)
return true
}
...
// when app is opened with universal links
override func application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
) -> Bool {
// track deeplink
AirbridgeFlutter.trackDeeplink(userActivity: userActivity)
return true
}
#import <AirbridgeFlutter/AirbridgeFlutter.h>
...
// when app is opened with scheme deeplink
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
// track deeplink
[AirbridgeFlutter trackDeeplinkWithUrl:url];
return YES;
}
...
// when app is opened with universal links
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
// track deeplink
[AirbridgeFlutter trackDeeplinkWithUserActivity:userActivity];
return YES;
}
android/app/src/main/java/.../MainActivity.kt
파일
import co.ab180.airbridge.flutter.AirbridgeFlutter
...
override fun onResume() {
super.onResume()
AirbridgeFlutter.trackDeeplink(intent)
}
...
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
setIntent(intent)
}
import co.ab180.airbridge.flutter.AirbridgeFlutter;
...
@Override
protected void onResume() {
super.onResume();
AirbridgeFlutter.trackDeeplink(getIntent());
}
...
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
setOnDeeplinkReceived
함수를 호출해 에어브릿지 딥링크를 원래 트래킹링크에 설정된 딥링크로 변환해 전달받아주세요. 그리고 유저를 적절한 화면으로 이동시켜주세요.
import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
...
Airbridge.setOnDeeplinkReceived((url) {
// show proper content using url
});
디퍼드 딥링크는 자동으로 OnDeeplinkReceived
에 전달되기 때문에 별도의 설정이 필요하지 않습니다.
trackEvent
함수를 호출해 이벤트를 전송해주세요. 되도록 에어브릿지가 제공하는 스탠다드 카테고리와 시맨틱 어트리뷰트를 사용하시는 것을 권장합니다. 또는 커스텀 카테고리와 커스텀 어트리뷰트를 직접 정의해 사용할 수 있습니다. 자세한 내용은 플러터 SDK 가이드를 참고해주세요.
// StandardCategory
// or "CustomEvent" (CustomCategory)
Airbridge.trackEvent(
category: AirbridgeCategory.ORDER_COMPLETED,
semanticAttributes: {
// SemanticAttributes
AirbridgeAttribute.VALUE: 11,
AirbridgeAttribute.TRANSACTION_ID: '8065ef16-162b-4a82-b683-e51aefdda7d5',
AirbridgeAttribute.CURRENCY: 'USD',
AirbridgeAttribute.IN_APP_PURCHASED: true
},
customAttributes: {
// CustomAttributes
'key': 'value',
}
)
전체 내용은 코도바-아이오닉 SDK 문서를 참고해주세요.
에어브릿지 코도바-아이오닉 SDK를 설치합니다.
cordova plugin add airbridge-cordova-sdk
ionic cordova plugin add airbridge-cordova-sdk
앱이 열릴 때, SDK를 초기화해주세요.
YOUR_APP_NAME
과 YOUR_APP_SDK_TOKEN
은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.
ios/YOUR_PROJECT_NAME/AppDelegate.m
파일
import AirbridgeCordova
...
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
AirbridgeCordova.initializeSDK(name: "YOUR_APP_NAME", token:"YOUR_APP_SDK_TOKEN")
...
}
#import <AirbridgeCordova/AirbridgeCordova.h>
...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[AirbridgeCordova initializeSDKWithName:@"YOUR_APP_NAME" token:@"YOUR_APP_SDK_TOKEN"];
...
}
android/app/src/main/java/.../MainApplication.kt
파일
import co.ab180.airbridge.cordova.AirbridgeCordova
...
override fun onCreate() {
super.onCreate()
AirbridgeCordova.initializeSDK(this, "YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
...
}
import co.ab180.airbridge.cordova.AirbridgeCordova;
...
@Override
public void onCreate() {
super.onCreate();
AirbridgeCordova.initializeSDK(this, "YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN");
...
}
에어브릿지 코도바-아이오닉 SDK를 사용하기 위한 설정값을 입력합니다.
{
"sdkEnabled": boolean,
"logLevel": "debug" | "info" | "warning" | "error" | "fault",
"autoStartTrackingEnabled": boolean,
"autoDetermineTrackingAuthorizationTimeoutInSecond": number,
"trackMetaDeferredAppLinkEnabled": boolean,
"sessionTimeoutInSecond": number,
"metaInstallReferrerAppID": string,
"trackAirbridgeDeeplinkOnlyEnabled": boolean,
"trackInSessionLifecycleEventEnabled": boolean,
"hashUserInformationEnabled": boolean,
"sdkSignatureID": string,
"sdkSignatureSecret": string,
"clearEventBufferOnInitializeEnabled": boolean,
"eventBufferCountLimit": number,
"eventBufferSizeLimitInGibibyte": number,
"eventTransmitIntervalInSecond": number,
"isHandleAirbridgeDeeplinkOnly": boolean,
"collectTCFDataEnabled": boolean
}
1. 리액트 네이티브 프로젝트 폴더 최상단에 airbridge.json
파일을 생성하고 위와 같이 JSON을 입력합니다.
2. 설정이 필요하지 않은 값은 키값을 생략합니다.
ATT 프롬프트를 애플 가이드에 따라 원하는 시점에 표시해주세요.
SDK는 사용자가 ATT 프롬프트에서 동의여부를 결정할때까지 설치이벤트 수집 및 디퍼드 딥링크 전달을 지연시킵니다. 이에 대한 타임아웃을 설정해주세요. (기본적으로 30초이고 최대 1시간까지 설정할 수 있습니다. ATT 프롬프트를 사용하지 않는다면 0초로 설정해주세요.)
코도바-아이오닉 프로젝트 폴더 최상단에 airbridge.json
파일을 생성하고 설정해주세요.
{
"autoDetermineTrackingAuthorizationTimeoutInSecond": 30
}
딥링크를 설정합니다. 아래 3가지 설정을 모두 완료하세요.
앱에 에어브릿지 딥링크 3개를 설정해주세요. 에어브릿지는 트래킹 링크가 작동할 때 브라우저, 설치 여부 등에 따라 이 중 가장 적합한 딥링크로 앱을 실행합니다.
YOUR_SCHEME
은 에어브릿지 대시보드의 [트래킹링크]>[딥링크]에서 확인한 값을 ://
없이 사용합니다. YOUR_APP_NAME
과 YOUR_APP_SDK_TOKEN
은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.
ios/YOUR_PROJECT_NAME.xcodeproj
파일
스킴 딥링크 앱 설정
Xcode에서 [YOUR_PROJECT]>[Info]>[URL Types]로 이동하고 '+'를 클릭합니다. 그리고 YOUR_SCHEME
을 입력합니다.
유니버셜 링크 앱 설정
Xcode에서 [YOUR_PROJECT]>[Signing & Capabilities]로 이동하고 '+ Capability'를 클릭합니다. 그리고 Associated Domains를 선택하고 applinks:YOUR_APP_NAME.airbridge.io
와 applinks:YOUR_APP_NAME.abr.ge
를 추가합니다.
android/app/src/main/AndroidManifest.xml
파일
<application ...>
...
<activity android:name=".DeeplinkActivity" ...>
...
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- YOUR_SCHEME: Input your Android URI Scheme -->
<data android:scheme="YOUR_SCHEME" />
</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" />
<!-- YOUR_APP_NAME: Input your App Name -->
<data android:scheme="http" android:host="YOUR_APP_NAME.abr.ge" />
<data android:scheme="https" android:host="YOUR_APP_NAME.abr.ge" />
</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" />
<!-- YOUR_APP_NAME: Input your App Name -->
<data android:scheme="http" android:host="YOUR_APP_NAME.airbridge.io" />
<data android:scheme="https" android:host="YOUR_APP_NAME.airbridge.io" />
</intent-filter>
...
</activity>
...
</application>
앱이 딥링크로 열릴 때, trackDeeplink
함수를 호출해 SDK가 딥링크 이벤트를 수집할 수 있게 해주세요.
ios/YOUR_PROJECT_NAME/AppDelegate.m
파일
import AirbridgeCordova
...
// when app is opened with scheme deeplink
func application(
_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]
) -> Bool {
// track deeplink
AirbridgeCordova.trackDeeplink(url: url)
return true
}
...
// when app is opened with universal links
func application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
) -> Bool {
// track deeplink
AirbridgeCordova.trackDeeplink(userActivity: userActivity)
return true
}
#import <AirbridgeCordova/AirbridgeCordova.h>
...
// when app is opened with scheme deeplink
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
// track deeplink
[AirbridgeCordova trackDeeplinkWithUrl:url];
return YES;
}
...
// when app is opened with universal links
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
// track deeplink
[AirbridgeCordova trackDeeplinkWithUserActivity:userActivity];
return YES;
}
android/app/src/main/java/.../MainActivity.kt
파일
import co.ab180.airbridge.cordova.AirbridgeCordova
...
override fun onResume() {
super.onResume()
AirbridgeCordova.trackDeeplink(intent)
}
...
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
setIntent(intent)
}
import co.ab180.airbridge.cordova.AirbridgeCordova;
...
@Override
protected void onResume() {
super.onResume();
AirbridgeCordova.trackDeeplink(getIntent());
}
...
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
setOnDeeplinkReceived
함수를 호출해 에어브릿지 딥링크를 원래 트래킹링크에 설정된 딥링크로 변환해 전달받아주세요. 그리고 유저를 적절한 화면으로 이동시켜주세요.
import { Airbridge } from 'airbridge-cordova-sdk'
...
Airbridge.setOnDeeplinkReceived(function (url) {
// show proper content using url
});
디퍼드 딥링크는 자동으로 OnDeeplinkReceived
에 전달되기 때문에 별도의 설정이 필요하지 않습니다.
trackEvent
함수를 호출해 이벤트를 전송해주세요. 되도록 에어브릿지가 제공하는 스탠다드 카테고리와 시맨틱 어트리뷰트를 사용하시는 것을 권장합니다. 또는 커스텀 카테고리와 커스텀 어트리뷰트를 직접 정의해 사용할 수 있습니다. 자세한 내용은 코도바-아이오닉 SDK 가이드를 참고해주세요.
// StandardCategory
// or "CustomEvent" (CustomCategory)
Airbridge.trackEvent(AirbridgeCategory.ORDER_COMPLETED, {
// SemanticAttributes
[AirbridgeAttribute.VALUE]: 11,
[AirbridgeAttribute.TRANSACTION_ID]: '8065ef16-162b-4a82-b683-e51aefdda7d5',
[AirbridgeAttribute.CURRENCY]: 'USD',
[AirbridgeAttribute.IN_APP_PURCHASED]: true,
}, {
// CustomAttributes
'key': 'value',
})
전체 내용은 엑스포 SDK 문서를 참고해주세요.
에어브릿지 엑스포 SDK를 설치합니다.
npm install --save airbridge-expo-sdk
npm install --save airbridge-react-native-sdk
앱에서 사용하는 생명주기에 따라 앱이 열릴 때, SDK를 초기화하세요.
YOUR_APP_NAME
과 YOUR_APP_SDK_TOKEN
은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.
{
"expo": {
...
"plugins": [
...
[
"airbridge-expo-sdk",
{
"appName": "APP_NAME",
"appToken": "APP_TOKEN"
}
]
]
}
}
에어브릿지 엑스포 SDK를 사용하기 위한 설정값을 입력합니다.
{
"sdkEnabled": boolean,
"logLevel": "debug" | "info" | "warning" | "error" | "fault",
"autoStartTrackingEnabled": boolean,
"autoDetermineTrackingAuthorizationTimeoutInSecond": number,
"trackMetaDeferredAppLinkEnabled": boolean,
"sessionTimeoutInSecond": number,
"metaInstallReferrerAppID": string,
"trackAirbridgeDeeplinkOnlyEnabled": boolean,
"trackInSessionLifecycleEventEnabled": boolean,
"hashUserInformationEnabled": boolean,
"sdkSignatureID": string,
"sdkSignatureSecret": string,
"clearEventBufferOnInitializeEnabled": boolean,
"eventBufferCountLimit": number,
"eventBufferSizeLimitInGibibyte": number,
"eventTransmitIntervalInSecond": number,
"isHandleAirbridgeDeeplinkOnly": boolean,
"collectTCFDataEnabled": boolean
}
1. 엑스포 프로젝트 폴더 최상단에 airbridge.json
파일을 생성하고 위와 같이 JSON을 입력합니다.
2. 설정이 필요하지 않은 값은 키값을 생략합니다.
AndroidManifest.xml
파일의 각 태그의 내용에 따라 선택적으로 백업룰을 설정해주세요.
<manifest>
태그의 xmlns:tools
에 내용을 추가해주세요.
<application>
태그에 android:allowBackup
이 있으면 tools:replace
에 값을 추가해주세요.
<application>
태그에 android:dataExtractionRules
이 있으면 tools:replace
에 값을 추가하고 파일에 아래의 규칙을 추가해주세요.
<application>
태그에 android:fullBackupContent
이 있으면 tools:replace
에 값을 추가하고 파일에 아래의 규칙을 추가해주세요.
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
...>
<application
android:allowBackup="..."
android:dataExtractionRules="..."
android:fullBackupContent="..."
tools:replace="android:allowBackup,android:dataExtractionRules,android:fullBackupContent"
...>
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
<cloud-backup>
<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" />
</cloud-backup>
<device-transfer>
<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" />
</device-transfer>
</data-extraction-rules>
<?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>
ATT 프롬프트를 애플 가이드에 따라 원하는 시점에 표시해주세요.
SDK는 사용자가 ATT 프롬프트에서 동의여부를 결정할때까지 설치이벤트 수집 및 디퍼드 딥링크 전달을 지연시킵니다. 이에 대한 타임아웃을 설정해주세요. (기본적으로 30초이고 최대 1시간까지 설정할 수 있습니다. ATT 프롬프트를 사용하지 않는다면 0초로 설정해주세요.)
엑스포 프로젝트 폴더 최상단에 airbridge.json
파일을 생성하고 설정해주세요.
{
"autoDetermineTrackingAuthorizationTimeoutInSecond": 30
}
딥링크를 설정합니다. 아래 3가지 설정을 모두 완료하세요.
앱에 에어브릿지 딥링크 3개를 설정해주세요. 에어브릿지는 트래킹 링크가 작동할 때 브라우저, 설치 여부 등에 따라 이 중 가장 적합한 딥링크로 앱을 실행합니다.
YOUR_SCHEME
은 에어브릿지 대시보드의 [트래킹링크]>[딥링크]에서 확인한 값을 ://
없이 사용합니다. YOUR_APP_NAME
과 YOUR_APP_SDK_TOKEN
은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.
{
"expo": {
...
"scheme": "YOUR_SCHEME",
"android": {
...
"intentFilters": [{
"autoVerify": true,
"action": "VIEW",
"data": { "scheme": "https", "host": "APP_NAME.airbridge.io" },
"category": ["BROWSABLE", "DEFAULT"]
}, {
"autoVerify": true,
"action": "VIEW",
"data": { "scheme": "https", "host": "APP_NAME.abr.ge" },
"category": ["BROWSABLE", "DEFAULT"]
}, {
"autoVerify": true,
"action": "VIEW",
"data": { "scheme": "http", "host": "APP_NAME.airbridge.io" },
"category": ["BROWSABLE", "DEFAULT"]
}, {
"autoVerify": true,
"action": "VIEW",
"data": { "scheme": "http", "host": "APP_NAME.abr.ge" },
"category": ["BROWSABLE", "DEFAULT"]
}]
},
"ios": {
...
"associatedDomains": [
"applinks:APP_NAME.airbridge.io",
"applinks:APP_NAME.abr.ge"
]
}
}
}
setOnDeeplinkReceived
함수를 호출해 에어브릿지 딥링크를 원래 트래킹링크에 설정된 딥링크로 변환해 전달받아주세요. 그리고 유저를 적절한 화면으로 이동시켜주세요.
import { Airbridge } from 'airbridge-react-native-sdk'
...
Airbridge.setOnDeeplinkReceived((url) => {
// show proper content using url
})
디퍼드 딥링크는 자동으로 OnDeeplinkReceived
에 전달되기 때문에 별도의 설정이 필요하지 않습니다.
trackEvent
함수를 호출해 이벤트를 전송해주세요. 되도록 에어브릿지가 제공하는 스탠다드 카테고리와 시맨틱 어트리뷰트를 사용하시는 것을 권장합니다. 또는 커스텀 카테고리와 커스텀 어트리뷰트를 직접 정의해 사용할 수 있습니다. 자세한 내용은 엑스포 SDK 가이드를 참고해주세요.
import { Airbridge, AirbridgeCategory, AirbridgeAttribute } from 'airbridge-react-native-sdk'
// StandardCategory
// or "CustomEvent" (CustomCategory)
Airbridge.trackEvent(AirbridgeCategory.ORDER_COMPLETED, {
// SemanticAttributes
[AirbridgeAttribute.VALUE]: 11,
[AirbridgeAttribute.TRANSACTION_ID]: '8065ef16-162b-4a82-b683-e51aefdda7d5',
[AirbridgeAttribute.CURRENCY]: 'USD',
[AirbridgeAttribute.IN_APP_PURCHASED]: true,
}, {
// CustomAttributes
'key': 'value',
})
전체 내용은 유니티 SDK 문서를 참고해주세요.
에어브릿지 유니티 SDK를 설치합니다.
1. 최신 버전의 에어브릿지 유니티 SDK를 다운로드 받아주세요.
2. 유니티 상단의 Assets > Import Package > Custom Package ...
를 클릭하여 패키지를 추가해 주세요.
3. 설치가 완료되면 유니티 상단에 Airbridge
탭이 표시됩니다.
SDK 설정하기의 App Name
, App Token
에 올바른 값을 입력해 주세요.
App Name
, App Token
은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.
에어브릿지 유니티 SDK를 사용하기 위한 설정값을 입력합니다.
1. 유니티 상단의 Airbridge > Airbridge Settings
를 클릭하면 표시되는 위와 같은 화면에 입력합니다.
2. 설정이 필요하지 않은 값은 입력하지 않습니다.
커스텀 메인 매니페스트 (Assets/Plugins/Android/AndroidManifest.xml
) 파일의 각 태그의 내용에 따라 선택적으로 백업룰을 설정해주세요.
<manifest>
태그에 tools
네임스페이스를 추가해주세요.
<application>
태그에 android:allowBackup
이 있으면 tools:replace
에 값을 추가해주세요.
<application>
태그에 android:dataExtractionRules
이 있으면 tools:replace
에 값을 추가하고 파일에 아래의 규칙을 추가해주세요.
<application>
태그에 android:fullBackupContent
이 있으면 tools:replace
에 값을 추가하고 파일에 아래의 규칙을 추가해주세요.
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
...>
<application
android:allowBackup="..."
android:dataExtractionRules="..."
android:fullBackupContent="..."
tools:replace="android:allowBackup,android:dataExtractionRules,android:fullBackupContent"
...>
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
<cloud-backup>
<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" />
</cloud-backup>
<device-transfer>
<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" />
</device-transfer>
</data-extraction-rules>
<?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>
ATT 프롬프트를 애플 가이드에 따라 원하는 시점에 표시해주세요.
SDK는 사용자가 ATT 프롬프트에서 동의여부를 결정할때까지 설치이벤트 수집 및 디퍼드 딥링크 전달을 지연시킵니다. 이에 대한 타임아웃을 설정해주세요. (기본적으로 30초이고 최대 1시간까지 설정할 수 있습니다. ATT 프롬프트를 사용하지 않는다면 0초로 설정해주세요.)
SDK 설정하기의 iOS Tracking Authorize Timeout Seconds
에 설정해주세요.
딥링크를 설정합니다. 아래 3가지 설정을 모두 완료하세요.
앱에 에어브릿지 딥링크 3개를 설정해주세요. 에어브릿지는 트래킹 링크가 작동할 때 브라우저, 설치 여부 등에 따라 이 중 가장 적합한 딥링크로 앱을 실행합니다.
YOUR_SCHEME
은 에어브릿지 대시보드의 [트래킹링크]>[딥링크]에서 확인한 값을 ://
없이 사용합니다.
SDK 설정하기의 iOS URI Scheme
와 Android URI Scheme
에 YOUR_SCHEME
을 입력합니다.
앱이 딥링크로 열릴 때, trackDeeplink
함수를 호출해 SDK가 딥링크 이벤트를 수집할 수 있게 해주세요.
SetOnDeeplinkReceived
함수를 호출해 에어브릿지 딥링크를 원래 트래킹링크에 설정된 딥링크로 변환해 전달받아주세요. 그리고 유저를 적절한 화면으로 이동시켜주세요.
Airbridge.SetOnDeeplinkReceived((string deeplink) =>
{
// show proper content using url
});
디퍼드 딥링크는 자동으로 OnDeeplinkReceived
에 전달되기 때문에 별도의 설정이 필요하지 않습니다.
TrackEvent
함수를 호출해 이벤트를 전송해주세요. 되도록 에어브릿지가 제공하는 스탠다드 카테고리와 시맨틱 어트리뷰트를 사용하시는 것을 권장합니다. 또는 커스텀 카테고리와 커스텀 어트리뷰트를 직접 정의해 사용할 수 있습니다. 자세한 내용은 유니티 SDK 가이드를 참고해주세요.
Airbridge.TrackEvent(
// StandardCategory
// or "CustomEvent" (CustomCategory)
category: AirbridgeCategory.ORDER_COMPLETED,
// SemanticAttributes
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.VALUE, 11 },
{ AirbridgeAttribute.TRANSACTION_ID, "8065ef16-162b-4a82-b683-e51aefdda7d5" },
{ AirbridgeAttribute.CURRENCY, "USD" },
{ AirbridgeAttribute.IN_APP_PURCHASED, true }
},
// CustomAttributes
customAttributes: new Dictionary<string, object>()
{
{ "key", "value" }
}
);
전체 내용은 언리얼 SDK 문서를 참고해주세요.
에어브릿지 유니티 SDK를 설치합니다.
1. 최신 버전의 Airbridge 언리얼 SDK를 다운로드 받아주세요.
2. 언리얼 엔진 프로젝트의 루트 디렉터리에 Plugins
폴더를 생성해주세요.
3. 에어브릿지 언리얼 SDK 를 아래 구조와 같이 Plugins 폴더 내부로 이동시켜주세요.
SDK 설정하기의 App Name
, App Token
에 올바른 값을 입력해 주세요.
App Name
, App Token
은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.
에어브릿지 유니티 SDK를 사용하기 위한 설정값을 입력합니다.
1. 언리얼 엔진의 Project Settings
창을 열고 Plugins 항목 아래에서 Airbridge Unreal SDK
를 클릭하면 표시되는 위와 같은 화면에 입력합니다.
2. 설정이 필요하지 않은 값은 입력하지 않습니다.
3. 필요한 값을 입력한 뒤, Set as Default
버튼을 누릅니다.
커스텀 메인 매니페스트 (Assets/Plugins/Android/AndroidManifest.xml
) 파일의 각 태그의 내용에 따라 선택적으로 백업룰을 설정해주세요.
<manifest>
태그에 tools
네임스페이스를 추가해주세요.
<application>
태그에 android:allowBackup
이 있으면 tools:replace
에 값을 추가해주세요.
<application>
태그에 android:dataExtractionRules
이 있으면 tools:replace
에 값을 추가하고 파일에 아래의 규칙을 추가해주세요.
<application>
태그에 android:fullBackupContent
이 있으면 tools:replace
에 값을 추가하고 파일에 아래의 규칙을 추가해주세요.
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
...>
<application
android:allowBackup="..."
android:dataExtractionRules="..."
android:fullBackupContent="..."
tools:replace="android:allowBackup,android:dataExtractionRules,android:fullBackupContent"
...>
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
<cloud-backup>
<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" />
</cloud-backup>
<device-transfer>
<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" />
</device-transfer>
</data-extraction-rules>
<?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>
ATT 프롬프트를 애플 가이드에 따라 원하는 시점에 표시해주세요.
SDK는 사용자가 ATT 프롬프트에서 동의여부를 결정할때까지 설치이벤트 수집 및 디퍼드 딥링크 전달을 지연시킵니다. 이에 대한 타임아웃을 설정해주세요. (기본적으로 30초이고 최대 1시간까지 설정할 수 있습니다. ATT 프롬프트를 사용하지 않는다면 0초로 설정해주세요.)
SDK 설정하기의 iOS Tracking Authorize Timeout Seconds
에 설정해주세요.
딥링크를 설정합니다. 아래 3가지 설정을 모두 완료하세요.
앱에 에어브릿지 딥링크 3개를 설정해주세요. 에어브릿지는 트래킹 링크가 작동할 때 브라우저, 설치 여부 등에 따라 이 중 가장 적합한 딥링크로 앱을 실행합니다.
YOUR_SCHEME
은 에어브릿지 대시보드의 [트래킹링크]>[딥링크]에서 확인한 값을 ://
없이 사용합니다.
SDK 설정하기의 iOS URI Scheme
와 Android URI Scheme
에 YOUR_SCHEME
을 입력합니다.
앱이 딥링크로 열릴 때, trackDeeplink
함수를 호출해 SDK가 딥링크 이벤트를 수집할 수 있게 해주세요.
SetOnDeeplinkReceived
함수를 호출해 에어브릿지 딥링크를 원래 트래킹링크에 설정된 딥링크로 변환해 전달받아주세요. 그리고 유저를 적절한 화면으로 이동시켜주세요.
FAirbridge::SetOnDeeplinkReceived([](const FString& Url)
{
// show proper content using url
});
디퍼드 딥링크는 자동으로 OnDeeplinkReceived
에 전달되기 때문에 별도의 설정이 필요하지 않습니다.
TrackEvent
함수를 호출해 이벤트를 전송해주세요. 되도록 에어브릿지가 제공하는 스탠다드 카테고리와 시맨틱 어트리뷰트를 사용하시는 것을 권장합니다. 또는 커스텀 카테고리와 커스텀 어트리뷰트를 직접 정의해 사용할 수 있습니다. 자세한 내용은 언리얼 SDK 가이드를 참고해주세요.
FAirbridge::TrackEvent(
// StandardCategory
// or "CustomEvent" (CustomCategory)
AirbridgeCategory::ORDER_COMPLETED,
// SemanticAttributes
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::VALUE, 11)
->Set(AirbridgeAttribute::TRANSACTION_ID, "8065ef16-162b-4a82-b683-e51aefdda7d5")
->Set(AirbridgeAttribute::CURRENCY, "USD")
->Set(AirbridgeAttribute::IN_APP_PURCHASED, true)
// CustomAttributes
UAirbridgeMap::CreateObject()
->Set("key", "value")
);
아래 테스트를 완료하세요.
에어브릿지 대시보드 [설정]>[테스트 콘솔]>[앱 설치 이벤트]로 이동합니다.
테스트 디바이스의 ADID(GAID 또는 IDFA)를 입력합니다.
테스트 디바이스에서 앱을 삭제하고 QR 코드를 스캔합니다.
테스트 결과를 확인합니다.
테스트를 통과하지 않는다면 [SDK 설정하기]>[SDK 초기화하기]를 제대로 진행했는지 확인합니다.
에어브릿지 대시보드 [설정]>[테스트 콘솔]>[딥링킹]으로 이동합니다.
테스트할 앱의 딥링크를 입력합니다. (예: scheme://product/12345
)
각 [설정 확인]을 클릭하여 대시보드 안내에 따라 테스트 디바이스로 QR 코드를 스캔합니다.
테스트 결과를 확인합니다.
테스트를 통과하지 않는다면 [대시보드 설정하기]와 [SDK 설정하기]>[딥링크 설정하기]를 제대로 진행했는지 확인합니다.
도움이 되었나요?