Flutter SDK

Flutter SDK

설치link

설치 - Flutterlink

pubspec.yamllink

pubspec.yaml 파일에 아래 내용을 추가해주세요.

dependencies:
airbridge_flutter_sdk: 1.0.1

flutter pub getlink

다음 명령어를 실행해주세요.

flutter pub get

importlink

.dart 파일에서 import 해주세요.

import 'package:airbridge_flutter_sdk/airbridge.dart';

설치 - Androidlink

  • 아래 모듈들이 자동으로 설치됩니다.
    • io.airbridge:sdk-android
    • com.android.installreferrer:installreferrer
    • com.google.code.findbugs:jsr305
  • 아래 권한들이 자동으로 추가됩니다.
    • android.permission.INTERNET
    • android.permission.ACCESS_NETWORK_STATE

Proguardlink

Proguard를 사용중이시라면, 다음 내용을 참고해 주세요.
android/app/proguard-rules.pro 파일에 다음 내용을 추가해 주세요.

-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient {public *;}
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info { public *;}
-keep class com.android.installreferrer.api.InstallReferrerClient {public *;}
-keep class com.android.installreferrer.api.InstallReferrerClient$newBuilder { public *;}
-keep class com.android.installreferrer.api.InstallReferrerClient$Builder { public *;}
-keep class com.android.installreferrer.api.ReferrerDetails {public *;}
-keep class com.android.installreferrer.api.InstallReferrerStateListener {public *;}
-keep class io.airbridge.deviceinfo.** { *; }
-keepclassmembers class io.airbridge.** { public *; }
-keep public class io.airbridge.**

MainApplicationlink

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

override fun onCreate() {
super.onCreate()
AirbridgeFL.init(this, "YOUR_APP_NAME(앱 이름)", "YOUR_APP_TOKEN(앱 토큰)")
...
}

'앱 이름' 은 대시보드의 'App Setting > 앱 기본정보' 에서 확인할 수 있습니다.
'앱 토큰' 은 대시보드의 'App Setting > 토큰 관리' 에서 확인할 수 있습니다.

설치 - iOSlink

AppDelegatelink

ios/[프로젝트 이름]/AppDelegate 파일의 import 부분에 아래와 같은 코드를 추가해주세요.

import airbridge_flutter_sdk

ios/[프로젝트 이름]/AppDelegate 파일의 application:didFinishLaunchingWithOptions: 함수의 1번째 줄에 아래와 같은 코드를 추가해주세요.

override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
AirbridgeFL.getInstance("YOUR_APP_TOKEN(앱 토큰)", appName: "YOUR_APP_NAME(앱 이름)", withLaunchOptions: launchOptions)
...
}

'앱 이름' 은 대시보드의 'App Setting > 앱 기본정보' 에서 확인할 수 있습니다.
'앱 토큰' 은 대시보드의 'App Setting > 토큰 관리' 에서 확인할 수 있습니다.

설치 - 딥링크 등록link

딥링크 기능을 사용하기 위해 앱의 정보들을 에어브릿지 대시보드에 등록합니다.
대시보드에 접속하시고 사이드바의 Deeplinks 메뉴를 클릭하면 아래와 같은 화면이 나옵니다.

deeplinks

설치 - 딥링크 등록 - Androidlink

Schemelink

  1. 사용하기 원하는 scheme 를 딥링크 등록 부분 사진의 Android URL scheme 영역에 "://" 을 붙여 입력해주세요.

예) scheme://

  1. Google Play Store 에 등록할 때 사용한 signing key 를 준비해주세요.

  2. 다음 명령을 실행해주세요.

keytool -list -v -keystore my-release-key.keystore
  1. Certificate fingerprints 의 SHA256 란을 복사해, 딥링크 등록 부분 사진의 Android sha256_cert_fingerprints 영역에 입력해주세요.

예) 14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5

설치 - 딥링크 등록 - iOSlink

Schemelink

  1. 사용하기 원하는 scheme 를 딥링크 등록 부분 사진의 iOS URI scheme 영역에 "://" 을 붙여 입력해주세요.

예) scheme://

  1. 아래 링크에 접속합니다.

  2. 프로젝트의 앱 이름을 누릅니다.

  3. 아래 사진의 Prefix 와 ID 영역의 문자열을 복사하여 Prefix + "." + ID 인 문자열을 딥링크 등록 부분 사진의 iOS App ID 영역에 입력합니다.

