디파이너리(애드브릭스) 연동하기 [Flutter]
팔로우
Quick Start
Flutter 프로젝트에 SDK 설치 및 초기화 방법에 대한 안내 가이드 입니다.
[[인용:경고:보통]] System Requirement
디파이너리 Flutter SDK는 다음의 버전에서 작동합니다.
1. Flutter : 1.20.0 이상
2. Dart : 2.12.0 이상
SDK 설치 및 초기화
SDK 설치
Flutter 프로젝트 내 pubspec.yaml 파일에 아래와 같이 추가합니다.
dependencies: adbrixrm_flutter: ^3.0.0
Flutter 프로젝트 최상위 파일 위치에서 터미널을 열고 다음 명령어를 실행합니다.
flutter pub get
[[인용:위험:보통]] adbrixrm_flutter 1.5.0 이하 버전에서와 달리 AOS, iOS 네이티브에서 AdBrixRmKit을 직접 연동하지 않습니다. 따라서 1.5.0이하 버전에서 업데이트 하는 경우 코드수정이 반드시 필요합니다. 따라서 이전 버전을 사용하시던 고객께서는 gradle, cocoaPods 에서 AdBrixRmKit에 대한 의존성을 삭제해주시기 바랍니다.
[[인용:경고:보통]] adbrixrm_flutter의 버전규칙은 Semantic Versioning을 따릅니다.
[[인용:경고:보통]] 2.1.0 버전 기준 삭제된 API들은 문서 최하단에서 확인해주시기 바랍니다.
Android 설정
Android 설정에 대한 가이드입니다.
build.gradle 설정
Flutter 프로젝트 -> Android -> app 폴더에 있는 build.gradle 파일에 아래와 같이 추가합니다.
android { defaultConfig { minSdkVersion 19 } }
dependencies { implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1' implementation 'com.android.installreferrer:installreferrer:2.2' }
[[인용:위험:보통]]* Fraud Traffic 방지를 위해서 com.android.installreferrer:installreferrer를 반드시 추가합니다.
* 구글 광고 아이디 흭득 및 매체 광고를 위해서는 com.google.android.gms:play-service-ads-identifier를 반드시 추가합니다.
Androidmanifest.xml 권한 설정
AndroidManifest.xml 파일에 아래와 같이 권한을 추가합니다.
<manifest> ... <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID" /> ... </manifest>
ProGuard 설정
SDK 구동 및 분석이 원할하게 진행될 수 있도록 app / proguard-rule.pro에 아래 코드를 추가해 주시길 부탁드립니다.
## Flutter wrapper -keep class io.flutter.app.** { *; } -keep class io.flutter.plugin.** { *; } -keep class io.flutter.util.** { *; } -keep class io.flutter.view.** { *; } -keep class io.flutter.** { *; } -keep class io.flutter.plugins.** { *; } -dontwarn io.flutter.embedding.* ## AdBrixRm -keep class com.google.android.gms.ads.identifier.AdvertisingIdClient {*;} -keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$* {*;} -dontwarn com.android.installreferrer
iOS 설정
iOS 설정에 대한 가이드입니다.
Swift Library 설정
디파이너리(애드브릭스) SDK 는 Swift로 작성되었기 때문에, Xcode 프로젝트에서 다음과 같은 설정을 해주어야 합니다.
[Build Settings > Always Embed Swift Standard Libraries]를 'yes'로 설정합니다.
SDK 초기화
Android 설정
AndroidManifest.xml > application 설정
<application
//FlutterApplication을 상속하는 Application 클래스
android:name=".BaseApplication" ... >
해당 클래스의 onCreate()에 다음과 같이 설정해주세요
import com.igaworks.adbrixrm_flutter.AdbrixrmFlutterPlugin;
public class BaseApplication extends FlutterApplication {
@Override
public void onCreate() {
super.onCreate();
AdbrixrmFlutterPlugin.sdkInit(this, "Your appkey", "Your secretkey");
}
}
import com.igaworks.adbrixrm_flutter.AdbrixrmFlutterPlugin;
class BaseApplication: FlutterApplication() {
override fun onCreate() {
super.onCreate()
AdbrixrmFlutterPlugin.sdkInit(this, "Your appkey", "Your secretkey")
}
}
iOS 설정
import UIKit
import Flutter
import AppTrackingTransparency
import adbrixrm_flutter
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
GeneratedPluginRegistrant.register(with: self)
AdbrixrmFlutterPlugin.sdkInit(appKey: "YOUR_APPKEY", secretKey: "YOUR_SECRETKEY")
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
#import "AppDelegate.h"
#import "GeneratedPluginRegistrant.h"
@import adbrixrm_flutter;
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[GeneratedPluginRegistrant registerWithRegistry:self];
[AdbrixrmFlutterPlugin sdkInitWithAppKey:@"YOUR_APPKEY" secretKey:@"YOUR_SECRETKEY"];
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
[[인용:안내:보통]]앱키 & 시크릿키 확인
_ 앱키와 시크릿키는 디파이너리(애드브릭스)가 앱을 구분하기 위한 식별 값입니다.
_ SDK 연동을 위해서 반드시 필요한 값으로, 디파이너리(애드브릭스) 콘솔에서 앱 등록 후 확인할 수 있습니다.
앱키, 시크릿키 확인 방법 / 디파이너리(애드브릭스) 콘솔 바로가기
[[인용:안내:보통]] 축하합니다!!!
디파이너리(애드브릭스) 이용을 위한 기본적인 연동이 완료되었습니다.
이용할 수 있는 기능은 다음과 같습니다.
1. DAU, MAU, 일별 리텐션 등의 지표를 확인할 수 있는 리포팅
2. nCPI 와 같은 앱 유입 캠페인
SDK 추가 설정
애플 광고식별자(IDFA) 설정
AdBrixRm 은 기본적으로 IDFV 를 기기 ID로 사용하나 어트리뷰션 및 기타 다른 목적을 위해 IDFA 를 수집할 수 있도록 설장할 수 있습니다.
IDFA 설정은 네이티브 코드에서 ATT 팝업 API 내 아래의 코드로 설정할 수 있습니다. (디폴트 설정은 IDFA off 입니다.)
import UIKit
import Flutter
import AppTrackingTransparency
import adbrixrm_flutter
@UIApplicationMain @objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
...
...
}
override func applicationDidBecomeActive(_ application: UIApplication) { if #available(iOS 14, *) { ATTrackingManager.requestTrackingAuthorization {(status) in switch status{ case.authorized: AdbrixrmFlutterPlugin.startGettingIDFA() case.denied: AdbrixrmFlutterPlugin.stopGettingIDFA() case.notDetermined : AdbrixrmFlutterPlugin.stopGettingIDFA() case.restricted: AdbrixrmFlutterPlugin.stopGettingIDFA() default: AdbrixrmFlutterPlugin.stopGettingIDFA() } } } }
#import "AppDelegate.h"
#import "GeneratedPluginRegistrant.h"
#import <AppTrackingTransparency/AppTrackingTransparency.h>
@import adbrixrm_flutter;
@implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if (@available(iOS 14, *)) { [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) { switch (status) { case ATTrackingManagerAuthorizationStatusAuthorized: [AdbrixrmFlutterPlugin startGettingIDFA]; break; case ATTrackingManagerAuthorizationStatusDenied: [AdbrixrmFlutterPlugin stopGettingIDFA]; break; case ATTrackingManagerAuthorizationStatusRestricted: [AdbrixrmFlutterPlugin stopGettingIDFA]; break; case ATTrackingManagerAuthorizationStatusNotDetermined: [AdbrixrmFlutterPlugin stopGettingIDFA]; break; default: [AdbrixrmFlutterPlugin stopGettingIDFA]; break; } }]; } }
이벤트 업로드 주기 : 누적 이벤트 개수 기준
설정된 개수만큼 이벤트가 누적되었을 때에 디파이너리(애드브릭스) 서버로 이벤트를 업로드하도록 설정합니다.
디파이너리(애드브릭스) SDK에 사전 정의된 아래의 값을 이용하여 설정합니다.
- AdBrixEventUploadCountInterval.MIN : 10건
- AdBrixEventUploadCountInterval.NORMAL : 30건
- AdBrixEventUploadCountInterval.MAX : 60건
AdBrixRm.setEventUploadCountInterval( interval: AdBrixEventUploadCountInterval.MIN);
이벤트 업로드 주기 : 시간 기준
설정된 시간이 지나면 디파이너리(애드브릭스) 서버로 이벤트를 업로드하도록 설정합니다.
디파이너리(애드브릭스) SDK에 사전 정의된 아래의 값을 이용하여 설정합니다.
- AdBrixEventUploadTimeInteval.MIN : 30초
- AdBrixEventUploadTimeInteval.NORMAL :60초
- AdBrixEventUploadTimeInteval.MAX :120초
AdBrixRm.setEventUploadTimeInterval( interval: AdBrixEventUploadTimeInterval.MIN);
GDPR 설정
GDPR 요청 이벤트를 이용하여 사용자 요청에 대해 데이터 주체와 연관된 모든 개인 데이터를 더이상 수집하지 않을 수 있습니다.
본 이벤트 호출시, SDK 동작은 정지되며 모든 이벤트 저장, 전송 등이 불가합니다.
본 기능은 사용자가 앱을 삭제 후, 재설치하기 전에는 되돌릴 수 없습니다.
AdBrixRm.gdprForgetMe();
딥링크 및 디퍼드딥링크 이벤트 연동
딥링크 이벤트 분석을 위해 아래와 같이 연동합니다.
Android 설정
[AndroidManifest.xml > manifest > application] 에 등록된 MainActivity 설정에 아래와 같이 딥링크 설정을 추가합니다.
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="your_scheme" android:host="your_host" /> </intent-filter>
Android AppLink 를 사용하실 경우 [AndroidManifest.xml > manifest > application] 에 등록한 액티비티에 다음과 같이 설정합니다. Applink는 optional한 기능으로, Applink를 사용하실 경우에만 연동을 부탁드립니다.
<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="https" android:host="your_appkey.adtouch.adbrix.io" /> </intent-filter>
[[인용:경고:보통]] your_appkey 항목에는 반드시 연동시 사용하시는 Appkey 를 입력하셔야 하며 소문자로 입력을 부탁드립니다.
[[인용:위험:보통]] Applink 연동전에 반드시 확인해주세요!
1.Applink 사용을 위해서는 반드시 트래킹 링크 생성시 딥링크 패스 방식을 "동적 패스"로 설정하시고 이렇게 생성된 트랙킹 링크에 붙는 파라미터인 deeplink_custom_path 값에 이동할 딥링크 경로를 입력하여 Applink로 전달 합니다.
2. Applink로 오픈하는 액티비티의 intent로 전달되는 값에 자동으로 추가되는 "is_used_abx_applink=true"를 임의로 수정하시면, 정확한 광고 성과 측정이 불가합니다.
3. Applink는 optional한 기능입니다. Applink를 사용하지 않는다면 해당 작업은 필수가 아닙니다.
MainActivity 에 아래와 같이 코드를 추가합니다.
import com.igaworks.adbrixrm_flutter.AdbrixrmFlutterPlugin;
public class MainActivity extends FlutterActivity {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@Override
protected void onResume() {
super.onResume();
AdbrixrmFlutterPlugin.deeplinkEventWithIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
}
class MainActivity: FlutterActivity() { override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { super.onCreate(savedInstanceState, persistentState) }
override fun onResume() {
super.onResume()
AdbrixrmFlutterPlugin.deeplinkEventWithIntent(intent)
}
override fun onNewIntent(intent: Intent) { super.onNewIntent(intent)
setIntent(intent)
}
}
FlutterApplication 클래스를 상속받는 기본 Application 클래스에 다음과 같이 추가해줍니다.
import com.igaworks.adbrixrm_flutter.AdbrixrmFlutterPlugin;
public class BaseApplication extends FlutterApplication { @Override public void onCreate() { super.onCreate(); //딥링크 리스너 추가 AdbrixrmFlutterPlugin.setDeeplinkListener(); //디퍼드딥링크 리스너 추가 AdbrixrmFlutterPlugin.setDeferredDeeplinkListener(); }
}
class BaseApplication : FlutterApplication() { override fun onCreate() { super.onCreate() //딥링크 리스너 추가 AdbrixrmFlutterPlugin.setDeeplinkListener() //디퍼드딥링크 리스너 추가 AdbrixrmFlutterPlugin.setDeferredDeeplinkListener()
}
}
iOS 딥링크 설정
[General > Target > Info > URL Types] 로 이동하여 다음과 같이 URL Scheme 을 설정합니다.
AppDelegate에 application(_ app: open url: options: ) delegate를 추가하고 다음과 같이 트래킹 코드를 호출합니다.
override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { // Add Deep Link Open Tracking Code AdbrixrmFlutterPlugin.deeplinkOpen(with: url)
return true
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { // Add Deep Link Open Tracking Code [AdbrixrmFlutterPlugin deeplinkOpenWith:url]; return YES; }
Flutter 레벨에서의 리스너 등록을 위해 다음 코드를 추가합니다.
import UIKit
import Flutter
import AppTrackingTransparency
import adbrixrm_flutter
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
GeneratedPluginRegistrant.register(with: self)
...
...
...
AdbrixrmFlutterPlugin.setDeeplinkListener()
AdbrixrmFlutterPlugin.setDeferredDeeplinkListener()
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
#import "AppDelegate.h"
#import "GeneratedPluginRegistrant.h"
@import adbrixrm_flutter;
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[GeneratedPluginRegistrant registerWithRegistry:self];
...
...
...
[AdbrixrmFlutterPlugin setDeeplinkListener];
[AdbrixrmFlutterPlugin setDeferredDeeplinkListener];
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
iOS 유니버셜 링크 설정 (Optional)
[General > Target > Capablities> Associated Domains]로 이동하여 다음과 같이 유니버셜 링크를 설정합니다.
[[인용:경고:보통]] 유니버셜 링크 추가시 applinks:your_appkey.adtouch.adbrix.io로 추가하며 "your_appkey" 항목에는 연동시 사용하시는 Appkey를 추가해야 하며 Appkey는 소문자만 사용합니다.
이후 유니버셜 링크로 오픈되는 앱 분석을 위해 아래의 코드를 AppDelegate에 추가합니다.
override func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let incomingURL = userActivity.webpageURL else { return false } print("DEEPLINK :: UniversialLink was clicked !! incomingURL - \(incomingURL)") NSLog("UNIVERSAL LINK OPEN!!!!!!!!!!!!!!!!!") AdbrixrmFlutterPlugin.deepLinkOpen(url: incomingURL) return true }
Flutter
각 플랫폼 별 설정이 완료되면 main.dart 에 아래와 같이 추가합니다.
import 'adbrixrm_flutter/adbrixrm.dart' . . . //다음 연동 위치는 예시입니다. 필요한 곳에 알맞게 연동해주세요. @override void initState() { super.initState();
AdBrixRm.setDeeplinkListener((deeplinkString) {
debugPrint("DEEPLINK = $deeplinkString");
});
AdBrixRm.setDeferredDeeplinkListener((deferredDeeplinkString) {
debugPrint("DEFERRED_DEEPLINK = $deferredDeeplinkString");
}); }
[[인용:위험:작게]] 해당 API는 오직 디파이너리(애드브릭스) 트래킹 링크로 딥링크 오픈 된 경우에만 Deeplink 값이 전달 됩니다.
유저 분석
로그인 / 로그아웃 이벤트
앱 유저의 로그인 / 로그아웃 이벤트를 분석합니다.
로그인이 성공했을 경우 유저를 구분하는 식별값을 아래 샘플코드와 같이 전달합니다.
[[인용:경고:보통]] 로그인 유의 사항
로그인에 사용되는 user id는 그로스액션 기능 사용 시 유저-기기간 매칭을 위해 사용됩니다. 로그인 후 로그아웃 없이 다시 로그인이 호출 될 경우 올바른 매칭이 되지 않을 수 있습니다.
user id에 개인정보가 포함되지 않도록 주의해주세요. 만약 user id에 이메일, 전화번호 등의 개인정보가 포함되는 경우에는 암호화처리를 하시는 것을 권장합니다.
void login() { if(loginSuccess) {
AdBrixRm.login(userId:'myUserID');
} }
유저 정보
사용자의 나이, 성별 등 기타 정보에 대한 분석을 진행합니다.
void userPropertiesUpdate() { // Set Age AdBrixRm.setAge(age:36); // Set Gender AdBrixRm.setGender(gender : AdBrixGender.MALE); //Addtional UserInfo Map<String, dynamic> properties = <String, dynamic>{ 'adress' : 'Mapo-gu Seoul Korea', 'appmoney': 100.50, 'married' : true }; AdBrixRm.setUserProperties(properties: properties); }
[[인용:위험:보통]] Map 을 이용한 이벤트 properties (attr) 설정시 유의 사항
1.100 개 이상의 정보는 처리되지 않습니다.
2. Key 값의 데이터 타입은 string 이며 256자를 넘을 수 없고, 영문 소문자, 숫자를 제외한 나머지 문자는 사용할 수 없습니다.
3. Value 값의 데이터 길이는 byte 기준으로 1024byte 를 넘을 수 없습니다.
4. Value 값은 String, int, long, double, bool 타입만 사용할 수 있습니다.
5. 이후 나오는 모든 이벤트에 대한 Map 을 이용한 이벤트 추가 정보 (attr) 은 위와 같은 규칙이 적용됩니다.
일반 이벤트
앱에서 발생하는 이벤트 중, 공통적으로 발생하는 이벤트를 분석합니다.
디파이너리(애드브릭스) 에서 제공하는 공통 이벤트 종류는 다음과 같습니다.
- 회원가입
- 앱 업데이트
- 사용자 초대
- 크레딧 사용
- 결제하기
* 디파이너리(애드브릭스)에서 광고채널 별 매출을 보고자 할 때에는 '결제하기' 연동을 반드시 진행해야 합니다.
회원가입
앱에서 발생한 회원가입 이벤트를 분석합니다.
- 회원가입 채널: (필수) 회원이 가입한 채널 경로 (type : AdBrixSignUpChannel)
- currVersion : (필수) 현재 버전 (type : String)
- attr : (옵션) 이벤트 추가 정보 (type : Map)
void signUp() { // set Addtional Event Value (Optional) Map<String, dynamic> properties = <String, dynamic>{ 'local' : 'Seoul', 'date' : '2020-10-31', 'channel' : 1 }; AdBrixRm.commonSignUp(channel: AdBrixSignUpChannel.Naver, attr: properties); }
앱 업데이트
앱에서 발생한 앱 업데이트 이벤트를 분석합니다.
- preVersion : (필수) 기존 버전 (type : String)
- currVersion : (필수) 현재 버전 (type : String)
- attr : (옵션) 이벤트 추가 정보 (type : Map)
void appUpdate() { // set Addtional Event Value (Optional) Map<String, dynamic> properties = <String, dynamic>{ 'appmarket': 'GooglePlay', 'device': 'google', 'autoupdate': true, }; AdBrixRm.commonAppUpdate( preVersion: '2.0.0', currVersion: '3.0.0', attr: properties); }
사용자 초대
앱에서 발생한 사용자의 앱 초대 이벤트를 분석합니다.
- inviteChannel : (필수) 사용자 초대 채널 (type : AdBrixInviteChannel)
- attr : (옵션) 이벤트 추가 정보 (type : Map)
void userInvite() { // set Addtional Event Value (Optional) Map<String, dynamic> properties = <String, dynamic>{ 'currentplace': 'Seoul', 'friends': 36, 'credit': 180.50, }; AdBrixRm.commonUserInvite( inviteChannel: AdBrixInviteChannel.Kakao, attr: properties); }
크레딧 사용
앱내 현금성 화폐 사용에 대한 이벤트를 분석 합니다.
- attr : (옵션) 이벤트 추가 정보 (type : Map)
void useCredit() { //set Addtional Event Value (Optional) Map<String, dynamic> properties = <String, dynamic>{ 'local': 'Seoul', 'age': 36, 'height': 180.50, 'creditused': 200.0 }; AdBrixRm.commonUseCredit(attr: properties) }
결제하기
앱에서 발생한 결제(구매) 이벤트를 분석합니다.
다음과 같은 상품 및 주문에 대한 정보(AdBrixRmCommerceProductModel) 를 List 형태로 구성하여 전달합니다.
AdBrixRmCommerceProductModel
- productId : (필수) 상품 ID (type : string)
- productName: (필수) 상품명 (type : double)
- price: (필수) : 상품 가격 (type : double)
- discount : (필수) 할인액 (type : double)
- quantity : (필수) 갯수 (type : int)
- currency : (필수) 화폐 단위 (type : AdBrixCurrency)
- category : (필수) 상품 카테고리 (type : AdBrixRmCommerceCategoryModel)
- productAttr : (옵션) 상품 추가 정보 (type : Map<String, dynamic>)
[[인용:경고:보통]] 커머스 이벤트에서 나오는 모든 AdBrixRmCommerceProductModel 에 대해서도 동일한 규칙이 적용 됩니다.
commonPurchase 이벤트
- order id : (필수) 주문 번호 (type : string)
- productList : (필수) AdBrixRmCommerceProductModel 로 구성된 상품 리스트 (type : List<AdBrixRmCommerceProductModel>
- orderSales : (필수) 전체 주문 금액 (type : double)
- discount : (필수) 주문 할인 금액 (type: double)
- delivery charge : (필수) 배송비 (type : double)
- payment method : (필수) 결제 방법 (type : AdBrixPaymentMethod)
- attr : (옵션) 이벤트 추가 정보 (type : Map<String, dynamic>)
void purchase() { // Set Product // product info (Optional) Map<String, dynamic> productInfo = <String, dynamic>{ 'productbrand': 'AIR_Product', 'limited': 35000, 'currentsale': 3000, 'salesleft': 0.30, 'sale': false }; // Create Product AdBrixRmCommerceProductModel adBrixRmCommerceProductModel1 = AdBrixRmCommerceProductModel.create( productId: 'myproductId', productName: 'productNametest', price: 1000000.0, discount: 250000.0, quantity: 1, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1'), productAttr: productInfo); AdBrixRmCommerceProductModel adBrixRmCommerceProductModel2 = AdBrixRmCommerceProductModel.create( productId: 'productID 2', productName: 'productName2', price: 15000.0, discount: 2500.0, quantity: 3, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1')); // Make a List for ProductModel List<AdBrixRmCommerceProductModel> productlist = <AdBrixRmCommerceProductModel>[]; productlist.add(adBrixRmCommerceProductModel1); productlist.add(adBrixRmCommerceProductModel2); //set Addtional Event Value (Optional) Map<String, dynamic> eventproperties = <String, dynamic>{ 'deliveryadress': 'Seoul', 'remaindate': 7, 'mil': 25000.23, 'vip': true }; AdBrixRm.commonPurchase( orderId: 'myorderid', productList: productlist, orderSale : 755000.0 discount: 1000.0, deliveryCharge: 2500.0, paymentMethod: AdBrixPaymentMethod.MobilePayment, attr: eventproperties); }
커스텀 이벤트
앱 내 유저의 일반적인 모든 이벤트를 분석합니다.
디파이너리(애드브릭스)에서 미리 지정하지 않은 이벤트에 대해 직접 이벤트 명을 만들어 이벤트를 구성할 수 있습니다.
- eventName: (필수) 이벤트 명(type : string)
- attr : (옵션) 이벤트 추가 정보 (type : Map)
void customEvent() { //set Addtional Event Value (Optional) Map<String, dynamic> attr = <String, dyanamic>{ 'local': 'Seoul', 'age': 36, 'height': 180.00 }; AdBrixRm.event(eventName: 'your_event_name', attr: attr); }
커머스 이벤트 분석
앱에서 발생하는 구매와 관련된 이벤트(상품상세보기, 장바구니 담기 등)를 분석합니다.
디파이너리(애드브릭스)에서 제공하는 커머스 이벤트 종류는 다음과 같습니다.
- 홈(메인) 화면 진입
- 카테고리(기획전) 진입
- 상품 상세 보기
- 장바구니 담기
- 위시리스트(관심 상품) 추가
- 주문 확인하기
- 주문 취소하기
- 상품 검색하기
- 상품 공유하기
- 상품 목록 조회하기
- 장바구니 조회하기
- 결제 정보 입력하기
홈(메인) 화면 진입
유저가 앱의 홈(메인) 화면으로 진입한 이벤트를 분석합니다.
void viewHome() { AdBrixRm.commerceViewHome(); }
카테고리 (기획전) 진입
유저가 카테고리(기획전) 화면으로 진입한 이벤트를 분석합니다.
- categoryModel : (필수) 카테고리 리스트(type : AdBrixRmCommerceCategoryModel )
- productList : (필수) AdBrixRmCommerceProductModel 로 구성된 상품 리스트 (type : List<AdBrixRmCommerceProductModel>
- attr : (옵션) 이벤트 추가 정보 (type : Map<String, dynamic>)
void categoryView () { // Set Product // product info (Optional) Map<String, dynamic> productInfo = <String, dynamic>{ 'productbrand': 'AIR_Product', 'limited': 35000, 'currentsale': 3000, 'salesleft': 0.30, 'sale': false }; // Create Product AdBrixRmCommerceProductModel adBrixRmCommerceProductModel1 = AdBrixRmCommerceProductModel.create( productId: 'myproductId', productName: 'productNametest', price: 1000000.0, discount: 250000.0, quantity: 1, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1'), productAttr: productInfo); AdBrixRmCommerceProductModel adBrixRmCommerceProductModel2 = AdBrixRmCommerceProductModel.create( productId: 'productID 2', productName: 'productName2', price: 15000.0, discount: 2500.0, quantity: 3, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1')); // Make a List for ProductModel List<AdBrixRmCommerceProductModel> productlist = <AdBrixRmCommerceProductModel>[]; productlist.add(adBrixRmCommerceProductModel1); productlist.add(adBrixRmCommerceProductModel2); //set Addtional Event Value (Optional) Map<String, dynamic> eventproperties = <String, dynamic>{ 'deliveryadress': 'Seoul', 'remaindate': 7, 'mil': 25000.23, 'vip': true }; // Make CategoryList for catagoryView Event AdBrixRmCommerceCategoryModel eventCategoryModel = AdBrixRmCommerceCategoryModel.create( category1: 'eventcategory1', category2: 'eventcategory2', category3: 'eventcategory3', category4: 'eventCategory4', category5: 'eventCategory5'); AdBrixRm.commerceCategoryView ( categoryModel: eventCategoryModel, productList: productlist, attr: eventproperties); }
상품 상세 보기
유저가 상품을 상세하게 본 이벤트를 분석합니다.
- productModel : (필수) 상품정보 (type : AdBrixRmCommerceProductModel)
- attr : (옵션) 이벤트 추가 정보 (type : Map<String, dynamic>)
void productView () { // Set Product // product info (Optional) Map<String, dynamic> productInfo = <String, dynamic>{ 'productbrand': 'AIR_Product', 'limited': 35000, 'currentsale': 3000, 'salesleft': 0.30, 'sale': false }; // Create Product AdBrixRmCommerceProductModel adBrixRmCommerceProductModel1 = AdBrixRmCommerceProductModel.create( productId: 'myproductId', productName: 'productNametest', price: 1000000.0, discount: 250000.0, quantity: 1, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1'), productAttr: productInfo); //set Addtional Event Value (Optional) Map<String, dynamic> eventproperties = <String, dynamic>{ 'deliveryadress': 'Seoul', 'remaindate': 7, 'mil': 25000.23, 'vip': true }; AdBrixRm.commerceProductView( productModel: adBrixRmCommerceProductModel1, attr: eventproperties); }
장바구니 담기
유저가 상품을 장바구니에 담은 이벤트를 분석합니다.
- productList : (필수) AdBrixRmCommerceProductModel 로 구성된 상품 리스트 (type : List<AdBrixRmCommerceProductModel>
- attr : (옵션) 이벤트 추가 정보 (type : Map<String, dynamic>)
void addtocart() { // Set Product // product info (Optional) Map<String, dynamic> productInfo = <String, dynamic>{ 'productbrand': 'AIR_Product', 'limited': 35000, 'currentsale': 3000, 'salesleft': 0.30, 'sale': false }; // Create Product AdBrixRmCommerceProductModel adBrixRmCommerceProductModel1 = AdBrixRmCommerceProductModel.create( productId: 'myproductId', productName: 'productNametest', price: 1000000.0, discount: 250000.0, quantity: 1, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1'), productAttr: productInfo); AdBrixRmCommerceProductModel adBrixRmCommerceProductModel2 = AdBrixRmCommerceProductModel.create( productId: 'productID 2', productName: 'productName2', price: 15000.0, discount: 2500.0, quantity: 3, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1')); // Make a List for ProductModel List<AdBrixRmCommerceProductModel> productlist = <AdBrixRmCommerceProductModel>[]; productlist.add(adBrixRmCommerceProductModel1); productlist.add(adBrixRmCommerceProductModel2); //set Addtional Event Value (Optional) Map<String, dynamic> eventproperties = <String, dynamic>{ 'deliveryadress': 'Seoul', 'remaindate': 7, 'mil': 25000.23, 'vip': true }; AdBrixRm.commerceAddToCart( productList: productlist, attr: eventproperties); }
위시리스트(관심 상품) 추가
사용자가 상품을 위시리스트(관심 상품)에 추가한 이벤트를 분석합니다.
- productModel : (필수) 상품 정보 (type : AdBrixRmCommerceProductModel)
- attr : (옵션) 이벤트 추가 정보 (type : Map<String, dynamic>)
void addtowishlist() { // Set Product // product info (Optional) Map<String, dynamic> productInfo = <String, dynamic>{ 'productbrand': 'AIR_Product', 'limited': 35000, 'currentsale': 3000, 'salesleft': 0.30, 'sale': false }; // Create Product AdBrixRmCommerceProductModel adBrixRmCommerceProductModel1 = AdBrixRmCommerceProductModel.create( productId: 'myproductId', productName: 'productNametest', price: 1000000.0, discount: 250000.0, quantity: 1, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1'), productAttr: productInfo); //set Addtional Event Value (Optional) Map<String, dynamic> eventproperties = <String, dynamic>{ 'deliveryadress': 'Seoul', 'remaindate': 7, 'mil': 25000.23, 'vip': true }; AdBrixRm.commerceAddToWishList( productModel: adBrixRmCommerceProductModel1, attr: eventproperties); }
주문 확인하기
사용자가 상품을 결제하기 전 최종 확인하는 이벤트를 분석합니다.
- order id : (필수) 주문 번호 (type : string)
- productList : (필수) AdBrixRmCommerceProductModel로 구성된 상품 리스트 (type : List<AdBrixRmCommerceProductModel>
- discount : (필수) 주문 할인 금액 (type: double)
- delivery charge : (필수) 배송비 (type : double)
- attr : (옵션) 이벤트 추가 정보 (type : Map<String, dynamic>)
void reviewOrder() { // Set Product // product info (Optional) Map<String, dynamic> productInfo = <String, dynamic>{ 'productbrand': 'AIR_Product', 'limited': 35000, 'currentsale': 3000, 'salesleft': 0.30, 'sale': false }; // Create Product AdBrixRmCommerceProductModel adBrixRmCommerceProductModel1 = AdBrixRmCommerceProductModel.create( productId: 'myproductId', productName: 'productNametest', price: 1000000.0, discount: 250000.0, quantity: 1, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1'), productAttr: productInfo); AdBrixRmCommerceProductModel adBrixRmCommerceProductModel2 = AdBrixRmCommerceProductModel.create( productId: 'productID 2', productName: 'productName2', price: 15000.0, discount: 2500.0, quantity: 3, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1')); // Make a List for ProductModel List<AdBrixRmCommerceProductModel> productlist = <AdBrixRmCommerceProductModel>[]; productlist.add(adBrixRmCommerceProductModel1); productlist.add(adBrixRmCommerceProductModel2); //set Addtional Event Value (Optional) Map<String, dynamic> eventproperties = <String, dynamic>{ 'deliveryadress': 'Seoul', 'remaindate': 7, 'mil': 25000.23, 'vip': true }; AdBrixRm.commerceReviewOrder( orderId: 'myOrderID', productList: productlist, discount: 5000.0, deliveryCharge: 2500.0, attr: eventproperties); }
주문 취소하기
사용자가 주문을 취소하거나 환불 처리한 이벤트를 분석합니다.
- order id : (필수) 주문 번호 (type : string)
- productList : (필수) AdBrixRmCommerceProductModel 로 구성된 상품 리스트 (type : List<AdBrixRmCommerceProductModel>
- penaltyCharge : (필수) 주문 취소 페널티 금액 (type: double)
- attr : (옵션) 이벤트 추가 정보 (type : Map<String, dynamic>)
void refund() { // Set Product // product info (Optional) Map<String, dynamic> productInfo = <String, dynamic>{ 'productbrand': 'AIR_Product', 'limited': 35000, 'currentsale': 3000, 'salesleft': 0.30, 'sale': false }; // Create Product AdBrixRmCommerceProductModel adBrixRmCommerceProductModel1 = AdBrixRmCommerceProductModel.create( productId: 'myproductId', productName: 'productNametest', price: 1000000.0, discount: 250000.0, quantity: 1, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1'), productAttr: productInfo); AdBrixRmCommerceProductModel adBrixRmCommerceProductModel2 = AdBrixRmCommerceProductModel.create( productId: 'productID 2', productName: 'productName2', price: 15000.0, discount: 2500.0, quantity: 3, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1')); // Make a List for ProductModel List<AdBrixRmCommerceProductModel> productlist = <AdBrixRmCommerceProductModel>[]; productlist.add(adBrixRmCommerceProductModel1); productlist.add(adBrixRmCommerceProductModel2); //set Addtional Event Value (Optional) Map<String, dynamic> eventproperties = <String, dynamic>{ 'deliveryadress': 'Seoul', 'remaindate': 7, 'mil': 25000.23, 'vip': true }; AdBrixRm.commerceRefund( orderId: 'myOrderID', productList: productlist, penaltyCharge: 5000.0, attr: eventproperties); }
상품 검색하기
사용자가 상품을 검색한 이벤트를 분석합니다.
- keyword : (필수) 검색 키워드 (type : string)
- productList : (필수) AdBrixRmCommerceProductModel 로 구성된 상품 리스트 (type : List<AdBrixRmCommerceProductModel>
- attr : (옵션) 이벤트 추가 정보 (type : Map<String, dynamic>)
void search() { // Set Product // product info (Optional) Map<String, dynamic> productInfo = <String, dynamic>{ 'productbrand': 'AIR_Product', 'limited': 35000, 'currentsale': 3000, 'salesleft': 0.30, 'sale': false }; // Create Product AdBrixRmCommerceProductModel adBrixRmCommerceProductModel1 = AdBrixRmCommerceProductModel.create( productId: 'myproductId', productName: 'productNametest', price: 1000000.0, discount: 250000.0, quantity: 1, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1'), productAttr: productInfo); AdBrixRmCommerceProductModel adBrixRmCommerceProductModel2 = AdBrixRmCommerceProductModel.create( productId: 'productID 2', productName: 'productName2', price: 15000.0, discount: 2500.0, quantity: 3, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1')); // Make a List for ProductModel List<AdBrixRmCommerceProductModel> productlist = <AdBrixRmCommerceProductModel>[]; productlist.add(adBrixRmCommerceProductModel1); productlist.add(adBrixRmCommerceProductModel2); //set Addtional Event Value (Optional) Map<String, dynamic> eventproperties = <String, dynamic>{ 'deliveryadress': 'Seoul', 'remaindate': 7, 'mil': 25000.23, 'vip': true }; AdBrixRm.commerceSearch( keyword: 'your_keyword', productList: productlist, attr: eventproperties); }
상품 공유하기
사용자가 상품정보를 공유한 이벤트를 분석합니다.
- sharingChannel : (필수) 사용자가 공유한 채널 (type : AdBrixSharingChannel)
- productModel : (필수) 상품정보 (type : AdBrixRmCommerceProductModel)
- attr : (옵션) 이벤트 추가 정보 (type : Map<String, dynamic>)
void share() { // Set Product // product info (Optional) Map<String, dynamic> productInfo = <String, dynamic>{ 'productbrand': 'AIR_Product', 'limited': 35000, 'currentsale': 3000, 'salesleft': 0.30, 'sale': false }; // Create Product AdBrixRmCommerceProductModel adBrixRmCommerceProductModel1 = AdBrixRmCommerceProductModel.create( productId: 'myproductId', productName: 'productNametest', price: 1000000.0, discount: 250000.0, quantity: 1, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1'), productAttr: productInfo); //set Addtional Event Value (Optional) Map<String, dynamic> eventproperties = <String, dynamic>{ 'deliveryadress': 'Seoul', 'remaindate': 7, 'mil': 25000.23, 'vip': true }; AdBrixRm.commerceShare( sharingChannel: AdBrixSharingChannel.KAKAOSTORY, productModel: adBrixRmCommerceProductModel1, attr: eventproperties); }
상품목록 조회하기
사용자가 상품 목록을 조회한 이벤트를 분석합니다.
- productList : (필수) AdBrixRmCommerceProductModel 로 구성된 상품 리스트 (type : List<AdBrixRmCommerceProductModel>
- attr : (옵션) 이벤트 추가 정보 (type : Map<String, dynamic>)
void listView() { // Set Product // product info (Optional) Map<String, dynamic> productInfo = <String, dynamic>{ 'productbrand': 'AIR_Product', 'limited': 35000, 'currentsale': 3000, 'salesleft': 0.30, 'sale': false }; // Create Product AdBrixRmCommerceProductModel adBrixRmCommerceProductModel1 = AdBrixRmCommerceProductModel.create( productId: 'myproductId', productName: 'productNametest', price: 1000000.0, discount: 250000.0, quantity: 1, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1'), productAttr: productInfo); AdBrixRmCommerceProductModel adBrixRmCommerceProductModel2 = AdBrixRmCommerceProductModel.create( productId: 'productID 2', productName: 'productName2', price: 15000.0, discount: 2500.0, quantity: 3, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1')); // Make a List for ProductModel List<AdBrixRmCommerceProductModel> productlist = <AdBrixRmCommerceProductModel>[]; productlist.add(adBrixRmCommerceProductModel1); productlist.add(adBrixRmCommerceProductModel2); //set Addtional Event Value (Optional) Map<String, dynamic> eventproperties = <String, dynamic>{ 'deliveryadress': 'Seoul', 'remaindate': 7, 'mil': 25000.23, 'vip': true }; AdBrixRm.commerceListView( productList: productlist, attr: eventproperties); }
장바구니 조회하기
사용자가 장바구니를 조회한 이벤트를 분석합니다.
- productList : (필수) AdBrixRmCommerceProductModel 로 구성된 상품 리스트 (type : List<AdBrixRmCommerceProductModel>
- attr : (옵션) 이벤트 추가 정보 (type : Map<String, dynamic>)
void cartView() { // Set Product // product info (Optional) Map<String, dynamic> productInfo = <String, dynamic>{ 'productbrand': 'AIR_Product', 'limited': 35000, 'currentsale': 3000, 'salesleft': 0.30, 'sale': false }; // Create Product AdBrixRmCommerceProductModel adBrixRmCommerceProductModel1 = AdBrixRmCommerceProductModel.create( productId: 'myproductId', productName: 'productNametest', price: 1000000.0, discount: 250000.0, quantity: 1, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1'), productAttr: productInfo); AdBrixRmCommerceProductModel adBrixRmCommerceProductModel2 = AdBrixRmCommerceProductModel.create( productId: 'productID 2', productName: 'productName2', price: 15000.0, discount: 2500.0, quantity: 3, currency: AdBrixCurrency.KR_KRW, category: AdBrixRmCommerceCategoryModel.create(category1: 'categoryTest1')); // Make a List for ProductModel List<AdBrixRmCommerceProductModel> productlist = <AdBrixRmCommerceProductModel>[]; productlist.add(adBrixRmCommerceProductModel1); productlist.add(adBrixRmCommerceProductModel2); //set Addtional Event Value (Optional) Map<String, dynamic> eventproperties = <String, dynamic>{ 'deliveryadress': 'Seoul', 'remaindate': 7, 'mil': 25000.23, 'vip': true }; AdBrixRm.commerceCartView( productList: productlist, attr: eventproperties); }
결제 정보 입력하기
사용자가 결제 정보를 입력한 이벤트를 분석합니다.
- attr : (옵션) 이벤트 추가 정보 (type : Map<String, dynamic>)
void paymentInfoAdd() { //set Addtional Event Value (Optional) Map<String, dynamic> eventproperties = <String, dynamic>{ 'local': 'Seoul', 'age': 36, 'height': 180.50, }; AdBrixRm.commercePaymentInfoAdd(attr: eventproperties); }
게임 이벤트 분석
앱에서 발생하는 게임과 관련된 이벤트(튜토리얼, 스테이지 등)를 분석합니다.
디파이너리(애드브릭스)에서 제공하는 게임 이벤트 종류는 다음과 같습니다.
- 튜토리얼 완료
- 캐릭터 생성
- 스테이지 완료
- 레벨 달성
튜토리얼 완료
앱에서 발생한 튜토리얼 완료 이벤트를 분석합니다.
- isSkip : (필수) 건너뛰기(skip)를 통한 완료인지 여부 (type : bool)
- attr : (옵션) 이벤트 추가 정보 (type : Map<String, dynamic>)
void tutorialCompleted() { // set Addtional Event Value (Optional) Map<String, dynamic> eventproperties = <String, dynamic>{ 'local': 'Seoul', 'age': 36, 'height': 180.50, }; AdBrixRm.gameTutorialComplete(isSkip: true, attr: eventproperties); }
캐릭터 생성
앱에서 발생한 캐릭터 생성 이벤트를 분석합니다.
- attr : (옵션) 이벤트 추가 정보 (type : Map<String, dynamic>)
void characterCreated() { // set Addtional Event Value (Optional) Map<String, dynamic> eventproperties = <String, dynamic>{ 'local': 'Seoul', 'caractername': 'myCharacterName', 'age': 36, 'height': 180.50, }; AdBrixRm.gameCharacterCreated(attr: eventproperties); }
스테이지 완료
앱에서 발생한 스테이지 완료 이벤트를 분석합니다.
- stageName : (필수) 완료한 스테이지 이름 (type : string)
- attr : (옵션) 이벤트 추가 정보 (type : Map<String, dynamic>)
void stageCleared() { // set Addtional Event Value (Optional) Map<String, dynamic> eventproperties = <String, dynamic>{ 'local': 'Seoul', 'age': 36, 'height': 180.50, }; AdBrixRm.gameStageCleared(stageName: '11-5', attr: eventproperties); }
레벨 달성
앱에서 발생한 레벨 달성 이벤트를 분석합니다.
- levelAchieved : (필수) 달성한 레벨 (type: int)
- attr : (옵션) 이벤트 추가 정보 (type : Map<String, dynamic>)
void levelAchieved() { // set Addtional Event Value (Optional) Map<String, dynamic> eventproperties = <String, dynamic>{ 'local': 'Seoul', 'age': 36, 'height': 180.50, }; AdBrixRm.gameLevelAchieved(levelAchieved: 33, attr: eventproperties); }
삭제된 API 목록
Flutter
- setPushLocalCallbackListener
- setDidFetchInAppMessageListener
- setDidPrintLogListener
- flushAllEvents
- deleteUserDataAndStopSDK
- restartSDK
- getSdkVersion
- fetchActionHistoryByUserId
- fetchActionHistoryByAdid
- getActionHistory
- getAllActionHistory
- deleteActionHistory
- deleteAllActionHistoryByUserId
- clearSyncedActionHistoryInLocalDB
- setInAppMessageFetchMode
- setInAppMessageToken
- setBigTextClientPushEvent
- setBigPictureClientPushEvent
- registeriOSLocalPushNotification
- cancelLocalPushNotification
- getPushEventList
- setPushIconStyle
- setNotificationOption
iOS
- localPushOpen
- setDidFetchInAppMessageListener
AOS
- setLocalPushMessageListener
- setDfnInAppMessageAutoFetchListener
- setLogListener