Google AdWhirl with kuAD
(2012-04-06 更新)接續上一篇,小蛙繼續記錄使用Google AdWhirl銜接kuAD,kuAD是由kuSOGI酷手機多媒體公司提供,有很多知名軟體都與kuSOGI合作,例如:休息一夏、ATM達人免費版、PlurkQ、台灣特賣會、台灣天氣資訊…等,更多資訊請到酷手機合作軟體查詢。
kuAD申請跟設定的方式跟AdMob其實差不多,不外乎註冊帳號、新增應用程式,輸入一些必要資訊,接著就會讓開發者下載kuAD套件。這裡有一個要注意的部分是如果要再下載一次套件,要連結到http://app.kusogi.com/sdk.html下載,或者是要編輯資料之後,才會在出現下載套件的選項(如下圖)。最重要的APID先記錄下來,等一下會使用到。
編輯完資料後才會再出現下載SDK選項(之前小蛙不知道可以到http://app.kusogi.com/sdk.html下載),同時也有kuAD說明文件但沒有提到如何串接AdWhirl(也可能有只是小蛙沒找到)。
偷懶很快地跳過kuAD註冊流程 … 要透過AdWhirl串接的話,還需要到Google AdWhirl設定與kuAD的關聯。到AdWhirl中設定Networks,由於Google官方的AdWhirl並沒有內建對kuAD的串接方法,所以這邊我們必須新增一個讓AdWhirl可以知道要做什麼的事件,Add Custom Event –> 名字輸入自己可以辨認得就好,Function Name輸入等一下要從Android程式中呼叫的函式。設定好之後把kuAD Ad Serving打開,% of Traffic設成100%,別忘記最下方的Save Changes。
接下來進行Android程式的部份,將剛剛下載的kuAD_android.zip(如果解壓縮有遇到錯誤,請參考WinRAR解壓縮亂碼),解壓縮完可以看到kuADSample資料夾, kuAD 1.3.1a.jar, kuAD 1.3.1.jar,kuADSample資料夾可以直接import到Eclipse中(不知道怎麼匯入專案,請參考Eclipse匯入專案),小蛙在這邊建議要用AdWhirl串接kuAD之前先使用kuADSample看看能不能正常顯示,免得串接之後卻發生一堆讓人摸不著頭緒的問題,而執行kuADSample也很容易,依照Eclipse匯入專案這篇文章操作後就已經完成匯入了,最後一個步驟只需要修改com.sample套件中的kuADSample.java,把banner.setAPID(“ZZZZZ0100”);的ZZZZZ0100改成自己的APID就可以運行了。如果連這個範例都沒辦法顯示出廣告的話,更別提串接AdWhirl,小蛙在這邊卡了很久,如果改了還是沒辦法顯示出廣告,小蛙建議可以直接寫信去問技術人員,也許是哪裡出了問題(Vpon就遇到完全無法顯示,小蛙弄到三更半夜卡了好久還是出不來,問了技術人員才得到「我們技術上出了一些問題,已修正!」的答案…)確定這邊可以呈現出廣告之後,再繼續下面的步驟。
串接AdWhirl來說,小蛙覺得kuAD算是最簡單的了(Vpon最複雜,步驟也多),首先先將kuAD 1.3.1.jar加入到專案的Java Build Path –> libraries中。在AndroidManifest.xml中加入必要的user permission。官方文件。
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
在AndroidManifest.xml中新增一個Activity(要放在<application></application>之間)。
<activity android:name=\"com.kuad.ADDisplay\"/>
最後程式碼的部份。
package com.hans.adwhirl; import com.adwhirl.AdWhirlLayout; import com.adwhirl.AdWhirlManager; import com.adwhirl.AdWhirlTargeting; import com.adwhirl.AdWhirlLayout.AdWhirlInterface; import com.adwhirl.AdWhirlLayout.ViewAdRunnable; import com.kuad.KuBanner; import com.kuad.kuADListener; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; public class TestAdWhirlActivity extends Activity implements AdWhirlInterface { AdWhirlLayout adWhirlLayout; private static final String ADWHIRL_KEY = "改成自己的AdWhirl Key"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 預留放置廣告的layout LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout); // 初始化 adwhirl layout adWhirlLayout = new AdWhirlLayout(this, ADWHIRL_KEY); AdWhirlManager.setConfigExpireTimeout(1000 * 60); // 年齡 AdWhirlTargeting.setAge(23); // 性別 AdWhirlTargeting.setGender(AdWhirlTargeting.Gender.MALE); // 郵遞區號 AdWhirlTargeting.setPostalCode("115"); // 是否為測試模式,上架時要改成false AdWhirlTargeting.setTestMode(true); // 這行如果漏掉會一直出現type 17的錯誤 adWhirlLayout.setAdWhirlInterface(this); // 將 adwhirl layout 放入我們預留的顯示廣告的 layout 中 layout.addView(adWhirlLayout); } @Override public void adWhirlGeneric() { // TODO Auto-generated method stub } // 這個方法的名稱必須要跟上面AdWhirl設定的一模一樣 public void showKuAD(){ Log.e("showKuAD", "showKuAD()"); final KuBanner banner = new KuBanner(this); banner.setAPID("改成上面申請的kuAD APID"); banner.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); adWhirlLayout.pushSubView(banner); banner.setkuADListener(new kuADListener() { @Override public void onRecevie(String arg0) { Log.e("onRecevie", "onRecevie -> " + arg0); adWhirlLayout.adWhirlManager.resetRollover(); adWhirlLayout.rotateThreadedDelayed(); } @Override public void onFailedRecevie(String arg0) { Log.e("onFailedRecevie", "showKuAd -> " + arg0); banner.setkuADListener(null); adWhirlLayout.rollover(); } }); } }
快上傳到手機或模擬器上試試看吧!
後記:
2012-04-06
小蛙今天在「我的股票精算師」中加入選單鍵可以讓使用者選擇要設定投資金額上限、備份、還原或是匯出成交資料…等等功能,卻發現一個驚人的事實,小蛙的做法是在TabHost上方加上kuAD banner,在某些情況下menu鍵會完整失效,試了一個下午,還以為是哪裡實作有問題,最後發現只要把kuAD banner註解掉,menu鍵就可以完整運作,目前只好先把kuAD banner移到軟體最下方…之後比較有時間再來想辦法,這裡很詭異的是把kuAD banner移到軟體下方就又可以正常使用,放在軟體上方時好時壞,從DDMS中看到在”某些情況”下,menu鍵的主控權會回到TabHost Activity中,而非個別Tab上造成,至於為什麼會有這種情況,今天小蛙還沒有找到答案。
2012-01-23
剛剛發現kuSOGI官網已經把SDK更新到1.3.5囉!而這一版本已經改掉了執行緒多開的問題!
2012-01-14
kuAD技術人員已經更改了新版的給小蛙測試,的確已經把跨頁會造成執行緒大開的情況修正掉,由於如果軟體一開始設計是以Activity為單位跳頁面,而非像fragment, activitygroup或tabactivity這種可以把廣告固定在每一頁下方,上述程式碼在新版的1.3.4+ kuAD.jar中是可以正常運作的,運作的結果跟Vpon一樣,只會有timed-wait的thread,而不會爆出大量native thread,看來要避掉這個問題只能用上述的三個方法了(activitygroup, tabactivity已經過期了)。上面的Code為修改過可以使用的,注意必須要搭配1.3.4+ kuAD.jar。今天測試Google AdWhirl當成全域變數嵌入頁面的方法,看起來Thread只會開一次,唯一的缺點只有跳頁的時候會閃爍一下,但廣告不用重新Loading,先memo一下要寫的東西「banner點擊後無法全螢幕顯示」、「繼承Application做法」。
2012-01-09
上面的 code 確定是有問題的,adWhirlLayout.handler.post(new ViewAdRunnable(adWhirlLayout, banner)); 這行在跨頁面的時候會造成背景開啟一大堆執行緒無法關閉,這個問題就算使用kuad官方的adwhirl也還是存在,小蛙已經回報給kuad技術人員,小蛙也還在等待kuad的回覆。確定可以執行後,小蛙會在這邊繼續記錄後續狀況。
2012-01-08
kuAD後來發現如果使用Google AdWhirl來執行,上面的範例會出錯,造成kuAD廣告快速撥放。
2012-01-07
小蛙的DDMS持續報以下錯誤,後來才發現是漏掉adWhirlLayout.setAdWhirlInterface(this);這行造成的。
01-07 16:24:54.564: D/AdWhirl SDK(2931): Showing ad: 01-07 16:24:54.564: D/AdWhirl SDK(2931): nid: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 01-07 16:24:54.564: D/AdWhirl SDK(2931): name: event 01-07 16:24:54.564: D/AdWhirl SDK(2931): type: 17 01-07 16:24:54.564: D/AdWhirl SDK(2931): key: kuAD|;|showKuAD 01-07 16:24:54.564: D/AdWhirl SDK(2931): key2: 01-07 16:24:54.574: D/AdWhirl SDK(2931): Valid adapter, calling handle() 01-07 16:24:54.574: D/AdWhirl SDK(2931): Event notification request initiated 01-07 16:24:54.574: W/AdWhirl SDK(2931): Event notification would be sent, but no interface is listening 01-07 16:24:54.574: E/AdWhirl SDK(2931): nextRation is null!