AdWhirl with AdMob by Google
AdWhirl是一套廣告輪播平台,開發者如果同時有許多廣告商,例如:AdMob, Vpon, KuAD …等等,就可以透過AdWhirl依照自己的需求來設定百分比輪播廣告,這篇文章小蛙要記錄使用Google AdWhirl來播放AdMob廣告。
可能有些人會覺得如果只用AdMob就依照上一篇文章使用AdMob就好啦!為什麼還要用到AdWhirl,如果只是要放AdMob的確不需要用到AdWhirl,小蛙會用到AdWhirl的原因是想比較各家廣告商在同一期間內可以獲得的收益狀況,還有一個原因是對於台灣地區來說,由於在地化的關係,Vpon及KuAD撥放出來的廣告會比AdMob的廣告更容易吸引使用者。
千萬注意,這邊小蛙用的AdWhirl是Google AdWhirl by AdMob(https://www.adwhirl.com/),由於AdWhirl是Google Project中的Open Source,所以各家廣告商為了吸引開發商或廣告主,都會打著「整合AdWhirl平台,可以輪播自己想要的廣告」的名號,像Vpon自己的AdWhirl就增加了「自動判斷地區」的服務,由於Vpon服務的客戶有台灣地區及大陸地區,如果能在台灣地區撥放台灣當地的廣告,大陸地區撥放大陸當地的廣告,這樣會使的廣告的投放更有效率(我們會去擊點不相關廣告的機率應該很低吧!比如說在台灣卻去點廣州車商的特惠活動,不小心點到另當別論);kuSOGI也推出自己的AdWhirl,其中強調的就是可以「同時」(也就是設定比例自動輪播)自家的kuAD以及上面提到的Vpon與AdMob廣告。下面三張圖是三家廣告商的AdWhirl,除了網址列之外,網頁外觀一模一樣,不小心就會搞錯。
Google AdWhirl
kuSOGO AdWhirl
Vpon AdWhirl
如同Android一般,AdWhirl由於是Open Source,意味著各家廠商可以依照自己的需求更改程式碼,也使得各家的AdWhirl可能會有不同的行為模式,Google AdWhirl的使用方法未必會與Vpon AdWhirl或kuSOGI AdWhirl相同,小蛙還是要強調這篇文章記錄的是Google AdWhirl,接下來進入正題。
- AdWhirl申請及設定
- 到https://www.adwhirl.com/註冊一個Google AdWhirl帳號。
- 認證完成功登入後進入「Apps」頁籤,點選「Add Application」。
- 填入應用程式相關資訊,軟體名稱、應用程式URL(market連結)、廣告平台,其他的小蛙都是直接用預設值。(如果要取得地區資訊,把Allow Location Access改成ON)
- 新增完成後就可以在程式列表中看到剛剛新增的應用程式,點選進去。
- 點選AdMob旁邊的「Edit Settings」,將AdMob的發佈商ID填入(Google AdMob for Android步驟6)。並且將Ad Serving選擇成ON,% of Traffic設定成100%。每次更動都別忘了點選最下方有個「Save Changes」。到這邊AdWhirl就設定完畢了。接下來介紹在Android程式的部份。
- 在Android程式中加入AdWhirl + AdMob
- 到「Dev Resources」頁面的「Download the lastest version」下載最新版的AdWhirl套件。
- 下載「AdWhirlSDK_Android_3.1.1.zip」(視當時版本,總之選擇_Android就是了)
- 解壓縮zip檔後得到AdWhirlSDK_Android_3.1.1.jar,與Google AdMob for Android步驟4得到的GoogleAdMobAdsSdk-4.3.1.jar加入到Eclipse中(加入的方法請參考Google AdMob for Android步驟10)。加入成功會在Eclispe專案中看到如下圖。
- 先設定需要擺放廣告的layout,小蛙在主layout main.xml中新增了一個@+id/mainLayout來放置AdWhirl輪播的廣告。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- 用來放置AdWhirl輪播的區塊 --> <LinearLayout android:id="@+id/mainLayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingBottom="10dp"> </LinearLayout> </LinearLayout>
- 接著在AndroidManifest.xml加入user permission,並且加入一個新的Activity。。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hans.adwhirl" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <!-- 必要 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- adwhirl 選用,如果有開啟地區偵測 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".TestAdWhirlActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 一定要新增用來播放廣告的Activity --> <activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:name="com.google.ads.AdActivity" /> </application> </manifest>
- 程式碼的部份。
package com.hans.adwhirl; import com.adwhirl.AdWhirlLayout; import com.adwhirl.AdWhirlManager; import com.adwhirl.AdWhirlTargeting; import com.adwhirl.AdWhirlLayout.AdWhirlInterface; import android.app.Activity; import android.os.Bundle; import android.widget.LinearLayout; 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); // 將 adwhirl layout 放入我們預留的顯示廣告的 layout 中 layout.addView(adWhirlLayout); } @Override public void adWhirlGeneric() { // TODO Auto-generated method stub } }
- 這時候會遇到一個錯誤。解決辦法就是把專案的SDK Version設定成3.2+(設定方法請參考Google AdMob for Android步驟11)
Description Resource Path Location Type error: Error: String types not allowed (at 'configChanges' with value 'keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize'). AndroidManifest.xml /TestAdWhirl line 26 Android AAPT Problem
- 如果錯誤還是存在,可以考慮Project –> Clean –> 選擇要清除的專案,執行完畢之後錯誤就消失了!
- 趕快運行看看,就可以在模擬器或手機上看到Admob廣告囉!