예) 9JA89QQLNQ.com.apple.wwdc

ios app id

설치 - 딥링크 설정link

딥링크를 사용하기 위해 앱을 설정합니다.

설치 - 딥링크 설정 - Dartlink

setDeeplinkListenerlink

딥링크 또는 지연된 딥링크 가 발생할 때 마다 호출되는 함수를 등록합니다.

Airbridge.deeplink.setDeeplinkListener((deeplink) {
// `딥링크` 또는 `지연된 딥링크` 가 발생했을 때, 작동할 코드
// deeplink = https://appname.airbridge.io/...
print('$deeplink');
});

setDeferredDeeplinkListener (옵션)link

지연된 딥링크 가 발생할 때 마다 호출되는 함수를 등록합니다.

Airbridge.deeplink.setDeferredDeeplinkListener((deeplink) {
// `지연된 딥링크` 가 발생했을 때, 작동할 코드
// deeplink = https://appname.airbridge.io/...
print('$deeplink');
});

설치 - 딥링크 설정 - Androidlink

AndroidManifest.xmllink

android/app/src/main/AndroidManifest.xml 파일의 MainActivity 영역에 아래와 같은 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.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="EXAMPLE_SCHEME" />
</intent-filter>

YOUR_APP_NAME 에 앱 이름을 입력해주세요.
EXAMPLE_SCHEME 부분에 대시보드에서 설정한 scheme 값을 입력해주세요.

MainActivitylink

android/app/src/main/java/.../MainActivity 파일에 다음 코드를 삽입해주세요.

override fun onResume() {
super.onResume()
AirbridgeFL.getDeeplink().fetch(getIntent())
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
setIntent(intent)
}

설치 - 딥링크 설정 - iOSlink

Xcodelink

Schemelink

  1. Xcode > Project 파일 > Info > URL Types 로 이동해주세요.
  2. identifier 와 URL Schemes 에 대시보드에서 설정한 scheme 값 을 넣어주세요.

ios url scheme

:// 값을 없애고 넣어주세요.

  1. Xcode > Project 파일 > Signing & Capabilities > Associated Domains 로 이동해주세요.
  2. + 버튼을 눌러 applinks:YOUR_APP_NAME.airbridge.io 를 추가해주세요.
  3. + 버튼을 눌러 applinks:YOUR_APP_NAME.deeplink.page 를 추가해주세요.

YOUR_APP_NAME 은 대시보드의 'App Setting > 앱 기본정보' 에서 확인할 수 있습니다.

AppDelegate.mlink

Schemelink

  1. ios/[프로젝트 이름]/AppDelegate.m 파일을 열어주세요.
  2. 아래 코드를 추가해주세요.
