애드브릭스 Android 연동하기 [Cocos2d-x]
팔로우
SDK 설치
기존 프로젝트에서 시작
기존 cocos2d-x 프로젝트에서 연동을 진행하시는 경우 다음과 같이 2가지 셋팅이 필요합니다.
1. SDK 파일 복사
아래 스크린샷과 같이 SDK 및 플러그인 관련 파일들을 안드로이드 스튜디오 프로젝트의 [libs] 에 Drag&Drop 하여 라이브러리로 추가합니다.
아래 스크린샷과 같이 해당 파일들을 기존 cocos2d-x 프로젝트의 [ Classes ] 디렉토리로 복사합니다.
2. cocos2d-x 플러그인 관련 소스 복사
AOS의 경우 cocos2d-x 관련 플러그인&프로토콜 소스를 함께 사용하고 있습니다. 아래와 같은 경로에 [ plugin - protocols ] 디렉토리 전체를 기존 cocos2d-x 프로젝트의 동일한 디렉토리 위치에 복사합니다.
3. 프레임워크 관련 path 설정
1, 2번 항목에서 복사한 SDK 및 플러그인 파일들의 디렉토리 경로들을 기존 프로젝트의 Android.mk 파일에 설정합니다.
*. 본 Path 설정시 상대경로가 정상적으로 설정되지 않으면 프로젝트 빌드가 불가능합니다.
[ Android.mk 파일의 LOCAL_SRC_FILES, LOCAL_C_INCLUDES 항목 설정 ]
샘플 프로젝트에서 시작
AdBrix Cocos2d-x 샘플프로젝트에는 SDK를 탑재한 샘플코드를 함께 제공하고 있습니다.
샘플 프로젝트는 아래 스크린샷과 같은 구조로 구성되어 있습니다.
*. HelloWorldScene.cpp, HelloWorldScene.h 파일은 프로젝트 상황에 맞게 바꾸시면 됩니다.
SDK 초기화
AdBrix SDK를 정상적으로 이용하기 위해서는 아래의 필수 초기화 작업을 진행해야 합니다.
초기화 과정은 안드로이드의 Application 클래스를 상속받은 커스텀 어플리케이션 클래스를 생성하여 진행해야 합니다.
- 플러그인 initialize
- 앱키 & 시크릿키 설정
- 로그 레벨 설정
- 이벤트 업로드 주기 설정
- 딥링크 설정
* 초기화 작업은 Application 클래스에서 진행해야하며, 이외의 곳에서 진행했을 때에는 예상하지 못한 문제가 발생할 수 있습니다.
플러그인 initialize
다음과 같이 initialize를 진행합니다.
public class MyApplicationClass extends Application { @Override public void onCreate() { super.onCreate(); if (Build.VERSION.SDK_INT >= 14) { registerActivityLifecycleCallbacks(new AbxActivityLifecycleCallbacks()); } } }
앱키 & 시크릿키 설정
AdBrix 홈페이지에서 발급받은 앱키와 시크릿키를 등록합니다.
package org.cocos2dx.cpp; import android.app.Application; import android.os.Build; import com.igaworks.v2.core.AdBrixRm; import com.igaworks.v2.core.application.AbxActivityHelper; import com.igaworks.v2.core.application.AbxActivityLifecycleCallbacks; public class MainApplication extends Application { @Override public void onCreate() { super.onCreate(); AbxActivityHelper.initializeSdk(getApplicationContext(), "AppKey", "SecretKey"); } }
* AdBrix Classic 과 AdBrix Remaster 의 앱키는 서로 다릅니다.
* AdBrix Remaster 앱키&시크릿키는 android, ios 플랫폼 간 구분이 없이 공용으로 사용합니다.
로그 레벨 설정
AdBrix SDK의 동작과 관련한 로그의 출력 수준을 설정합니다.
로그레벨은 1단계인 미출력을 포함하여 총 6단계로 구성되며, 2~6단계에서는 상위 레벨이 하위 레벨의 로그를 모두 포함하도록 구성되어 있습니다.
- AdBrixRM.AdBrixLogLevel.NONE : 로그를 출력하지 않습니다.
- AdBrixRM.AdBrixLogLevel.TRACE : 일반적인 내용이 담긴 개발 수준의 로그를 출력합니다.
- AdBrixRM.AdBrixLogLevel.DEBUG : TRACE를 포함한 디버깅용으로 작성한 개발 수준의 로그를 출력합니다.
- AdBrixRM.AdBrixLogLevel.INFO : TRACE, DEBUG를 포함한 데이터 저장, 로드, 전송 등 중요 수준의 로그를 출력합니다.
- AdBrixRM.AdBrixLogLevel.WARNING : TRACE, DEBUG, INFO를 Exception등의 치명적 오류가 아니나, 정상적 데이터 핸들링을 할 수 없는 위험이 있는 상태에 대한 로그를 출력합니다.
- AdBrixRM.AdBrixLogLevel.ERROR : TRACE, DEBUG, INFO, WARNING을 모두 포함한 Exception등의 치명적 오류로그까지 출력합니다.
package org.cocos2dx.cpp; import android.app.Application; import android.os.Build; import com.igaworks.v2.core.AdBrixRm; import com.igaworks.v2.core.application.AbxActivityHelper; import com.igaworks.v2.core.application.AbxActivityLifecycleCallbacks; public class MainApplication extends Application { @Override public void onCreate() { super.onCreate(); AdBrixRm.setLogLevel(AdBrixRm.AdBrixLogLevel.ERROR); } }
이벤트 업로드 주기 설정
AdBrix SDK 에 전달된 이벤트를 AdBrix 서버로 전송하는 기준을 설정할 수 있습니다.
이벤트 업로드 주기를 누적 이벤트 개수와 시간으로 설정할 수 있습니다.
* 두 가지 기준 중 먼저 충족되는 기준에 따라서 이벤트가 업로드 됩니다.
누적 이벤트 개수 기준
설정된 개수만큼 이벤트가 누적되었을 때에 AdBrix 서버로 이벤트를 업로드하도록 설정합니다.
AdBrix SDK에 사전 정의된 아래의 값을 이용하여 설정합니다.
- AdBrixRM.AdBrixEventUploadCountInterval.MIN : 10건
- AdBrixRM.AdBrixEventUploadCountInterval.NORMAL : 30건
- AdBrixRM.AdBrixEventUploadCountInterval.MAX : 60건
package org.cocos2dx.cpp; import android.app.Application; import android.os.Build; import com.igaworks.v2.core.AdBrixRm; import com.igaworks.v2.core.application.AbxActivityHelper; import com.igaworks.v2.core.application.AbxActivityLifecycleCallbacks; public class MainApplication extends Application { @Override public void onCreate() { super.onCreate(); AdBrixRm.setEventUploadCountInterval(AdBrixRm.AdBrixEventUploadCountInterval.MIN); } }
시간 기준
설정된 시간이 지나면 AdBrix 서버로 이벤트를 업로드하도록 설정합니다.
AdBrix SDK에 사전 정의된 아래의 값을 이용하여 설정합니다.
- AdBrixRM.AdBrixEventUploadTimeInteval.MIN : 30초
- AdBrixRM.AdBrixEventUploadTimeInteval.NORMAL :60초
- AdBrixRM.AdBrixEventUploadTimeInteval.MAX :120초
package org.cocos2dx.cpp; import android.app.Application; import android.os.Build; import com.igaworks.v2.core.AdBrixRm; import com.igaworks.v2.core.application.AbxActivityHelper; import com.igaworks.v2.core.application.AbxActivityLifecycleCallbacks; public class MainApplication extends Application { @Override public void onCreate() { super.onCreate(); AdBrixRm.setEventUploadTimeInterval(AdBrixRm.AdBrixEventUploadTimeInterval.MIN); } }
SDK 초기화 전체 예시
위 항목을 모두 연동했을 때의 Application 클래스의 연동 코드는 다음과 같습니다.
package org.cocos2dx.cpp; import android.app.Application; import android.os.Build; import com.igaworks.v2.core.AdBrixRm; import com.igaworks.v2.core.application.AbxActivityHelper; import com.igaworks.v2.core.application.AbxActivityLifecycleCallbacks; public class MainApplication extends Application { @Override public void onCreate() { super.onCreate(); //app key AbxActivityHelper.initializeSdk(getApplicationContext(), "AppKey", "SecretKey"); //location AdBrixRm.setEnableLocationListening(true); //init if (Build.VERSION.SDK_INT >= 14) { registerActivityLifecycleCallbacks(new AbxActivityLifecycleCallbacks()); } //log level AdBrixRm.setLogLevel(AdBrixRm.AdBrixLogLevel.ERROR); //event interval AdBrixRm.setEventUploadCountInterval(AdBrixRm.AdBrixEventUploadCountInterval.MIN); AdBrixRm.setEventUploadTimeInterval(AdBrixRm.AdBrixEventUploadTimeInterval.MIN); } }
GDPR 설정
GDPR 요청 이벤트를 이용하여 사용자 요청에 대해 데이터 주체와 연관된 모든 개인 데이터를 삭제할 수 있습니다.
본 이벤트 호출시, SDK 동작은 정지되며 모든 이벤트 저장, 전송 등이 불가합니다.
본 기능은 사용자가 앱을 삭제 후, 재설치하기 전에는 되돌릴 수 없습니다.
void HelloWorld::menuGdprForgetMeCallback() { PluginAdBrixAOS::gdprForgetMe(); }
이벤트 분석
앱에서 발생하는 인-앱 이벤트(in-app event)를 분석하여 리포트를 구성하고 포스트백을 전송할 수 있습니다.
이벤트 분석을 위해서는 이벤트가 발생하는 시점에 이벤트 분석 코드를 삽입하고 이벤트 식별값을 전송하여야 합니다.
AdBrix 는 크게 3가지 분류의 분석을 제공합니다.
- 유저 분석
- 로그인/로그아웃 이벤트
- 유저 정보
- 커스텀 분석
- 딥링크 분석
- 공통(일반) 분석
- 회원가입
- 앱 업데이트
- 사용자 초대
- 크레딧 사용
- 결제하기
- 게임 분석
- 튜토리얼 완료
- 케릭터 생성
- 스테이지 완료
- 레벨 달성
유저 분석
로그인/로그아웃 이벤트
사용자의 로그인/로그아웃 이벤트를 분석합니다.
로그인이 성공하였을 때, 유저를 구분하는 식별값(user id)을 다음과 같이 전달합니다.
로그아웃이 성공하였을 때, "" 와 같이 빈 문자열을 전달하여 유저 로그인 데이터를 초기화합니다.
void HelloWorld::menuCallback() { //login PluginAdBrixAOS::login("AdBrixRemasterAOSTest"); //logout PluginAdBrixAOS::login(""); }
* userId 로 전달되는 유저 아이디에 개인정보가 포함되지 않도록 주의해주세요. 만약 이메일, 전화번호 등의 개인정보가 포함되는 경우에는 적절한 암호화(BASE64, MD5, SHA1 등) 처리를 하시는 것을 권장합니다.
유저 정보
유저의 정보에 대해 분석할 수 있습니다.
void HelloWorld::menuCallback() { PluginAdBrixAOS::setUserProperties("nickname","cocos_adbrixer"); PluginAdBrixAOS::setAge(20); PluginAdBrixAOS::setGender(1); }
* 유저 정보 사용에 대한 동의에 대한 책임은 AdBrix 가 아닌 앱 개발 및 운영 주체입니다.
* 기타유저정보로 전달되는 NSDictionary 의 제약사항
- 100개 이상의 정보는 처리되지 않습니다.
- 키 값의 데이터 타입은 String이며, 256자를 넘을 수 없습니다.
- 밸류 값의 데이터 길이는 byte기준으로 1024byte를 넘을 수 없습니다.
위치 정보
사용자의 위치 정보를 얻을 수 있는 경우, 이를 분석할 수 있습니다.
void sampleFunction() { // 위도 경도 정보 업데이트 AdBrixRm.setLocationWithLatitude(39.00, 121.00); }
* 위치 정보 사용에 대한 동의에 대한 책임은 AdBrix 가 아닌 앱 개발 및 운영 주체입니다.
커스텀 분석
앱 내 사용자의 일반적인 모든 이벤트를 분석합니다. (구매 이벤트 제외)
앱 내에서 이벤트(string)를 통해 액션을 자유롭게 분석할 수 있습니다.
void HelloWorld::menuCallback() { //parameter 생성 Json::Value param; param["test_key"] = "test_key01"; param["test_value"] = "test_value01"; Json::StreamWriterBuilder builder; std::string jsonStr = Json::writeString(builder, param); //json string 으로 전달 PluginAdBrixAOS::event("testCocosEvt", jsonStr); }
딥링크 분석
딥링크를 통한 앱 오픈 이벤트를 분석합니다.
딥링크를 통해서 오픈되는 모든 액티비티에 다음과 같이 설정합니다.
public class DeeplinkOpenedActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); onNewIntent(DeeplinkOpenedActivity.this.getIntent()); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); // Do something with Deeplink Intent Data setIntent(intent); AdBrixRm.deeplinkEvent(DeeplinkOpenedActivity.this); } }
* onNewIntent(), setIntent(), deeplinkEvent() 함수는 모두 위 예시와 같은 순서로 설정해주셔야 합니다.
딥링크를 통한 앱 오픈을 처리하기 위해서는 앱에 딥링크 설정이 되어 있어야 합니다.
[AndroidManifest.xml > manifest > application] 에 등록된 액티비티에 딥링크 설정을 다음과 같이 진행합니다.
<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>
* 딥링크로 오픈되는 액티비티의 LaunchMode가 Normal 인 경우에는 딥링크 트래킹이 되지 않습니다.
SingleTask 등의 다른 LaunchMode로 변경을 해주시거나 AdbrixDeeplinkGateway 액티비티를 사용하셔야 합니다. [AdBrixDeeplinkGateway 액티비티 설정 안내]
*. 샘플 프로젝트의 경우 아래 스크린샷과 같은 위치에 구성되어 있습니다.
공통(일반)분석
앱에서 발생하는 이벤트 중, 공통적으로 발생하는 이벤트를 분석합니다.
AdBrix 에서 제공하는 공통 이벤트 종류는 다음과 같습니다.
- 회원가입
- 앱 업데이트
- 사용자 초대
- 크레딧 사용
- 결제하기
* AdBrix 에서 광고채널 별 매출을 보고자 할 때에는 '결제하기' 연동을 반드시 진행해야 합니다.
회원가입
앱에서 발생한 회원가입 이벤트를 분석합니다.
void HelloWorld::menuCallback() { //parameter 생성 Json::Value param; param["with_userid"] = "n"; Json::StreamWriterBuilder builder; std::string jsonStr = Json::writeString(builder, param); PluginAdBrixAOS::commonSignUp (AdBrixSignUpKakaoChannel, jsonStr); }
앱 업데이트
앱에서 발생한 앱 업데이트 이벤트를 분석합니다.
void HelloWorld::menuCallback() { //parameter 생성 Json::Value param; param["market"] = "google_play"; Json::StreamWriterBuilder builder; std::string jsonStr = Json::writeString(builder, param); PluginAdBrixAOS::commonAppUpdate ("1.0", "1.1", jsonStr); }
사용자 초대
앱에서 발생한 앱 초대 이벤트를 분석합니다.
void HelloWorld::menuCallback() { //parameter 생성 Json::Value param; param["email_auth"] = "y"; Json::StreamWriterBuilder builder; std::string jsonStr = Json::writeString(builder, param); PluginAdBrixAOS::commonInvite (AdBrixInviteGoogleChannel, jsonStr); }
크레딧 사용
앱내 현금성 화폐 사용에 대한 이벤트를 분석합니다.
void HelloWorld::menuCallback() { //parameter 생성 Json::Value param; param["card"] = "samsung"; Json::StreamWriterBuilder builder; std::string jsonStr = Json::writeString(builder, param); PluginAdBrixAOS::commonUseCredit (jsonStr); }
결제하기
앱에서 발생한 결제(구매) 이벤트를 분석합니다.
다음과 같은 상품 맟 주문에 대한 정보를 array 형태로 구성하여 전달합니다.
- order id : (필수) 주문번호
- product id : (필수) 상품번호
- product name : (필수) 상품이름
- price : (필수) 상품단가
- quantity : (필수) 구매수량
- discount : (옵션) 할인금액
- currency string : (옵션) 카테고리 정보
- category : (옵션) 구매 화폐 단위
- product attr map : (옵션) 상품 상세 옵션
- delivery charge : (옵션) 배송비
- payment method : (옵션) 결제 방법
//단품 void HelloWorld::menuCallback() { std::map<std::string, std::string> pMap; pMap["productattr_key01"] = "productattr_value01"; pMap["productattr_key02"] = "productattr_value02"; //set the extra value to the AdBrixCommerceProductAttrModel AdBrixCommerceProductAttrModel *attr = AdBrixCommerceProductAttrModel::create(pMap); AdBrixCommerceProductCategoryModel *cat = AdBrixCommerceProductCategoryModel::create("cat1", "cat2"); Json::Value pProductModel = AdBrixCommerceProductModel::create("cocos2d_x_PRODUCT_ID", "cocos2d_x_PRODUCT_NAME", 1000.0, 500.0, 1, AdBrixCurrencyKRW, cat, attr); Json::StreamWriterBuilder builder; std::string pProductModelJson = Json::writeString(builder, pProductModel); Json::Value pOrderAttrMap; pOrderAttrMap["orderattr_key01"] = "orderattr_value01"; Json::StreamWriterBuilder builder; std::string orderAttrStr = Json::writeString(builder, pOrderAttrMap); PluginAdBrixAOS::commonPurchase("cocos2d_x_PRODUCT_ID", pProductModelJson.c_str(), 1000.00, 3500.00, AdBrixPaymentCreditCard, orderAttrStr); } //복품 void HelloWorld::menuCallback() { std::map<std::string, std::string> pMap; pMap["productattr_key01"] = "productattr_value01"; pMap["productattr_key02"] = "productattr_value02"; //set the extra value to the AdBrixCommerceProductAttrModel AdBrixCommerceProductAttrModel *attr = AdBrixCommerceProductAttrModel::create(pMap); AdBrixCommerceProductCategoryModel *cat = AdBrixCommerceProductCategoryModel::create("cat1", "cat2"); //make product Json::Value pProductModel1 = AdBrixCommerceProductModel::create("cocos2d_x_PRODUCT_ID1", "cocos2d_x_PRODUCT_NAME1", 1000.0, 500.0, 1, AdBrixCurrencyKRW, cat, attr); Json::Value pProductModel2 = AdBrixCommerceProductModel::create("cocos2d_x_PRODUCT_ID2", "cocos2d_x_PRODUCT_NAME2", 2000.0, 500.0, 1, AdBrixCurrencyKRW, cat, attr); Json::Value pProductModel3 = AdBrixCommerceProductModel::create("cocos2d_x_PRODUCT_ID3", "cocos2d_x_PRODUCT_NAME3", 3000.0, 500.0, 1, AdBrixCurrencyKRW, cat, attr); //generate product array Json::Value pProductArray; pProductArray.append(pProductModel1); pProductArray.append(pProductModel2); pProductArray.append(pProductModel3); Json::StreamWriterBuilder builder; std::string pProductArrayStr = Json::writeString(builder, pProductArray); Json::Value pOrderAttrMap; pOrderAttrMap["orderattr_key01"] = "orderattr_value01"; Json::StreamWriterBuilder attrBuilder; std::string orderAttrStr = Json::writeString(attrBuilder, pOrderAttrMap); PluginAdBrixAOS::commonPurchaseBulk("cocos2d_x_PRODUCT_ID", pProductArrayStr.c_str(), 1000.00, 3500.00, AdBrixPaymentCreditCard, orderAttrStr); }
게임 이벤트 분석
앱에서 발생하는 게임과 관련된 이벤트(튜토리얼, 스테이지 등)를 분석합니다.
AdBrix 에서 제공하는 게임 이벤트 종류는 다음과 같습니다.
- 튜토리얼 완료
- 캐릭터 생성
- 스테이지 완료
- 레벨 달성
튜토리얼 완료
앱에서 발생한 튜토리얼 완료 이벤트를 분석합니다.
다음과 같은 튜토리얼 완료 정보를 구성하여 전달합니다.
- (필수) 건너뛰기(skip)를 통한 완료인지 여부
void HelloWorld::menuCallback() { Json::Value param; param["rewards"] = "y"; param["rewards_gold"] = "100"; Json::StreamWriterBuilder builder; std::string jsonStr = Json::writeString(builder, param); PluginAdBrixAOS::gameTutorialCompleted (false, jsonStr); }
캐릭터 생성
앱에서 발생한 캐릭터 생성 이벤트를 분석합니다.
void HelloWorld::menuCallback() { Json::Value param; param["c_name"] = "freddy"; Json::StreamWriterBuilder builder; std::string jsonStr = Json::writeString(builder, param); PluginAdBrixAOS::gameCharacterCreated (jsonStr); }
스테이지 완료
앱에서 발생한 스테이지 완료 이벤트를 분석합니다.
다음과 같은 스테이지 완료 정보를 구성하여 전달합니다.
- (필수) 완료한 스테이지 이름
void HelloWorld::menuCallback() { Json::Value param; param["rewards"] = "y"; param["rewards_gold"] = "500"; Json::StreamWriterBuilder builder; std::string jsonStr = Json::writeString(builder, param); PluginAdBrixAOS::gameStageCleared ("1-2", jsonStr); }
레벨 달성
앱에서 발생한 레벨 달성 이벤트를 분석합니다.
다음과 같은 레벨 달성 정보를 구성하여 전달합니다.
- (필수) 달성한 레벨 (1~10000)
void HelloWorld::menuCallback() { Json::Value param; param["rewards"] = "n"; Json::StreamWriterBuilder builder; std::string jsonStr = Json::writeString(builder, param); PluginAdBrixAOS::gameLevelAchieved (10, jsonStr); }
댓글
댓글 0개
댓글을 남기려면 로그인하세요.