(2012-04-06 更新)接續上一篇,小蛙繼續記錄使用Google AdWhirl銜接kuAD,kuAD是由kuSOGI酷手機多媒體公司提供,有很多知名軟體都與kuSOGI合作,例如:休息一夏、ATM達人免費版、PlurkQ、台灣特賣會、台灣天氣資訊…等,更多資訊請到酷手機合作軟體查詢。

kuAD申請跟設定的方式跟AdMob其實差不多,不外乎註冊帳號、新增應用程式,輸入一些必要資訊,接著就會讓開發者下載kuAD套件。這裡有一個要注意的部分是如果要再下載一次套件,要連結到http://app.kusogi.com/sdk.html下載,或者是要編輯資料之後,才會在出現下載套件的選項(如下圖)。最重要的APID先記錄下來,等一下會使用到。
kuad-1

編輯完資料後才會再出現下載SDK選項(之前小蛙不知道可以到http://app.kusogi.com/sdk.html下載),同時也有kuAD說明文件但沒有提到如何串接AdWhirl(也可能有只是小蛙沒找到)。
kuad-2

偷懶很快地跳過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。
kuad-3

接下來進行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!


相關文章

Android Vuforia with jPCT-AE (5) – 多重模型載入,以 obj 為例

要進到這系列最後一篇文章了,這篇文章拖了很久,一直沒有時間整理,結果到最後 ... 程式碼留下來了,記憶卻有些模糊了,這邊小蛙配著程式碼盡可能的把還記得的東西寫下來。
2016-07-06 11:24:19
hans

18

Android Vuforia with jPCT-AE (4) – 載入 3DS 測試

延續 jPCT-AE Loader 載入模型的部份,這篇要記錄載入 3ds 檔案格式的方法,基本上跟前面幾個 obj, md2 的方法差不多,只有一些小小的變化而已。
2016-07-06 10:24:33
hans

18

Android Vuforia with jPCT-AE (3) – 載入 md2 測試

前兩篇介紹如何直接透過 jPCT-AE 直接繪圖以及載入 .obj 檔案,這邊繼續介紹 jPCT-AE 載入 md2 的方法,載入動作大致上類似,唯一不同的只有 texture 設定部份。
2016-07-06 09:24:43
hans

18

Android Vuforia with jPCT-AE (2) – 載入 obj 測試

上一篇 Android Vuforia with jPCT-AE (1) –
2016-07-06 08:24:55
hans

18

Android Vuforia with jPCT-AE (1) – 基本範例

說來慚愧,從 Google Adsense 被 ban 之後,就好久沒有發文了,站上 Vuforia 的文章也已經是好久以前的事情了 (遠目),最近有專案要用到 Vuforia,爬以前的文回來看,蛙哩咧 ... 現在已經更新到 Vu
2016-07-06 07:57:58
hans

18

wayStorm 威數意動 (kuAD, kuSOGI) 請款流程

又是一次隔了好久才進行的請款 ... 整個過程有點模糊了,每次要請款都要去翻以前的 email,邊看記錄邊回想,因為有些是透過電話聯絡!想說乾脆記下來好了,免得每次都要大費周章浪費不少時間。
2013-08-25 12:21:29
hans

18

org.apache.jasper.JasperException : Expecting “jsp:param” standard action with “name” and “value” attributes

今天遇到一個很有趣的問題,有個系統要從舊的環境移到新的環境,在程式碼沒有變動的情況下,新環境會出現這個錯誤,由於舊的環境 JDK 跟 Tomcat 真的是太舊了,會有這些錯誤不意外,環境不一致所造成的不相容也只好慢慢修掉。
2012-10-02 09:50:48
hans

18

Android Tabhost with FragmentActivity

(2013-01-30 更新) 接續Android TabHost
2012-02-29 23:26:55
hans

18

Android TabHost Without TabActivity

2012-02-25 13:47:50
hans

18

Google AdWhirl with Vpon

(2012-07-20 更新)前面幾篇小蛙陸續介紹了Google AdWhirl串接kuAD, AdMob,以及單獨使用AdMob(單獨使用Vpon或kuAD只要直接下載匯入範例就可以囉!),今天要來記錄
2012-01-08 20:21:03
hans

18




 回覆

你可以使用以下語法 HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="">

(required)

(required)

   
© 2012 蛙齋 Suffusion theme by Sayontan Sinha