2011年4月30日 星期六

【分享】- 如何在 Android 程式中置入 AdMob (AdSense) 廣告? - PART 3

報告各位親愛的鄉親父老兄弟姊妹們~~ Android SDK 在 Eclipse 套件中已納入了 Google Admob Ads SDK,而且!連如何加入 Admob 程式碼都來個大翻修~~ @@ (基本上是變得更簡單了 ^_^)

今天使用 Eclipse 中的 Android SDK and AVD Manager,發覺多了個 Google Admob Ads Sdk package, revision 1 的選項(如下圖):




相對照昨天登入 Admob 出現了一堆「提供程式碼更新」的警示訊息:


看來 Google 整合 Admob 的進度又前進了一步,下面是漁郎在 Eclipse 的 Android 專案中加入該 Google Admob Ads SDK 的步驟,貼上來紀錄一下免得以後忘了,也與夥伴們分享一下!(說錯別打我 >_<)

(一) 先來回顧一下申請 AdMob 發佈商帳號與程式 ID 的經過(已申請的夥伴請直接跳過此步驟):

1. 先到 AdMob 網站申請一個廣告發佈商帳號。


2. 依指示步驟申請完成後,登入 AdMob,並點選右上角你剛登入的帳號連結(電子郵件地址)或 http://zhtw.admob.com/my_sites/


3. 點選選單中的『網站與應用程式』下的『新增網站/應用程式』。


4. 選擇『Android 應用程式』


5. 填入你的應用程式資料,建立新的應用程式 ID:


6. 取得發佈商的應用程式 ID:

點選「管理設定」
記下應用程式 ID


(二) 在 Android 程式中置入 AdMob 程式碼:

(1) 記得先使用  Eclipse 中的 Android SDK and AVD Manager 下載與安裝該 Google Admob Ads SDK (這個不用說太詳細吧 @@...)

(2) 點選 Eclipse 的偏好設定 (這是 Mac OS 中的選項,Windows 版中請夥伴們找找,漁郎有點忘了在哪個選單中...):



(3) 點選 Java -> Build Path -> Classpath Variables,然後,點按「New...」按鍵:


(4) 在 Name 欄中輸入自訂的 SDK 名稱(例如本例:GoogleAdmobAdsSDK),並在點選 Path 欄右邊的「File..」:


(5) 選擇 Android SDK 所在路徑中 extras -> google -> admob_ads_sdk -> GoogleAdMobAdsSdk-x.x.x.jar 檔案,然後,點按「打開」按鍵:


(6) 點按「OK」:


(7) 此時 Classpath Variables 中已加入了 Google Admob Ads SDK 參數選項:


(8) 加入或改變專案中的 Libraries 參數,以滑鼠右鍵點選專案,然後再點擊 Properties 選項:


(9) 點選 Java Build Path,並點選右邊的 Libraries 標籤,然後,點擊「Add Variable...」按鈕:


(10) 點選 GoogleAdmobAdsSDK (本例設定的參數名),並點按「OK」:



(11) 將 Admob 必要參數加入 AndroidManifest.xml 中 (以下圖片中的紅框部份):

GoogleAdMobAdsSdk-4.3.0 版(含)之前的設定
GoogleAdMobAdsSdk-4.3.1 版(含) 之後的設定
(也就是 Google Admob Ads Sdk package, revision 4)

(PS. 必須將專案的 Android SDK 改為 3.2 版以上才能使用,如下圖)

(12) 加入一個 LinearLayout 元件參數到 main.xml (或您要置放 Admob 的 Layout 中)中(紅框內容):


(13) 將 Admob 程式碼加入要展示 Admob Ads 的程式中(紅框內容),記得將那個「Your AD UNIT ID」改為您的廣告發佈商之應用程式 ID 喔(例如:a14bf666b7ccdd3 那一串取自 Admob 網站給予你的東東):




(14) 重新編譯您的專案就行囉 ^_^ :


(15) 測試:大功告成!!AdSense 與 Admob 廣告會輪流播喔!!



基本上咧!如您要加入 Admob Ads 程式到 Android 程式中,就參照上述的步驟就行了,漁郎先前寫的 PART-1 PART-2 就不用再看了。Google 阿,拜託一下~ 賣格改阿啦~~~ >_<

