TnkAd SDK Integration Guide for Android V 2.0 http://www.tnkfactory.com!! 필독!! - Proguard 를사용하실경우 Proguard 설정내에아래내용을반드시넣어주세요. -keep class com.tnkfactory.** 주요변경내용 V 2.0 (2013/04/17) - Callback URL 파라메터재정의 V 1.5 (2012/07/11) - UI 변경및스타일추가 V 1.1.1 (2012/04/20) - Featured Ad ( 전면광고 ) 기능추가 (3.4 참고 ) - 내부단말 ID 관련수정 - 주의!! : 아래와같이권한내용을 AndroidMenifest.xml 파일에추가해야함 <uses-permission android:name="android.permission.access_wifi_state" /> V 1.1.0 (2012/03/23) - 일괄설치확인 API 추가 (3.2.5 참고 ) V 1.0.4 (2011/11/10) - 동영상광고기능추가 - 주의!! : 동영상광고관련하여게시앱은다음의 Activity 와권한내용을반드시 AndroidMenifest.xml 파일에추가해야함 <activity android:name="com.tnkfactory.ad.admediaactivity" android:screenorientation="landscape"/> <uses-permission android:name="android.permission.write_external_storage" />
1. 개요 TnkAd 의 SDK( 이하 Tnk SDK) 를사용하여광고게시용앱과광고용앱을모두개발할수있다. 본문서는안드로이드개발자가 Tnk SDK 를사용하여어떻게광고게시또는광고앱을개발하는지에대한자세한내용을제공한다. 광고앱중단순설치형광고만을원할경우에는 Tnk SDK 를탑제할필요가없으며그외의설치실행형또는액션수행형광고의경우에는반드시 Tnk SDK 를탑재하여야한다. TnkAd 광고앱및게시앱처리흐름도
2. 공통사항 2.1. TnkAd SDK 다운로드 Tnk SDK 는 TnkAd 웹사이트 (http://www.tnkfactory.com) 회원가입후다운받아이용할수있다. Tnk SDK 배포본은다음과같이 SDK 자체와다양한적용샘플들을포함한다. 폴더명 내용 Lib Android 용 TnkAd SDK 인 tnkad-sdk.jar 파일을포함한다. TnkOfferer SDK 를사용하여구현한데모용샘플광고게시용어플리케이션이다. TnkAdvertiser SDK 를사용하여구현한데모용샘플광고용어플리케이션이다. 2.2. 앱등록하기 TnkAd 에서는게시용앱과광고용앱을구별하지않고하나의앱으로관리한다. 즉하나의앱이광고를게시하면서또한동시에자신이광고앱이될수도있다. 그러므로게시용앱 / 광고용앱상관없이우선앱기본정보를등록해야한다. TnkAd 사이트에로그인한후앱리스트에서 [ 신규앱등록 ] 버튼을누른다. 입력항목은다음과같다. 앱이름 : 광고로게시될때목록에나타나는이름이다. 로고이미지 : 광고로게시될때목록에이름과함께나타나는앱로고이미지이다. 실제앱의로고이미지를사용하도록한다. ( 권장크기는 72x72 pixel) 카테고리 : 앱의카테고리정보를입력한다. 광고타케팅시에사용되므로정확이입력하도록한다. 주사용자성별 : 앱의주사용자성별을선택한다. 광고타게팅시에사용되는정보이다. 등급 : 앱사용등급 ( 사용나이제한 ) 이다. 광고타게팅시에사용되는정보이다. 플랫폼 : 안드로이드또는웹을선택한다. 웹사이트광고인경우웹을선택한다. 패키지 : 안드로이드앱의패키지명을입력한다. 플랫폼이웹인경우에는웹사이트의주소를입력한다. 버전 : 앱의버전정보를입력한다. 무료여부 : 앱의무료앱인지유료앱인지선택한다. 광고로게시될때무료여부가같이나타난다. 설명 : 앱의상세설명문을입력한다. 광고게시후사용자가상세보기시에나타나는설명문이다. 항목들은모두입력하고등록버튼을누르면앱이등록된다. 등록후기본정보탭에서입력한정보를확인하거나수정할수있다.
등록후앱이름아래에 App Id 와 App Key 를확인할수있다. App Id 는 TnkAd 가등록된어플리케이션들을식별하기위하여사용하는유일한 ID 값이다. App Key 는 SDK 내부에서적법한어플리케이션인지확인하기위하여사용되는일종의 key 값으로인증용으로사용되므로외부에노출되지않도록한다. 2.3. 라이브러리등록 Tnk SDK 를사용하기위하여다음과같이앱의프로젝트구성을진행한다. Tnk SDK(tnkad-sdk.jar) 를다운받아원하는위치에저장한다. 앱의프로젝트를선택한후메뉴의 Project > Properties > Java Build Path > Libraries 탭 > Add External JARS 버튼클릭후 tnkad-sdk.jar 를선택한다. 2.4. Manifest 파일설정앱의 AndroidManifest.xml 파일을열어서다음과같이설정한다. <application> tag 안에다음과같이 meta-data 로 App Id 값을설정한다.
<application>... <meta-data android:name="tnkad_app_id" android:value="60004040-7061-8312-2138-160704040004" /> </application> App Id 는 TnkAd 웹사이트의어플리케이션기본정보에서확인할수있다. <application> tag 바깥에다음과같이 permission 들을추가한다. 이 permisssion 들은 Tnk SDK 의기능이동작하기위하여반드시필요한권한들이므로반드시추가하도록한다. ( 게시앱의경우 6 개권한이모두필요하며, 광고앱은상위 3 개권한만필요함 ) <uses-permission android:name="android.permission.internet" /> <uses-permission android:name="android.permission.read_phone_state" /> <uses-permission android:name="android.permission.access_wifi_state" /> <uses-permission android:name="android.permission.receive_boot_completed" /> <uses-permission android:name="android.permission.write_external_storage" /> <uses-permission android:name="com.android.launcher.permission.install_shortcut" /> Tnk SDK 가올바르게동작하기위하여 minsdkversion 을 4 이상으로설정한다. <uses-sdk android:minsdkversion="4" />
3. 게시앱 (Publisher App) 3.1. 게시정보등록광고를앱에게시하기위하여우선 TnkAd 웹페이지에게시정보를설정한다. 게시정보를설정하기전에우선앱의기본정보가등록되어있어야한다. 앱리스트에서앱을선택한후게시정보탭을선택한다. 게시정보탭화면에서다시게시등록버튼을누른다. 입력항목은다음과같다. In House : 만약다른광고앱들을가지고있고자신의광고앱만광고로게시하기를원한다면 In House 를체크한다. 포인트전환비율 : 자신의앱에서사용하는포인트의가격비율을입력한다. 100 원에해당되는포인트수치를입력하면광고목록에광고앱이지급하는금액을포인트수치로환산하여사용자에게보여준다. 포인트명칭 : 자신의앱에서사용하는포인트의명칭을입력한다. 포인트자체관리 : 광고앱을통하여지급된포인트는 TnkAd 의시스템에서관리해주지만원하는경우게시앱의서버에서직접관리할수있다. 이경우포인트자체관리에체크하고아래의자체관리 URL 을입력하도록한다. 자체관리 URL : 지급되는포인트를게시앱의서버에서자체적으로관리하고자할경우자체관리 URL 을입력한다. TnkAd 서버는광고앱을통하여지급되는포인트를입력한 URL 을통하여게시앱의서버에전달한다. 타마켓제외 : 안드로이드마켓이나이통사마켓을통하여설치되는앱들을광고목록에서제외시키고자할경우체크하도록한다. ( 이경우웹광고들만광고목록에보여진다.) 타마켓제외버전별설정 : 매체앱의버전에따라서타마켓제외를다르게설정하고자할경우설정할수있다. 또한버전별로게시상태를다르게할경우에도같이설정이가능하다. 광고필터 : 제목에특정단어를포함하는앱이나특정회사의앱을광고목록에서제외할수있다. 원하는단어들을공백없이, 로구분하여나열한다. 성인앱을제외하고자할경우에는 19 를입력한다.
위의항목들을입력하고저장버튼을클릭하면입력항목들이저장되고게시상태가 테스트 로변경된다. 테스트상태는정상적인게시상태와다음의사항들이다르게동작한다. 테스트상태에서도모든동작은정상게시상태와동일하게동작하며따라서사용자가광고앱을통하여정상적인포인트를지급받을수있다. 다만테스트상태에서는실제로비용이정산되어지급되지않는다. 테스트상태에서테스트가완료되면게시시작버튼을눌러서정상적인게시상태로전환하도록한다. 3.2. 게시앱구현하기게시앱에서광고를띄우기위하여 Tnk SDK 가제공하는 AdWallActivity 와 AdMediaActivity 를사용한다. 이둘을 Menifest 파일에 <activity> 로등록한다. <activity android:name="com.tnkfactory.ad.adwallactivity" /> <activity android:name="com.tnkfactory.ad.admediaactivity" android:screenorientation="landscape"/> 3.2.1 게시앱의사용자정보설정 (Optional) 게시앱이관리하는사용자고유 ID 등의정보를 TnkSession 에설정해두면해당정보가 Tnk 서버로전달되어추후아이템거래내역에서같이확인할수있으며, 포인트자체관리하는경우에는포인트전달 URL 호출시설정한 Id 를같이전달받을수도있다. TnkSession.setUserName(Context context, String username)
3.2.2 광고목록띄우기 광고목록을띄우기위하여 TnkSession.showAdList() 함수를호출한다. TnkSession.showAdList(Context context, String title) 또는 TnkSession.showAdList(Context context) 설명 : AdWallActivity 를띄운다. context : 게시앱의 Activity 객체이다. title : 원하는타이틀문자열을지정한다. ( 기본값 : 무료포인트받기 ) 적용예시 : 게시앱의버튼을누르면 AdWallActivity 를띄운다. public void oncreate(bundle savedinstancestate) { //... omitted... final Button button = (Button)findViewById(R.id.main_ad); button.setonclicklistener(new OnClickListener() { public void onclick(view v) { TnkSession.showAdList(MainActivity.this," 무료포인트받기 "); ); 화면예시
3.2.3 게시상태확인하기 게시앱이광고게시를중단할경우에는 AdWallActivity 를띄워도그안에는광고목록이나타나지않는다. 그러므로향후광고게시를중단할경우를대비하여 AdWallActivity 를띄우는버튼자체를보이지않게하는기능을갖추는것이바람직하다. 이를위하여현재게시상태를확인하고게시중인경우에만광고띄우는버튼을나타나게할수있다. TnkSession.queryPublishState(Context context, boolean showprogress, ServiceCallback callback) 설명 : 현재게시상태를 TnkAD 서버에요청하고결과를받으면 callback 을호출한다. 비동기방식으로동작한다. context : 게시앱의 Activity 객체 showprogress : 비동기방식으로동작하므로서버에서결과가올때까지 progress Dialog 를띄울지말지를지정한다. true 이면 progress dialog 를띄우고 false 이면띄우지않는다. callback : 서버에서결과를받으면처리할로직을기술한다. 적용예시 public void oncreate(bundle savedinstancestate) { //... omitted... final Button button = (Button)findViewById(R.id.main_ad); button.setonclicklistener(new OnClickListener() { public void onclick(view v) { TnkSession.showAdList(MainActivity.this," 무료포인트받기 "); ); TnkSession.queryPublishState(this, false, new ServiceCallback() { public void onreturn(context context, Object result) { int state = (Integer)result; if (state == TnkSession.STATE_YES) { button.setvisibility(view.visible); ); 또한광고목록이하나이상있는경우에만버튼이나타나게하고자할경우에는아래의 API 를사용하면현재사용자에게제공할수있는광고수를확인할수있다. TnkSession.queryAdvertiseCount(Context context, boolean showprogress, ServiceCallback callback) 설명 : 현재게시앱에서사용가능한광고수와적립포인트총합계를받을수있다. 요청결과를받으면 callback 의 onretuen() 이호출되며이때전달되는값은 int[2] 배열로첫번째에는광고건수, 두번째에는적립가능한포인트합계가담겨있다. 게시앱이현재게시상태가아닌경우라면 int[0] 값이 0 으로담겨있다. 참고로전달된포인트합계는실제값과오차가있을수있으므로참고용으로만사용한다. context : 게시앱의 Activity 객체 showprogress : 비동기방식으로동작하므로서버에서결과가올때까지 progress Dialog 를띄울지말지를지정한다. true 이면 progress dialog 를띄우고 false 이면띄우지않는다. callback : 서버에서결과를받으면처리할로직을기술한다. 3.2.4 포인트조회, 인출및아이템구매기능 사용자가광고를통하여획득한포인트는 TnkAD 서버에서관리되거나또는게시앱이자체적으로관리할수있다. 게시정보등록시 포인트자체관리 항목을체크하지않았다면포인트는
TnkAD 서버에서관리되며현재사용자가보유한포인트를조회하기위하여다음의 API 를사용한다. TnkSession.queryPoint(Context context, boolean showprogress, ServiceCallback callback) 설명 : 현재사용자가광고를통하여획득한포인트를반환한다. 비동기방식으로동작하므로서버에서결과도착했을때수행할 callback 을지정한다. context : 게시앱의 Activity 객체 showprogress : 비동기방식으로동작하므로서버에서결과가올때까지 progress Dialog 를띄울지말지를지정한다. true 이면 progress dialog 를띄우고 false 이면띄우지않는다. callback : 서버에서결과를받으면처리할로직을기술한다. Callback 수행은 UI 쓰레드에서실행되므로화면관련처리를수행할수있다. 적용예시 public void oncreate(bundle savedinstancestate) { //... omitted... final TextView pointview = (TextView)findViewById(R.id.main_point); TnkSession.queryPoint(this, true, new ServiceCallback() { public void onreturn(context context, Object result) { Integer point = (Integer)result; pointview.settext(string.valueof(point)); ); TnkSession.queryPoint(Context context) 설명 : 현재사용자가광고를통하여획득한포인트를반환한다. 동기방식으로동작하므로서버에서결과가올때까지 block 된다. 리턴값 : int ( 포인트 ) context : Context 객체 주의사항 : 게임앱과같이별도 thread 를사용하여화면을그려주는경우해당 thread 에서는앞의비동기방식의 API 를사용할수없으므로반드시동기방식의 API 를사용해야한다. 이때동기방식으로인하여화면이멈추는현상을방지하기위하여다음과같이별도 Thread 를생성하여호출하는것이바람직하다. static public void getpoint() { new Thread() { public void run() { int point = TnkSession.queryPoint(m_Activity); tnkadreturn(point); // 결과를받아서필요한로직을수행한다..start(); TnkAD 서버에서관리되는포인트를사용하여게시앱이제공하는아이템을구매할수있다. TnkAD 서버에서는게시앱의아이템을관리하지는않지만다음의 API 를사용하여포인트를사용하는방식으로아이템구매기능을구현한다. TnkSession.purchaseItem(Context context, int pointcost, String itemid) 설명 : TnkAd 서버에서관리되는포인트를사용하여 item 을구매한다. 동기방식이다. 입력파라메터는아래비동기방식을참고한다. 리턴 : long[2] 배열, long[0] 값은구매후남은포인트값이며 long[1] 은고유한거래 Id 가담겨있다. long[1] 값이음수인경우포인트부족등으로인하여구매가수행되지못했음을의미한다.
TnkSession.purchaseItem(Context context, int pointcost, String itemid, boolean showprogressdialog, ServiceCallback callback) TnkSession.purchaseItem(Context context, int pointcost, String itemid, String username, boolean showprogressdialog, ServiceCallback callback) 설명 : TnkAd 서버에서관리되는포인트를사용하여 item 을구매한다. 비동기방식이다. context : Context 객체 pointcost : 소비할포인트 itemid : 구매할 item 의고유 ID, item Id 는게시엡이정해서부여한다. 전달된 itemid 는 Tnk 보고서의아이템거래내역에함께보여진다. username : ( 옵션항목 ) 게시앱에서자체적으로사용자를식별하는 ID 등이있는경우이를파라메터로전달해주면 Tnk 의보고서페이지의아이템거래내역화면에서이를함께확인할수있다. showprogress : true 이면 progress dialog 를띄우고 false 이면띄우지않는다. callback : 서버에서결과를받은후처리할로직을기술한다. Callback 수행은 UI 쓰레드에서실행되므로화면관련처리를수행할수있다. 전달되는결과값은 long[] 값으로 long[0] 값은구매후남은포인트값이며 long[1] 은고유한거래 Id 가담겨있다. long[1] 값이음수인경우포인트부족등으로인하여구매가수행되지못했음을의미한다. 적용예시 public void onclick(view v) { TnkSession.purchaseItem(MainActivity.this, 30, "item.00001", true, new ServiceCallback() { public void onreturn(context context, Object result) { long[] ret = (long[])result; if (ret[1] < 0) { // error else { Log.d("tnkad", "current point = " + ret[0] + ", transaction id = " + ret[1]); pointview.settext(string.valueof(ret[0])); ); TnkAD 서버에서사용자포인트를관리하는경우사용자포인트전체를한번에게시앱으로인출할수있다. 이는게시앱에서이미사용자가보유하고있는포인트와 TnkAD 서버에적립된포인트를합치고자할때유용하게사용할수있다. TnkSession.withdrawPoints(Context context, String desc) 설명 : TnkAd 서버에서관리되는포인트를모두한번에인출한다. 비동기방식이다. 입력파라메터는아래비동기방식을참고한다. 리턴 : int 인출된포인트값. TnkSession.withdrawPoints(Context context, String desc, boolean showprogressdialog, ServiceCallback callback) TnkSession.withdrawPoints(Context context, String desc, String username, boolean showprogressdialog, ServiceCallback callback) 설명 : TnkAd 서버에서관리되는포인트를모두한번에인출한다. context : Context 객체 desc : 인출에대한사유등을간단히넣어두면향후 Tnk 보고서의아이템거래내역에서확인할수있다. username : ( 옵션항목 ) 게시앱에서자체적으로사용자를식별하는 ID 등이있
는경우이를파라메터로전달해주면 Tnk 보고서의아이템거래내역화면에서이를함께확인할수있다. showprogress : true 이면 progress dialog 를띄우고 false 이면띄우지않는다. callback : 서버에서결과를받은후처리할로직을기술한다. Callback 수행은 UI 쓰레드에서실행되므로화면관련처리를수행할수있다. 전달되는결과값은 Integer 값으로인출된포인트값이며 0 인경우에는충전된잔액이없어인출할수없음을의미한다. 적용예시 public void onclick(view v) { TnkSession.withdrawPoints(MainActivity.this, " 인출 ", " 홍길동 ", true, new ServiceCallback() { public void onreturn(context context, Object result) { int point = (Integer)result; Log.d("tnkad", "point = " + point); pointview.settext(string.valueof(point)); ); 3.2.5 일괄설치확인지급기능 설치형광고인경우사용자가앱을설치하고다시광고목록으로돌아와명시적으로설치확인버튼을클릭해야지급이완료된다. 그러나이에대한이해부족으로사용자가설치만하고설치확인을하지않아포인트가지급되는경우가있는데, 이를일괄적으로처리할수있도록아래의 API 를제공한다. 게시앱에서는앱이실행될때또는사용자가아이템샵등으로이동하였을때아래의 API 를호출함으로써일괄로설치확인하여포인트지급까지처리할수있다. TnkSession.requestPayForInstalls(Context context) 설명 : 사용자가광고앱설치후아직설치확인하지않은것들을모두일괄로설치확인및지급처리한다. 동기방식으로호출된다. 리턴 : int[], int[0] 는지급건수, int[1] 은지급된포인트의합계이다. TnkSession.requestPayForInstalls(Context context, boolean showprogressdialog, ServiceCallback callback) 설명 : 사용자가광고앱설치후아직설치확인하지않은것들을모두일괄로설치확인및지급처리한다. 비동기방식으로호출된다. context : Context 객체 callback 으로전달되는결과는 int[] 이며 int[0] 는지급건수, int[1] 은지급된포인트의합계이다.
3.3. Callback URL 구현 사용자가광고를통하여획득한포인트는 TnkAD 서버에서관리되거나또는게시앱이자체서버에서관리할수있다. 게시앱이자체서버에서포인트를관리하고자할경우에는게시정보의 자체관리 URL 항목에 URL 주소를입력하면, TnkAd 서버가사용자가획득한포인트를해당 URL 로전달한다. URL 과함께추가적인정보가 POST 방식으로전달되며그항목및의미는다음과같다. 전달항목 uid 상세내용 사용자를식별하기위한사용자 ID 이다. 안드로이드폰의경우폰의 TelephonyManager.getDeviceId() 값이다. ( 주 1) pay_pnt 사용자에게지급되는포인트값이다. seq_id digest md_user_nm 포인트지급에대한고유한 ID 값이다. 이값을사용하여중복지급여부를확인할수있다. URL 로전달된값이유효한지확인하기위하여사용된다. 전달되는값은 app_key + uid + seq_id 의 MD5 Hash 값이다. app_key 는앱기본정보등록시부여된 app key 값이다. TnkSession.setUserName() 으로설정한값이있다면설정된값이전달된다. 게시앱에서자체적으로관리하는사용자 ID 등이있는경우이항목을사용하여사용자를구별할수있다. 주 1) Wifi 전용기기의경우 DeviceId() 값이없으므로이경우에는 Mac-address 를사용하여 UID 를생성한다. 생성방식 : wf + Mac-address ( 예시 : wf3a:00:b3:45:1f:3b ) 작성예시 ( 서버단, Java) // tnk 에서관리하는사용자 ID ( 단말기의 deviceid 의소문자 ) String userid = request.getparameter("uid"); // 해당사용자에게지급되는포인트 int paypoint = Integer.parseInt(request.getParameter("pay_pnt")); // tnk 내부에서생성한고유번호로이거래에대한 Id 이다. String seqid = request.getparameter("seq_id"); // 전달된파라메터가유효한지여부를판단하기위하여사용한다. ( 아래코딩참고 ) String checkcode = request.getparameter("digest"); // 게시앱에서 TnkSession.setUserName() 으로설정한값이있으면넘어온다. // 게시앱에서사용자구분을위하여사용하는값이있는경우 ( 전화번호나로그인 ID) // 아래의값을사용하여사용자를구분한다. String mdusername = request.getparameter("md_user_nm"); // 앱등록시부여된 app_key (tnk 사이트에서확인가능 ) String appkey = "d2bbd...19c86c8b021"; // 유효성을검증하기위하여아래와같이 verifycode 를생성한다. DigestUtils 는 Apache 의 // commons-codec.jar 이필요하다. 다른 md5 해쉬함수가있다면그것을사용해도무방하다. String verifycode = DigestUtils.md5Hex(appKey + userid + seqid); // 생성한 verifycode 와 chk_cd 파라메터값이일치하지않으면잘못된요청이다. if (checkcode == null!checkcode.equals(verifycode)) { // 오류 log.error("tnkad() check error : " + verifycode + "!= " + checkcode); else { log.debug("tnkad() : " + userid + ", " + seqid); // 포인트부여하는로직수행 ( 예시 ) purchasemanager.getpointbyad(userid, paypoint, seqid); 3.4. Featured Ads 게시앱내에전면광고를노출시킬수있다. 전면광고는 Tnk 에등록된광고앱중에서 Featured Ads 설정을한광고중에임의로선택되어노출된다. 전면광고는게시앱화면위에팝업형태로나타나므로게시앱의화면이동등에전혀영향을주지않는다. 전면광고화면을띄우기위하여우선 Tnk 의사이트에서게시정보우측상단의 " 전면광고설정 " 을통하여전면광고사용여부를 " 사용 " 으로설정하여야한다.
" 전면광고설정 " 팝업내에있는 In house 설정은 " 전면광고 " 의경우에만적용되는설정이다. 3.4.1 전면광고준비 게시앱내에서전면광고화면을띄우기위하여전면광고목록을가져오는준비 API 와실제원하는시점에전면광고를띄우는 API 가제공된다. 전면광고준비 API 는내부적으로전면광고목록을조회하고또한이전에사용자가설치하고아직설치확인하지않은광고앱의경우자동으로설치확인을하여포인트를적립해주는작업을수행한다. 전면광고준비 API 는일반적으로앱실행시초기에한번만호출하는것으로충분하다. TnkSession.prepareFeaturedAd(Context context, String title) 설명 : 전면광고목록등을내려받는사전작업을수행한다. 내부적으로별도 Thread 가생성되어수행된다. context : Context 객체 3.4.1 전면광고띄우기 다음의 API 를사용하여전면광고팝업을띄운다. 조회된전면광고목록이없거나 Tnk 사이트에서전면광고사용설정을하지않은경우에는아무런화면도나타나지않는다. TnkSession.showFeaturedAd(Activity activity) 설명 : 전면광고화면을주어진 Activity 의 View 위에팝업으로띄운다. activity : Activity 객체 작성예시
public class MainActivity extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); TnkSession.prepareFeaturedAd(this);... final Button featuredbutton = (Button)findViewById(R.id.featured_ad); // 버튼을누르면 Featured Ad 광고화면을띄운다. featuredbutton.setonclicklistener(new OnClickListener() { public void onclick(view v) { TnkSession.showFeaturedAd(MainActivity.this); );
3.5. 게시앱테스트절차 게시앱을작성한후테스트를위하여테스트용광고앱인 TnkAdvertiser 이용한다. TnkAdvertiser 앱은테스트상태인모든게시앱에노출이되며또한광고앱의설치시, 최초수행시및액션수행시지급항목을모두제공한다. 또한한번지급된항목에대하여반복적인테스트가가능하도록지급로그를삭제하는기능을제공하므로보다원할하게테스트를수행할수있다. 테스트절차는다음과같다. 우선테스트할게시앱의게시정보를등록하고저장하여테스트상태로만든다. 게시앱에 SDK 를적용한다. 게시앱에서광고목록 (AdWallActivity) 를띄우면아래와같이현재광고중인목록이나타난다. 그중에서 TnkAdvertiser 가테스트용광고앱이다. TnkAdvertiser 를선택하고다음화면에서이동하면앱다운로드페이지로이동한후링크 를클릭하여 apk 파일을다운로드후설치한다. 설치가완료되면설치확인을누르거나 TnkAdvertiser 를실행시키거나실행후액션버튼을눌러실제지급이처리되는지확인한다. 반복적으로테스트하기위해서 TnkAdvertiser 앱화면에서 Delete Test Log 버튼을눌러지급로그를삭제한후, TnkAdvertiser 앱을삭제하고테스트하는게시앱도삭제한후다시설치하여반복적으로테스트할수있다. 또는 Tnk 사이트의개발지원창에서테스트단말기를동록한후지급로그를삭제할수있다. ( 게시앱과 TnkAdvertiser 도지우고다시설치하도록한다.)
4. 광고앱 (Advertiser App) 4.1. 광고정보등록앱을광고하기위하여우선 TnkAd 웹페이지에광고정보를설정한다. 광고정보를설정하기전에우선앱의기본정보가등록되어있어야한다. 앱리스트에서앱을선택한후광고정보탭을선택한다. 광고정보탭화면에서다시광고등록버튼을누른다. 입력항목은다음과같다. In House : 만약다른게시앱들을가지고있고자신의게시앱에만노출시키기를원한다면 In House 를체크한다. 노출해상도 : 광고노출하고자하는단말기의해상도를선택한다. 해상도가 480x854 인단말기는 480 을선택하면같이노출된다. 노출단말기 : 광고를노출하고자하는단말기를선택할수있다. 특정단말기모델을대상으로만광고를노출하고자하는경우에는전체를선택해제하고 추가 버튼을눌러서단말기모델을개별로설정할수있다. 노출카테고리 : 광고를노출하고자하는앱의카테고리를지정할수있다. 예를들어 게임 카테고리의앱에만광고를노출하고자하는경우전체를선택해제하고 추가 버튼을눌러서 게임 카테고리를선택한다. 지급방법 : 광고비가집행되는조건을설정한다. 지급조건은 설치시, 실행시, 액션시 3 가지를선택할수있다. ( 중복설정가능 ) 설치시 : 단순히자신의앱이설치된경우에광고비를집행한다. 단순설치에따른비용지급이므로이경우광고앱에 TnkAd 의 SDK 를탑재할필요는없다. 실행시 : 자신의앱이설치된후처음실행되는경우에광고비를집행한다. 광고앱에 TnkAd 의 SDK 를탑재하여야한다. 액션시 : 사용자가지정한액션을완료한경우에광고비를집행한다. 예를들어사용자가앱을설치하여실행한후레벨 1 을 clear 한경우에비용을지급하고자할경우액션설명으로 레벨 1 clear 시 라고입력한다. 광고앱에 TnkAd 의 SDK 를탑재하여야한다. 연결마켓 : 광고앱을다운받을수있는정보를설정한다. 안드로이드마켓과티스토어, 자체 URL 이가능하며중복설정이가능하다. 중복설정시우선순위는자체 URL > 티스토어 > 안드로이드마켓이다. 티스토어만지정한경우티스토어가탑재되지않은단말기에는노출이되지않는다. 안드로이드 : 사용자가안드로이드마켓으로이동되어광고앱을설치하도록한다. 패키지값은기본정보에서입력한내용으로설정된다.
티스토어 : 사용자가티스토어로이동되어광고앱을설치하도록한다. 티스토어 Id 는상품 PID/ 상품등급형태로입력한다. 상품 PID 는티스토어에등록된 Id 를사용하며 10 자리문자열이다. 상품등급은티스토어에등록된상품등급으로 0 : 전체이용가, 1 : 12 세이용가, 2 : 15 세이용가, 4 : 청소년사용불가이다. 주의 : 티스토어의상품 ID 는안드로이드어플인경우 OA~ 로시작되는데이때 OA 00 으로변경하여입력하도록한다. 입력예시 : 0000017949/0 자체 URL : 안드로이드마켓이나티스토어가아닌자체적인모바일웹페이지를통하여설치유도를하고자할경우 URL 을직접지정한다. 위의항목들을입력하고저장버튼을클릭하면입력항목들이저장되고광고상태가 테스트 로변경된다. 테스트상태는정상적인광고상태와다음의사항들이다르게동작한다. 테스트상태의광고앱은정상게시상태의앱에는노출이되지않으나, 테스트상태의게시앱에는노출이된다. 테스트상태에서도모든동작은정상게시상태와동일하게동작하며따라서사용자가광고앱을통하여정상적인포인트를지급받을수있다. 다만테스트상태에서는실제로비용이정산되어지급되지않는다. 테스트완료후승인신청을하기전에광고앱은연결마켓을통하여설치가가능하도록마켓이나티스토어에배포되어있어야한다. ( 또는 APK 파일을메일등으로전달 ). 승인신청을하면테스트담당자가설정된연결마켓을통하여해당앱을내려받아기능확인후승인처리를한다. (3 일이내 ). 승인이완료되면 광고게시 를버튼을눌러서광고판매를진행한다. 광고정보의내용중지급방법과연결마켓을변경하고자할경우에는광고중지후수정할수있으며, 수정후에는다시승인신청을하여검증과정을거쳐야한다. 4.2. 광고앱구현하기광고앱중단순설치형광고만을진행하고자할경우에는 TnkAd 의 SDK 를적용할필요가없으며설치실행형, 액션수행형광고를진행하고자할경우에만 TnkAd 의 SDK 를적용한다. 4.2.1 설치실행형광고앱 설치실행형광고는사용자가앱을설치후최초실행시에광고비를집행하는방식을의미한다. 이를위하여광고앱에서는앱이처음실행되는시점에아래의함수를호출한다.
TnkSession.applicationStarted(Context context) 설명 : 필요시 TnkAd 서버로설치실행형지급을요청한다. TnkAd 서버에서는광고앱을설치클릭한게시앱을확인하여해당광고비지급을처리한다. 광고비지급이집행된후에는반복적으로호출해도중복지급되지않는다. context : Context 객체이다. 적용예시 public void oncreate(bundle savedinstancestate) { //... omitted... TnkSession.applicationStarted(this); 4.2.2 액션수행형광고앱 액션수행형광고는사용자가지정한액션을수행한경우에광고비를집행하는방식을의미한다. 이를위하여광고앱에서는해당액션이수행되는시점에아래의함수를호출한다. TnkSession.actionCompleted(Context context) 설명 : 필요시 TnkAd 서버로액션수행형지급을요청한다. TnkAd 서버에서는광고앱을설치클릭한게시앱을확인하여해당광고비지급을처리한다. 광고비지급이집행된후에는반복적으로호출해도중복지급되지않는다. context : Context 객체이다. 적용예시 public void whenyouractioniscompleted() { //... omitted... TnkSession.actionCompleted(this); 5. 기타기능 5.1. 로깅설정테스트시 TnkAd SDK 의로그내용을확인하고자할경우에는아래의 API 를사용하여로깅설정을변경한다. 테스트완료후배포시에는로깅을 false 로설정하거나 API 를주석처리하여필요없는로깅이생성되지않도록한다. TnkSession.enableLogging(boolean logging) 5.2. AdWall 스타일설정게시앱에서 AdWall 을띄우는화면은기본적인스타일이설정되어있으나원하는경우화면의스타일을모두변경할수있다. 설정할수있는스타일항목은다음과같다. background : 배경이미지 (Drawable 의 resource ID) backgroundcolor : 배경색상 (background 도지정된경우 background 가우선적용됨 ) textcolor : 글자색상 textsize : 글자폰트크기 설정할수있는화면의구성요소는다음과같다. TnkStyle.AdWall : 광고목록화면전체
TnkStyle.AdWall.Header : 광고목록상단의타이틀영역 TnkStyle.AdWall.Section : 타이틀하단의광고설치안내부분 TnkStyle.AdWall.Item : 광고목록리스트의각항목들 TnkStyle.AdWall.Item.Title : 광고목록리스트의앱이름 TnkStyle.AdWall.Item.Subtitle : 광고목록리스트의앱이름하단의지급포인트설명문
TnkStyle.AdWall.Item.Tag : 광고목록리스트의무료, 유료, 웹, 설치확인등의아이콘 TnkStyle.AdWall.Item.Tag.Free : 무료표시아이콘 TnkStyle.AdWall.Item.Tag.Paid : 유료표시아이콘 TnkStyle.AdWall.Item.Tag.Web : 웹표시아이콘 TnkStyle.AdWall.Item.Tag.Confirm : 설치확인표시아이콘 TnkStyle.AdWall.Dialog : 상세표시다이얼로그화면전체 TnkStyle.AdWall.Dialog.Header : 상세표시다이얼로그화면의상단부분 TnkStyle.AdWall.Dialog.Body : 상세표시다이얼로그의본문영역부분 TnkStyle.AdWall.Dialog.Button : 상세표시다이얼로그의하단버튼부분 TnkStyle.AdWall.Dialog.Highlight : 상세표시다이얼로그의강조글씨 TnkStyle.AdWall.Dialog.Detail : 상세표시다이얼로그의일반글씨 적용예제 private void settnkstyle() { TnkStyle.AdWall.background = R.drawable.bg; TnkStyle.AdWall.Header.background = R.drawable.free_cookie_01_480; TnkStyle.AdWall.Item.background = R.drawable.list_item_bg; TnkStyle.AdWall.Item.Subtitle.textColor = 0xff2c2c7c;... 광고목록띄우는부분... settnkstyle(); // showadlist 전에호출한다. TnkSession.showAdList(MainActivity.this);