func application(_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool
{
NSLog(@"openURL : %@", url)
AirbridgeFL.deeplink().handleURLSchemeDeeplink(url, withSourceBundle: options[.sourceApplication] as? String)
return true
}
  1. iOS 8.x 또는 그 이전 버전을 target 한다면 아래와 같은 코드를 추가로 적어주세요.
func application(_ application: UIApplication,
open url: URL,
sourceApplication: String?,
annotation: Any) -> Bool
{
NSLog(@"openURL : %@", url)
AirbridgeFL.deeplink().handleURLSchemeDeeplink(url, withSourceBundle: sourceApplication);
return true;
}
  1. ios/[프로젝트 이름]/AppDelegate.m 파일을 열어주세요.
  2. 아래 코드를 추가해주세요.
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool
{
NSLog(@"continueUserActivity : %@", url)
if let webpageURL = userActivity.webpageURL {
AirbridgeFL.deeplink().handleUniversalLink(webpageURL)
}
return true
}

설치 확인link

  1. 테스트 디바이스에서 앱을 삭제해주세요.
  2. 앱을 빌드하여 해당 테스트 디바이스에서 앱을 설치 및 실행을 해주세요.
  3. 에어브릿지 대시보드 → 앱 선택 → 'Log Data' 아래의 'Realtime Log' 항목을 클릭해 주세요.
  4. 'Mobile SDK 로그' 를 클릭하시고 'Device UUID 입력' 에 Android GAID 또는 iOS IDFA 를 입력해 주세요.
  • 디바이스 UUID (Android GAID 또는 iOS IDFA) 노출이 확인되지 않는다면 설치 에 안내된 대로 설치되었는지 다시 확인해 주세요.
  • 로그 노출은 최대 5분 가량 지연될 수 있습니다.
  • Android GAID 확인: Android 디바이스에서 '설정' → Google 설정 → 광고 → '내 광고 ID 확인' 항목의 값이 Android GAID 입니다.

인앱 이벤트link

사용자의 중요한 행동들이 발생할 때, 인앱 이벤트를 전송해 유입 경로별 성과를 측정할 수 있습니다.

회원, 커머스 관련 9가지의 기본이벤트가 제공되고, 커스텀 이벤트를 정의하여 사용하실 수 있습니다.

모든 이벤트에 첨부되는 모든 정보는 선택적으로 추가할 수 있습니다.
그러나 이벤트에 대한 많은 정보는 정확한 통계 제공에 도움이 됨으로 추가하는 것을 권장합니다.

EventOption 객체link

Airbridge 의 모든 이벤트는 EventOption 을 통해 추가 정보를 지정할 수 있습니다.

이름타입Optional설명
actionStringOptional이벤트 분류 1
labelStringOptional이벤트 분류 2
valuenumOptional이벤트 커스텀 값
attributesMap<String, String>Optional이벤트 커스텀 정보

action, label 에 대해서는 인앱 이벤트 구분 항목을 참고해주세요.

인앱 이벤트 - 회원link

회원 인앱 이벤트는 크로스 플랫폼 사용자 매칭 의 구성요소입니다.
가능하면 하나이상의 유저 정보를 포함하여 전송해 주시기 바랍니다.

회원가입 및 로그인 이벤트가 발생한 경우,
다음 로그아웃 이벤트 발생까지 모든 이벤트가 해당 유저에서 발생한 것으로 기록됩니다.

로그아웃 이벤트가 발생한 경우,
다음 회원가입 및 로그인 이벤트 발생까지 모든 이벤트가 유저 없이 발생한 것으로 기록됩니다.

사용자 정보는 모두 Hash (SHA256) 되어 전송됩니다.

User 객체link

상품 정보를 가지는 객체입니다.

이름타입Optional설명
idStringOptional유저 아이디
emailStringOptional유저 이메일
phoneStringOptional유저 전화번호

회원가입link

사용자가 회원가입을 하는 경우, SignUpEvent 를 전송해 주세요.

SignUpEventlink

  1. 회원가입 이벤트 전송
  2. 다음 이벤트들에 적용될 유저를 설정
파라미터 :
이름타입Optional설명
userUserOptional유저 정보
optionEventOptionOptional이벤트 추가 정보

코드 예시link

Airbridge.event.send(SignUpEvent(
user: User(
id: 'test',
email: 'test@ab180.co',
phone: '000-0000-0000',
)
));

로그인link

사용자가 로그인을 하는 경우, SignInEvent 를 전송해 주세요.

SignInEventlink

  1. 로그인 이벤트 전송
  2. 다음 이벤트들에 적용될 유저를 설정
파라미터 :
이름타입Optional설명
userUserOptional유저 정보
optionEventOptionOptional이벤트 추가 정보

코드 예시link

Airbridge.event.send(SignInEvent(
user: User(
id: 'test',
email: 'test@ab180.co',
phone: '000-0000-0000',
)
));

로그아웃link

사용자가 로그아웃을 하는 경우, SignOutEvent 을 호출해 주세요.

SignOutEventlink

  1. 로그아웃 이벤트 전송
  2. 다음 이벤트들에 적용될 유저를 제거
파라미터 :
이름타입Optional설명
optionEventOptionOptional이벤트 추가 정보

코드 예시link

Airbridge.event.send(SignOutEvent());

인앱 이벤트 - 커머스link

사용자의 커머스 관련 행동을 추적합니다.

Product 객체link

상품 정보를 가지는 객체입니다.

이름타입Optional설명
idStringOptional상품 고유 아이디
nameStringOptional상품 이름
currencyStringOptional상품 통화
ISO 4217 standard에 따름
pricenumOptional상품 가격
quantitynumOptional상품 수량
positionnumOptional리스트 중 상품 위치

홈 화면 조회link

사용자가 앱의 홈 화면으로 이동하는 경우, ViewHomeEvent 를 전송해 주세요.

ViewHomeEventlink

홈 화면 조회 이벤트 전송

파라미터 :
이름타입Optional설명
optionEventOptionOptional이벤트 추가 정보

코드 예시link

Airbridge.event.send(ViewHomeEvent());

상품 리스트 조회link

사용자가 상품 리스트를 조회할 경우, ViewProductListEvent 를 전송해 주세요.

ViewProductListEventlink

상품 리스트 조회 이벤트 전송

파라미터 :link

이름타입Optional설명
listIDStringOptional상품 리스트 아이디
productsList<Product>Optional상품 리스트
optionEventOptionOptional이벤트 추가 정보

코드 예시link

Airbridge.event.send(ViewProductListEvent(
listID: 'ID-1234567890',
products: [
Product(
name: 'product A',
),
Product(
name: 'product B',
),
]
));
  • 사용자가 리스트를 스크롤하여 새로운 정보를 로드할 경우
    추가적으로 로드된 상품 정보로 해당 이벤트를 별도로 생성하여 전송하시는 것을 권장합니다.

검색결과 조회link

사용자가 상품을 검색하는 경우, ViewSearchResultEvent 를 전송해 주세요.

ViewSearchResultEventlink

상품 검색 이벤트 전송

파라미터 :link

이름타입Optional설명
queryStringOptional검색어
productsList<Product>Optional검색 결과 상품 리스트
optionEventOptionOptional이벤트 추가 정보

코드 예시link

Airbridge.event.send(ViewSearchResultEvent(
query: 'product A',
products: [
Product(
name: 'product A AAA'
),
Product(
name: 'product A BBB',
),
],
));

상품 상세페이지 조회link

사용자가 상품의 상세정보를 조회하는 경우, ViewProductDetailEvent 를 전송해 주세요.

ViewProductDetailEventlink

상품 상세정보 조회 이벤트 전송

파라미터 :link

이름타입Optional설명
productsList<Product>Optional조회 상품 리스트
optionEventOptionOptional이벤트 추가 정보

코드 예시link

Airbridge.event.send(ViewProductDetailEvent(
products: [
Product(
name: 'product A',
),
],
);

장바구니 담기link

사용자가 장바구니에 상품을 담는 경우, AddToCartEvent 를 전송해 주세요.

AddToCartEventlink

장바구니 담기 이벤트 전송

파라미터 :link

이름타입Optional설명
cartIDStringOptional장바구니 아이디
productsList<Product>Optional장바구니 상품 리스트
currencyStringOptional상품 통화
ISO 4217 standard에 따름
totalnumOptional상품 총 가격
optionEventOptionOptional이벤트 추가 정보

코드 예시link

Airbridge.event.send(AddToCartEvent(
cartID: 'ID-1234567890',
products: [
Product(
name: 'product A',
),
],
currency: 'KRW',
total: 50000,
);

결제link

사용자가 결제하는 경우, PurchaseEvent 를 전송해 주세요.

PurchaseEventlink

결제 이벤트 전송

파라미터 :link

이름타입Optional설명
transactionIDStringOptional결제 아이디
productsList<Product>Optional장바구니 상품 리스트
isInAppPurchaseboolOptional인앱결제 여부
currencyStringOptional상품 통화
ISO 4217 standard에 따름
totalnumOptional상품 총 가격
optionEventOptionOptional이벤트 추가 정보

코드 예시link

Airbridge.event.send(PurchaseEvent(
transactionID: 'transactionID-purchase',
products: [
Product(
name: 'product purchase A name',
id: 'product purchase A id',
price: 100,
quantity: 10,
),
],
isInAppPurchase: true,
currency: 'KRW',
total: 50000,
);

인앱 이벤트 - 커스텀link

인앱 이벤트를 커스텀 정의해서 사용할 수 있습니다.

Eventlink

커스텀 이벤트 전송

파라미터 :link

이름타입Optional설명
categoryStringRequired이벤트 이름
optionEventOptionOptional이벤트 추가 정보

코드 예시link

Airbridge.event.send(Event(
'custom',
option: EventOption(
action: 'Action custom',
label: 'Label custom',
value: 9999,
attributes: {
'custom': 'value custom',
},
),
));

설정link

에어브릿지 SDK 의 동작을 개발자의 의도에 따라 설정합니다.

인앱 이벤트 구분link

에어브릿지 대시보드는 Category, Action, Label 을 통해 이벤트들을 분리하여 통계를 표시합니다.

Category 는 이벤트의 이름 입니다.
Action 은 이벤트의 하위 분류 1 입니다.
Label 은 이벤트의 하위 분류 2 입니다.

커스텀 인앱 이벤트는 Category, Action, Label 을 지정할 수 있습니다.

코드 예시link

for(var i=0; i<10; i++) {
Airbridge.event.send(SignUpEvent(
user: User(
id: 'test',
),
option: EventOption(
action: '서울',
label: '10대',
)
);
}
for(var i=0; i<20; i++) {
Airbridge.event.send(SignUpEvent(
user: User(
id: 'test',
),
option: EventOption(
action: '서울',
label: '20대',
)
);
}
for(var i=0; i<15; i++) {
Airbridge.event.send(SignUpEvent(
user: User(
id: 'test',
),
option: EventOption(
action: '부산',
label: '10대',
)
);
}
for(var i=0; i<8; i++) {
Airbridge.event.send(PurchaseEvent(
transactionID: 'ID-1234567890',
option: EventOption(
action: '간편결제 사용',
label: '카카오페이 사용',
)
)
}
for(var i=0; i<7; i++) {
Airbridge.event.send(PurchaseEvent(
transactionID: 'ID-1234567890',
option: EventOption(
action: '간편결제 사용',
label: '토스 사용',
)
)
}
for(var i=0; i<10; i++) {
Airbridge.event.send(Event(
'구독',
option: EventOption(
action: '일반',
),
));
}
for(var i=0; i<5; i++) {
Airbridge.event.send(Event(
'구독',
option: EventOption(
action: '프리미엄',
),
));
}

에어브릿지 대시보드에서 Category 를 기준으로 각 이벤트의 개수 통계를 볼 수 있습니다.
Action 으로 같은 Category 의 이벤트들을 분리하고
Label 을 통해 분리된 것을 또 분리하여 통계를 볼 수 있습니다.

결과적으로 대시에보드에 아래와 같은 결과물을 얻을 수 있습니다.

CategoryActionLabelCount
커스텀 회원가입서울10대10
커스텀 회원가입서울20대20
커스텀 회원가입부산10대15
커스텀 결제간편결제 사용카카오페이 사용8
커스텀 결제간편결제 사용토스 사용7
구독일반10
구독프리미엄5

세션 기간link

에어브릿지의 앱 세션 기간의 기본값은 5분 입니다.

아래의 코드를 호출하여 세션기간을 설정 할 수 있습니다.

...
[AirbridgeFL setSessionTimeout:(1000 * 60 * 5)];
[AirbridgeFL getInstance:@"YOUR_APP_TOKEN(앱 토큰)" appName:@"YOUR_APP_NAME(앱 이름)" withLaunchOptions:launchOptions];
...

세션기간은 밀리초 단위 입니다. 최대값은 604800000 (7일) 입니다.

위 코드를 Android, iOS 모두 초기화 이전에 호출해야 합니다.

유저 정보 암호화 해제link

유저는 정보 모두 Hash (SHA256) 되어 전송합니다.

만일 Hash 화를 원하지 않을 경우 아래 메서드를 활용하여 설정을 변경하실 수 있습니다.

...
// User 정보 Hash 화 적용
[AirbridgeFL setIsUserInfoHashed:YES];
[AirbridgeFL getInstance:@"YOUR_APP_TOKEN(앱 토큰)" appName:@"YOUR_APP_NAME(앱 이름)" withLaunchOptions:launchOptions];
...

위 코드를 Android, iOS 모두 초기화 이전에 호출해야 합니다.

추적 중지 (Opt-out)link

SDK 에서 이벤트를 전송하는 기능을 중지할 수 있습니다.

...
// 추적 중지
[AirbridgeFL setIsTrackingEnabled:NO];
[AirbridgeFL getInstance:@"YOUR_APP_TOKEN(앱 토큰)" appName:@"YOUR_APP_NAME(앱 이름)" withLaunchOptions:launchOptions];
...

true : 추적
false : 추적 중지

위 코드를 Android, iOS 모두 초기화 이전에 호출해야 합니다.

추가 수집link

선택적으로 더 많은 정보를 수집할 수 있습니다.

App 에서 딥링크 실행 및 추적link

아래와 같은 코드를 사용해서 App 에서 딥링크 동작을 수행하고, 그 동작을 추적할 수 있습니다.

Airbridge.placement.click('https://abr.ge/~~~', 'ablog://main', 'https://airbridge.io');
Airbridge.placement.impression('https://abr.ge/~~~');

clicklink

click 함수는 해당 트래킹링크 의 click 통계를 1개 추가하고 설정된 App, Web 또는 Fallback 으로 이동합니다.
해당 트래킹링크 가 클릭되었을 때, 호출해 주세요.

click 함수에서 deeplink, fallback 은 인터넷 연결이 없을 때 사용하는 백업 링크 입니다.
deeplink 파라미터는 Custom URL Scheme 형식의 딥링크만 사용가능 합니다.
(모두 optional 파라미터 입니다.)

impressionlink

impression 함수는 해당 트래킹링크 의 impression 통계를 1개 추가합니다.
해당 트래킹링크 가 UI 에 표시되었을 때, 호출해 주세요.

커스텀 도메인 을 사용하는 중 이라면, 커스텀 Short ID 를 사용한 트래킹링크 는 사용할 수 없습니다.
example: http://deeplink.ab180.co/custom -> 사용불가
example: http://deeplink.ab180.co/a3b1c2 -> 사용가능
example: https://abr.ge/a3b1c2 -> 사용가능

고급link

유저 정보 수동 설정link

회원가입, 로그인, 로그아웃 이벤트 외에도 유저 정보를 수동으로 설정할 수 있습니다.

설정하면 다음 설정이나 SignInEvent, SignUpEvent, SignOutEvent 이벤트 전송까지
모든 이벤트가 설정된 유저에서 발생한 것으로 기록됩니다.

setUserlink

현재 유저를 변경합니다.

파라미터 :link

이름타입Optional설명
userUserOptional유저 정보

현재 user 를 입력한 user 로 교체합니다.

updateUserlink

현재 유저 정보를 수정합니다.

파라미터 :link

이름타입Optional설명
userUserOptional유저 정보

입력한 user 에 ID 값이 없으면 현재 user 의 ID 를 수정하지 않습니다.
입력한 user 에 ID 값이 있으면 현재 user 의 ID 를 수정합니다.

코드 예시link

Airbridge.state.setUser(
User(
id: 'test1',
email: 'test1@ab180.co',
)
);
Airbridge.state.setUser(
User(
email: 'test2@ab180.co',
phone: '222-2222-2222',
)
);
Airbridge.state.updateUser(
User(
id: 'test3',
)
);

위 코드는 다음과 같이 작동합니다.

User = { ID: 'test1', email: 'test1@ab180.co' }
-> User = { email: 'test1@ab180.co', phone: '222-2222-2222' }
-> User = { ID: 'test3', email: 'test2@ab180.co', phone: '222-2222-2222' }

Braze 연동link

SDK to SDK 방식을 사용하여 Braze 에 Airbridge 의 attribution 정보를 전송합니다.

iOSlink

#import <AirBridge/AirBridge.h>
...
@interface AppDelegate () <ABTrackingDelegate>
@end
@implementation AppDelegate
...
- (void)airbridgeUserAttributed:(ABAttribution *)attribution {
/* convert airbridge-attribution to braze-attribution */
ABKAttributionData *abkAttributionData = [[ABKAttributionData alloc] initWithNetwork:attribution.source
campaign:attribution.campaign
adGroup:attribution.adgroup
creative:attribution.adcreative];
/* add attribution-data to user */
[[[Appboy sharedInstance] user] setAttributionData:abkAttributionData];
[[[Appboy sharedInstance] user] setCustomAttributeWithKey:@"airbridge_medium"
andStringValue:attribution.medium];
[[[Appboy sharedInstance] user] setCustomAttributeWithKey:@"airbridge_ad_content"
andStringValue:attribution.adcontent];
[[[Appboy sharedInstance] user] setCustomAttributeWithKey:@"airbridge_search_keyword"
andStringValue:attribution.searchKeyword];
/* send event to Braze */
[[Appboy sharedInstance] flushDataAndProcessRequestQueue];
}
...
@end

Androidlink

android/app/src/main/java/.../MainApplication.java 를 수정해주세요.

import io.airbridge.AirBridge;
...
@Override
public void onCreate() {
super.onCreate();
...
/* Braze init */
registerActivityLifecycleCallbacks(new AppboyLifecycleCallbackListener(...));
...
/* Airbridge-Flutter-SDK init */
AirbridgeFL.init(this, "YOUR_APP_NAME", "YOUR_APP_TOKEN");
/* Braze integration with Airbridge-Android-SDK */
AirBridge.turnOnIntegration(new AppBoyIntegrator());
}

Airbridge-Braze 연동 관련 코드는 Braze init 아래에 작성되어야 합니다.