PS:(2012/05/12)如你發現程式在執行期會「強制關閉」,並從 logs 看到以下錯誤訊息
java.lang.NoClassDefFoundError: com.google.ads.AdView
其原因是:從 ADT 版更為 17 後,其內定會使用個別專案目錄下的 libs/*.jar 進行程式與函式庫的連結,因此,只要在專案根目錄下建立一個 libs 目錄,並且將 Google Admob Ads SDK 中的 .jar 放到此一 libs 中就可解決問題。

相關參考資料網址:


59 則留言:

  1. 推!!感謝您的分享,很實用:)

    回覆刪除
  2. 哈囉東大~
    Admob裡面選項有這個,我看不太懂><"""

    測試模式:
    1.使用以用戶端程式碼設定的測試模式設定
    2.為所有索閱停用測試模式

    選項<1>是測試模式不計費,
    選項<2>是啟用模式會計費,
    是這個意思嗎?

    謝謝~

    回覆刪除
  3. 測試模式是不計費沒錯,但應該是 AdMob 考慮到有些開發者在無意中於程式內啟動了「測試模式」,並已發佈到 Android Market 上讓使用者下載了,如此,不就會沒「錢錢」收入!?因此,該選項的目的, 是讓開發者遇到上述情況時有挽回的變通方式:

    (1) 讓已發佈的 APP 依據原發佈程式內的設定開啓為「測試 (點選廣告沒 $$ 收入) 」或「非測試 (點選廣告有 $$ 收入)」模式。

    (2) 無論已發佈的 APP 的程式中是否啟用為「測試模式」,AdMob 皆不予理會,一律視為「非測試模式」,也就是說只要使用者點廣告就會有 $$ 收入。說錯了請別打我 >_< .....

    回覆刪除
  4. 為何我安裝(win7下) 都出現
    Downloading Google Admob Ads Sdk package, revision 3
    File not found: C:\Progra~2\Android\android-sdk\temp\googleadmobadssdkandroid-4.1.1.zip (存取被拒。)

    該資料夾會顯示:唯讀藍框

    回覆刪除
  5. @Victor,不好意思喔,漁郎現在是使用 Apple MacBook Pro,所以,不知您的問題有何解法。 >_< ...

    回覆刪除
  6. 魚郎您好
    不好意思~打攪了
    想再冒昧請教一下
    如果server沒有投廣告~
    那畫面是否就不會有banner~ 還是會是空白的

    因為我admob今天有四次要求~
    但我卻一次都沒看到@@
    我也不知道我是哪四次成功的= =a

    回覆刪除
  7. 因為我現在遇到的狀況試
    打我的ADMOB ID~>無banner畫面
    如果程式碼正確~不打我的id~
    banner會出現成功畫面
    http://imgur.com/zVKr2
    請問這有可能是後台設定問題嗎

    回覆刪除
  8. @ ymow,
    (1) 程式跟 AdMob 要求廣告時,如沒廣告可播,不會出現 Banner。
    (2) 請仔細比對ㄧ下漁郎文章中的範例內容,如都正確,您也將程式發佈到 Android Market 了,且在您的 AdMob 上顯示的是「綠燈」(通常要ㄧ段時間後...),八成是沒廣告可播,請耐心等等看。

    回覆刪除
  9. 魚郎不好意思~再次打擾你~
    我發現用網路上的admob id可以再我的app正常顯示廣告~
    我的id卻不行...
    (搞半天程式碼是對的...還一直反覆檢查...這就是人生@@)
    想請教一下~
    因為我還沒上架到market~
    但是我的admob後台已經打上了 market://details?id=com.xxx
    是因為還沒上架的關係所以還沒辦法跟後台索取廣告嗎??
    還是在admob那裏設定有錯誤
    不好意思~麻煩你了~
    謝謝

    回覆刪除
  10. 喔喔剛沒刷新頁面==
    程式碼應該沒問題了~因為用別人廣告id是ok的

    謝謝回覆~~
    我還沒上傳到market~
    可是燈是綠燈沒錯
    所以就差要上傳到market囉?

    真的很謝謝你

    回覆刪除
  11. 魚郎午安@@~
    我解決了~
    謝謝你︿︿
    就像上面說的~
    第一次用需要等待==
    (可是官網只說第一次用要等兩小時...)
    分享給大家
    建議大家第一次用就先用別人的id測試~
    自己同步申請id
    ︿︿

    回覆刪除
  12. http://zhtw.admob.com/my_account/transfer_funds
    只要金額超過 $10,就能進行轉帳。 轉帳超過 $50,AdMob 免費加碼 20%。 請注意,您現有的收益必須超過 $50 才能轉帳。

    請問他為什麼前面說10元就能轉~
    後面又說五十元美金呢?

    回覆刪除
  13. 這個問題可能要問問 AdMob 才能得知 @@ ..... 漁郎ㄧ向對花錢的事都會當做沒看到 >_<....

    回覆刪除
  14. 不是啦~這不是花錢~
    他是說達到五十才能轉帳到使用者帳戶
    沒關係~我在看看吧~謝囉

    回覆刪除
  15. 免費加碼 20%是指,你的app要打廣告,用收入去付廣告費會多20%,
    但一樣要到50元才會轉,不過要過三個月才會收到付款的mail, 也就是8月份有到50元,10才會收到付款通知.

    回覆刪除
  16. @Xianyuc,也就是說 ... 使用「廣告收入」去打廣告,如是經由(「廣告收入」去打廣告)的點擊收入,要累計到 USD 50 才能收到錢錢囉?!漁郎現在都是超過 USD 20 就會收到錢錢 ^_^ (PS.沒打廣告喔) ....

    回覆刪除
  17. 對不起,請問一下
    我出現下面的錯誤訊息,是為什麼,謝謝
    「You must have AdActivity declared in AndroidManifest.xml with configChanges」

    回覆刪除
  18. 請參考上述文中的 二 ~ (11) 內容,因為 GoogleAdmobAdsSDK 4.3.1 後的參數有更改。

    回覆刪除
  19. GoogleAdMobAdsSdk-4.3.1
    Android SDK 2.3.3

    android:name="com.google.ads.AdActivity"
    android:configChanges="keyboard|keyboardHidden|orientation"

    這是我的版本和寫入的參數,但是還是不行

    回覆刪除
  20. @方丈:請仔細瞧瞧文中的說明:應該給如下的參數:android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

    回覆刪除
  21. 並將 Android SDK 版本調高到 3.2 以上才行 ....

    回覆刪除
  22. 感謝

    在請問一下,手機目前使用的版本,已經到 3.2以了嗎?

    回覆刪除
  23. @方丈:只要您在 AndroidManifest.xml 中有以下這段參數,編譯後的程式將會適用於該參數值對應之 Android 版本以上的手機:

    uses-sdk android:minSdkVersion="3"

    3 : 適用於 Android 1.5 以上手機,
    4 : 適用於 Android 1.6 以上手機 ..... 以此類推。。

    雖然會出現討厭的黃色驚嘆號,但無妨。

    回覆刪除
  24. android:minSdkVersion="10"

    可是,我目前的版本是 10

    如果參數改成以下的話
    android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize

    在存檔的時候,就會有錯誤了
    2011-12-05 16:14:46 - AndroidNotes] (skipping index file 'F:\workspace1\AndroidNotes\res\drawable-hdpi\Thumbs.db')
    [2011-12-05 16:14:46 - AndroidNotes] F:\workspace1\AndroidNotes\AndroidManifest.xml:22: error: Error: String types not allowed (at 'configChanges' with value 'keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize').

    回覆刪除
  25. @方丈:在 AndroidManifest.xml 中設定的是對應適用於哪個 Android 版本手機的參數,但漁郎要您更改的是該 Project 中使用的 Android SDK 版本。請您跟我這樣做:

    (1) 在該專案 (例如:AndroidNotes) 上以滑鼠右鍵點選後,選擇 Properties (在最下方)

    (2) 請點選 Android,並在右側勾選 Android 3.2,並點選「OK」

    這樣試試。。。

    回覆刪除
  26. 感謝
    我會試試看,因為我目前的電腦裡只有 2.2 和 2.3.3
    因為網路的關系,沒有辨法下載 其他版本

    如果你知道和何手動下載版本的話,麻煩請教我

    非常感謝

    回覆刪除
  27. 基本上, Eclipse 中 ADT 的 Android SDK Manager 就可下載。。。

    以下網址可以 HTTP 手動下載 SDK , 除非您的網路連 HTTP 都擋 .... 那漁郎就沒法囉~

    http://developer.android.com/sdk/index.html

    回覆刪除
  28. 漁郎,感謝你的幫忙

    但是,公司的網路連 HTTP 都擋了
    看來,只能在其他地方下載,在傳回公司了

    謝了

    回覆刪除
  29. 請問android版本一定要3.2以上嗎

    回覆刪除
  30. 是,漁郎在測試的時候,用 Android SDK 3.2 編譯才沒有錯誤訊息,不然會有以下的錯誤訊息:「Description Resource Path Location Type
    error: Error: String types not allowed (at 'configChanges' with value 'keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize').」。以下這個網址亦有參考說明:http://code.google.com/intl/zh-TW/mobile/ads/docs/android/fundamentals.html#requirements

    回覆刪除
  31. 漁大 請教你一個問題

    我加入廣告後,在 WiFi 的環境下,看不到廣告也

    另外一問

    你分享過
    【分享】- 如何在 Android 程式中加入不會因網路問題而出現錯誤網頁視窗的 AdSense Mobile 服務?

    在那篇文章中
    // Google AdSense 行動網頁的網址 - SAMPLE - 請改為自己的網址
    String mAdSenseWebUrl01 = "http://你的應用服務 ID.appspot.com";

    應用服的ID是指 AdMob 上的「發佈商的應用程式 ID」嗎?

    感謝

    回覆刪除
  32. 那篇的內容不適用於 AdMob 喔~

    應用服務 ID 指的是在 Google App Engine 所設定的「應用服務 ID」,近似於 host name。

    回覆刪除
  33. 那在 WiFi 環境下,和使用其他方式上網
    會造成,看不到廣告的情況嗎?

    回覆刪除
  34. 不會喔~~ 應該都可以看到廣告。(只要確定連網是正常的)

    回覆刪除
  35. 可是,我看不到自己的廣告
    只出現了一塊,要出現廣告的區塊
    但是沒有東西出現
    可是在網站上的播放上,有正式播放
    好奇怪喔

    回覆刪除
  36. 請教各位一個問題, 程式加上廣告橫條在一個畫面上, 那程式需要不斷去要求廣告嗎? 還是admod 的模組會自己運作.
    我的意思是, 如果那個畫面停留很久, 廣告模組會自己定時更換, 還是需要自己寫程式處理更新廣告問題?

    回覆刪除
  37. 該 API 會自己去要求廣告與定時更換喔~~ 這段不用寫程式。

    回覆刪除
  38. 作者已經移除這則留言。

    回覆刪除
  39. 各位高手, 請問一下,

    我有照方法把 AdMob 加成功了, 也看到廣告了
    但我按廣告沒反應

    是因為我是發佈商?還是因為我用測試版?
    這樣正常嗎?

    非常感謝

    回覆刪除
  40. 找到答案了
    因為我有用 multiple process
    所以要把AdActivity所屬的 process 加入

    還是謝謝大家

    回覆刪除
  41. 請問一下喔@@~我一步一步照著做,也有參考很多跟您類似的方法或是google api文件~但最後在模擬機上發布測試時,總是彈出"應用程式未預期結束的視窗"…這,我哪裡做錯了嗎@@….

    而且這種情形只有在我加入admob的時候才有,拿掉admob,應用程式又可以在模擬器上正確運作….不曉得您能幫我解惑一下嗎…感激阿

    回覆刪除
  42. 魚郎早安~
    感謝這個部落格,小弟搞了好久好不容易成功置入admob在模擬器上運行,可是一丟到實機測試後,等了好大一天都沒看到廣告出現,請問這是有甚麼地方出錯嗎?

    在模擬器上測試跟包出apk都沒有報錯~可是一放到實機上測試就是沒顯示廣告

    上admob網站上看,所至入的那筆id是有亮綠燈的...這表示是有在運作吧?@@

    小弟的實機是 evo 3D...難道跟機子也有關係?

    回覆刪除
    回覆
    1. Hi ! 您不妨將實機接上電腦,並使用 Eclipse 內的 DDMS ,並在執行程式時,參考 LogCat 的內容,應該會看到您想要的資訊。 ^^

      刪除
  43. sorry魚郎再打擾了^^"
    logcat的顯示是這兩行:

    Ads(17868): To get test ads on this device, call adRequest.addTestDevice("C05D37BFBCF5E286FA6A21600A2D439D");
    -----------------------------------------------
    Ads(17868): Received ad url: <"url": "http://googleads.g.doubleclick.net:80/mads/gma?preqs=0&u_sd=1.5&slotname=a14f6fed1067e53&u_w=320&msid=com.myandroid.demos&js=afma-sdk-a-v4.3.1&mv=8010007.com.android.vending&isu=C05D37BFBCF5E286FA6A21600A2D439D&cipa=0&format=320x50_mb&net=ed&app_name=1.android.com.myandroid.demos&hl=zh&u_h=480&u_audio=3&u_so=p&output=html&region=mobile_app&u_tz=-480&ex=1&client_sdk=1&pto=0&caps=sdkAdmobApiForAds&jsv=12", "afmaNotifyDt": "null">
    -------------------------------------------

    ...這應該算是有去求取廣告吧?但卻沒有顯示?
    麻煩您幫我解惑一下了~感恩@@

    回覆刪除
    回覆
    1. Hi!DDT,

      你的 Log 是正確的!通常會有四個連續的 log :

      (1) To get test ads on this device .......
      (2) adRequestUrlHtml .....
      (3) Received ad url .....
      (4) onReceiveAd()

      那個 onReceivedAd() 出現後應該就會出現廣告。

      請檢視是不是畫面的 Layout 出了問題,或許被蓋掉了!

      刪除
  44. 漁郎兄你好
    謝謝你得教學
    有個問題想請問一下
    Admob的廣告視窗能自定位置及方向嗎
    例如程式是橫向顯示,所以我想將廣告放在右上角(手機橫擺時)

    謝謝

    回覆刪除
    回覆
    1. Hello!您可試試在 Ad 的 Layout 中加入以下參數:

      android:layout_gravity="right"

      刪除
  45. 您好 我想請教一下
    若希望android程式跑的版本是2.1
    是否只能用舊的admob SDK

    回覆刪除
    回覆
    1. 您好,可以使用 Android SDK 3.2,但將 miniSdkVersion 設定成 3,就可編譯成 2.1 版的 Android 程式,使用的 AdMob SDK 也是新版的。

      刪除
  46. 您好,請問我試著加android:layout_gravity="bottom"
    把廣告位置放在最下面,但還是在最上面google去找大家也都
    是改這樣就行,不會是因為VM測試都一定在最上面吧?
    @_@

    回覆刪除
    回覆
    1. 可以提供您的整體 Layout 檔內容嗎?因為有相關聯喔!

      刪除
  47. 我發現是因為我用 AbsoluteLayout的關係,所以會一直在上面
    但AbsoluteLayout要用到最下面只能調xy但被一種機型和解析度又
    不同,會變的很亂...

    AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:myapp="http://schemas.android.com/apk/res/com.yeats.com.TwNightMarket"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    ImageButton
    android:id="@+id/imageButton01"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/nightmk"
    android:onClick="onMKClick"
    LinearLayout
    android:id="@+id/AdLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    LinearLayout

    AbsoluteLayout

    後來改成以下都是LinearLayout的方式又會出現
    not enough show ad! wants <480 , 75 >我只有 <480 , 75 > 因為我用了 match_parent 都被填滿了,但我看其他的app是ok的也


    LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:myapp="http://schemas.android.com/apk/res/com.yeats.com.TwNightMarket"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    ImageButton
    android:id="@+id/imageButton01"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/nightmk"
    android:onClick="onMKClick"
    LinearLayout
    android:id="@+id/AdLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    LinearLayout

    LinearLayout

    回覆刪除
  48. 你好,如果一個app要用兩個 以上的廣告也是這樣用嗎,謝謝

    回覆刪除
    回覆
    1. 一個 APP 用兩個以上廣告.... 好像會違反規則喔... 漁郎沒試過 @@

      刪除
  49. 請問一下,admob預估收益那時才會進入帳戶餘額,因為我的帳戶餘額還是0呢,進入帳戶餘額才能轉到paypal嗎

    回覆刪除
    回覆
    1. 您好,請參考以下文章:http://www.e68club.com/2011/05/admob-paypal.html

      刪除
  50. hello
    您好
    請問收費標準只有點擊?還是另有其他呢?
    他的版面要如何設計其實都可以透過工程師設定或設計!但一定要有一定的大小!
    (那請問知道大小的限制分別是多少嗎?)
    希望盡快收到您的回覆
    謝謝

    回覆刪除
  51. Let’s replicate the experiment a thousand times and summarize the outcomes with a plot (it may take a while to run the code!). We can answer this query by adapting the roulette operate to 1xbet output the length of the vector wealth. The following product is required to correctly prep and pre-treat wooden previous to any stain project.

    回覆刪除