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!