디파이너리(애드브릭스) 연동하기 [Flutter]
팔로우
[[인용:위험:작게]] 2021.3.8 Null Safty 가 적용되었습니다.
jcenter 이슈
현재 adbrixrm_flutter 내 build.gradle 파일 내 jcenter 설정 값으로 테스트 빌드 및 App Bundle 빌드가 되지 않는 현상이 있습니다. 현재 해당 내용은 패치 중이며 SDK 업데이트 전까지 아래의 내용으로 적용하여 빌드를 해 주시길 부탁드립니다.
1. Flutter 프로젝트 내 Android 폴더를 Android Studio 로 열기
2. Android Studio 로 오픈 후 Gradle Scripts 항목에서 build.gradle (Module:android.adbrixrm_flutter) 파일 열기.
3, 아래 표시된 jcenter() 내역 삭제
4. 최상단 buildscript 항목에 mavenCentral() 항목 추가
SDK 설치 및 초기화
Flutter 프로젝트에 SDK 설치 및 초기화 방법에 대한 안내 가이드 입니다.
SDK 설치
Flutter 프로젝트 내 pubspec.yaml 파일에 아래와 같이 추가하고 pub get 명령어로 SDK를 다운로드 합니다.
dependencies: adbrixrm_flutter: ^1.5.0
Android 추가 설정
Android 관련 추가 설정에 대한 가이드입니다. 이 부분까지 완료하여야 Android 환경에서 SDK가 정상적으로 동작합니다.
build.gradle 설정
Flutter 프로젝트 -> Android -> app 폴더에 있는 build.gradle 파일에 아래와 같이 추가합니다.
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를 반드시 추가합니다.
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 관련 추가 사항에 대한 가이드입니다. 이 부분을 모두 완료하여야 iOS에서 정상적으로 SDK가 동작합니다.
필수 프레임워크 추가
디파이너리(애드브릭스) SDK가 동작하는데 필요한 iAd 프레임워크와 AdServices 프레임워크를 추가합니다.
[General > Frameworks, Libraries, and Embedded Content]로 이동하여 (+) 버튼을 클릭합니다. Apple Search Ads 분석에 필요한 "iAd.framework"와 "AdServices.frameworks" 라이브러리를 프로젝트에 반드시 추가 해야 합니다.
iOS 14.2를 타켓으로 하시는 경우 [Build Phases > Link Binary With Libraries]로 이동해서, 반드시 AdServices.framework의 Status를 Optional로 설정해주셔야 합니다.
Swift Library 설정
디파이너리(애드브릭스) SDK 는 Swift로 작성되었기 때문에, Xcode 프로젝트에서 다음과 같은 설정을 해주어야 합니다.
[Build Settings > Always Embed Swift Standard Libraries]를 'yes'로 설정합니다.
SDK 초기화
Flutter 프로젝트 내 main.dart 내 최초로 호출하는 Widget 에 initState를 추가하고 아래와 같이 추가합니다.
import 'package:adbrixrm_flutter/adbrixrm.dart'; . . . class _MyAppState extends State <MyApp> { bool _getIdfa = false; @override void initState() { super.initState(); // delayTime added for iOS AppTrackingTransparency popup for get IDFA // delayTime only works on iOS AdBrixRm.sdkInit(appKey: 'your_app_key', secretKey: 'your_secret_key', delayTime :3 ); //get AppTrackingTransparency result and set IDFA if (_getIdfa == true) { AdBrixRm.startGettingIDFA(); } else { AdBrixRm.stopGettingIDFA(); } } }
[[인용:안내:보통]]앱키 & 시크릿키 확인
_ 앱키와 시크릿키는 디파이너리(애드브릭스)가 앱을 구분하기 위한 식별 값입니다.
_ SDK 연동을 위해서 반드시 필요한 값으로, 디파이너리(애드브릭스) 콘솔에서 앱 등록 후 확인할 수 있습니다.
앱키, 시크릿키 확인 방법 / 디파이너리(애드브릭스) 콘솔 바로가기
[[인용:안내:보통]] 축하합니다!!!
디파이너리(애드브릭스) 이용을 위한 기본적인 연동이 완료되었습니다.
이용할 수 있는 기능은 다음과 같습니다.
1. DAU, MAU, 일별 리텐션 등의 지표를 확인할 수 있는 리포팅
2. nCPI 와 같은 앱 유입 캠페인
SDK 추가 설정
이벤트 업로드 주기 : 누적 이벤트 개수 기준
설정된 개수만큼 이벤트가 누적되었을 때에 디파이너리(애드브릭스) 서버로 이벤트를 업로드하도록 설정합니다.
디파이너리(애드브릭스) SDK에 사전 정의된 아래의 값을 이용하여 설정합니다.
- AdBrixRM.AdBrixEventUploadCountInterval.MIN : 10건
- AdBrixRM.AdBrixEventUploadCountInterval.NORMAL : 30건
- AdBrixRM.AdBrixEventUploadCountInterval.MAX : 60건
AdBrixRm.setEventUploadCountInterval( interval: AdBrixEventUploadCountInterval.MIN);
이벤트 업로드 주기 : 시간 기준
설정된 시간이 지나면 디파이너리(애드브릭스) 서버로 이벤트를 업로드하도록 설정합니다.
디파이너리(애드브릭스) SDK에 사전 정의된 아래의 값을 이용하여 설정합니다.
- AdBrixRM.AdBrixEventUploadTimeInteval.MIN : 30초
- AdBrixRM.AdBrixEventUploadTimeInteval.NORMAL :60초
- AdBrixRM.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>
MainActivity.java 에 아래와 같이 코드를 추가합니다.
public class MainActivity extends FlutterActivity { @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); onNewIntent(this.getIntent()); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); } }
iOS 설정
[General > Target > Info > URL Types] 로 이동하여 다음과 같이 URL Scheme 을 설정합니다.
AppDelegate.swift 에 application(_ app: open url: options: ) delegate를 추가하고 다음과 같이 트래킹 코드를 호출합니다.
import AdBrixRmKit . . . func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { // AdBrixRM 인스턴스 생성 let adBrix = AdBrixRM.getInstance // 딥링크 오픈 트래킹 코드 호출 adBrix.deepLinkOpen(url: url) return false }
Flutter
각 플랫폼 별 설정이 완료되면 main.dart 에 아래와 같이 추가합니다.
import 'adbrixrm_flutter/adbrixrm.dart' . . . // Use WidgetsBindingObserver to use didChangeAppLifecycleState. class _MyAppState extends State <MyApp> with WidgetsBindingObserver { @override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); AdBrixRm.sdkInit(appKey: 'your_app_key', secretKey: 'your_secret_key'); // deeplink data may not come as soon as app open. So we recommend give some dely. // It will return null when sdk don't have deeplink value to return Timer(Duration(seconds: 5),() { // Only Android Needed on initState if (Platform.isAndroid) { String? deeplink = await AdBrixRm.adbrixDeeplink; } }); } // get Deeplink data when app is on Resume // It will return null when sdk don't have deeplink value to return @override void didChangeAppLifecycleState(AppLifecycleState currentState) { if (currentState == AppLifecycleState.resumed) { String? deeplink = await AdBrixRm.adbrixDeeplink; } } }
[[인용:위험:작게]] AdBrixRm.adbrixDeeplink 의 데이터는 오직 디파이너리(애드브릭스) 트래킹 링크로 딥링크 오픈 된 경우에만 Deeplink 값이 전달 됩니다.
디퍼드 딥링크 이벤트 연동
디퍼드 딥링크 (지연된 딥링크) 연동을 위해선 main.dart 에 아래와 같이 추가합니다.
import 'adbrixrm_flutter/adbrixrm.dart' . . . class _MyAppState extends State with WidgetsBindingObserver { String _deeferredDeeplink; @override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); AdBrixRm.sdkInit(appKey: 'your_app_key', secretKey: 'your_secret_key'); // deferredDeeplink data may not come as soon as app open. So we recommend give some dely. // It will return null when sdk don't have deferreddeeplink value to return Timer(Duration(seconds: 5),() { String? deferredDeeplink = await AdBrixRm.adbrixDeferredDeeplink; }); } }
[[인용:위험:작게]] AdBrixRm.adbrixDeferredDeeplink 의 데이터는 오직 디파이너리(애드브릭스) 트래킹 링크를 통해 앱 설치 후 실행한 경우에 대해서만 DeferredDeeplink 값을 전달합니다.
유저 분석
로그인 / 로그아웃 이벤트
앱 유저의 로그인 / 로그아웃 이벤트를 분석합니다.
로그인이 성공했을 경우 유저를 구분하는 식별값을 아래 샘플코드와 같이 전달합니다.
void login() { if(loginSuccess) { AdBrixRm.login(userId:'myUserID'); } else { AdBrixRm.logout(); } }
* 전달되는 유저아이디에 개인정보가 포함되지 않도록 주의해주세요. 만약 이메일, 전화번호 등의 개인정보가 포함되는 경우에는 적절한 암호화(BASE64, MD5, SHA1 등) 처리를 하시는 것을 권장합니다.
유저 정보
사용자의 나이, 성별 등 기타 정보에 대한 분석을 진행합니다.
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) 은 위와 같은 규칙이 적용됩니다.
CI 정보
사용자 개인을 식별할 수 있는 정보 (Customer Identifier)를 설정합니다. 해당 정보는 사용자 분석 및 리포트에는 사용되지 않으며 Kakao 푸시등 Dfinery 에서 사용할 수 있는 기능을 목적으로만 사용됩니다.
void ciPropertiesUpdate() { // Set KakaoID AdBrixRm.setKakaoId(kakaoId: 'myKakaoId123'); //Addtional UserInfo Map<String, dynamic> ciProperty = <String, dynamic>{ 'custom_info_1' : 'my_Custom_Ci_info', 'custom_info_2': 500000, 'custom_info_3' : true, 'custom_info_4': 150.50, }; AdBrixRm.setCiProperties(properties: ciProperty); }
[[인용:위험:보통]] CI 설정 시 유의 사항
1. 유저 정보와 CI를 합해 100개 이상의 정보는 처리되지 않습니다. (앱 설정으로 변경 가능)
2. Key 값의 데이터 타입은 string이며 50자를 넘을 수 없고, 영문 소문자, 숫자를 제외한 나머지 문자는 사용할 수 없습니다.
3. Value 값의 데이터 길이는 byte기준으로 1024byte 를 넘을 수 없습니다. 또한 Int, Long, Boolean, String 타입만 사용할 수 있습니다.
일반 이벤트
앱에서 발생하는 이벤트 중, 공통적으로 발생하는 이벤트를 분석합니다.
디파이너리(애드브릭스) 에서 제공하는 공통 이벤트 종류는 다음과 같습니다.
- 회원가입
- 앱 업데이트
- 사용자 초대
- 크레딧 사용
- 결제하기
* 디파이너리(애드브릭스)에서 광고채널 별 매출을 보고자 할 때에는 '결제하기' 연동을 반드시 진행해야 합니다.
회원가입
앱에서 발생한 회원가입 이벤트를 분석합니다.
- 회원가입 채널: (필수) 회원이 가입한 채널 경로 (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 에 대해서도 동일한 규칙이 적용 됩니다.
commPurchase 이벤트
- 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.events(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); }