橫幅廣告

橫幅廣告會佔用應用程式版面配置的一部分,位於裝置螢幕的頂端或底部。使用者與應用程式互動時,這類通知會持續出現在螢幕上,且可能會在一段時間後自動重新整理。如果您是行動廣告新手,可以從這些地方著手。 個案研究

本指南將說明如何將AdMob 中的橫幅廣告整合至 Android 應用程式。除了程式碼片段和操作說明以外,資源中還包括適當調整橫幅廣告大小的資訊,以及其他資源的連結。

必要條件

新增至 AdView 版面配置

顯示橫幅的第一個步驟,就是在要顯示橫幅的 ActivityFragment 版面配置中,放置 AdView。最簡單的做法是將一個方法新增至對應的 XML 版面配置檔案。以下範例顯示活動的 AdView

# main_activity.xml
<com.google.android.gms.ads.AdView
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@+id/adView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"
    ads:adSize="BANNER"
    ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
</com.google.android.gms.ads.AdView>

請注意下列必要屬性:

  • ads:adSize:將這個值設為您要使用的廣告大小。如果不想使用常數定義的標準大小,可以改為設定自訂大小。詳情請參閱「橫幅廣告大小」一節

  • ads:adUnitId:設定要顯示廣告的應用程式廣告單元專屬 ID。如要在不同活動中顯示橫幅廣告,則每個活動都需要廣告單元。

您也可以透過程式輔助方式建立 AdView

Java

AdView adView = new AdView(this);

adView.setAdSize(AdSize.BANNER);

adView.setAdUnitId("ca-app-pub-3940256099942544/6300978111");
// TODO: Add adView to your view hierarchy.

Kotlin

val adView = AdView(this)

adView.adSize = AdSize.BANNER

adView.adUnitId = "ca-app-pub-3940256099942544/6300978111"
// TODO: Add adView to your view hierarchy.

一律使用測試廣告進行測試

建構及測試應用程式時,請務必使用測試廣告,而非實際製作的廣告。否則您的帳戶可能會遭到停權。

如要載入測試廣告,最簡單的方法是使用 Android 橫幅廣告專用的測試廣告單元 ID:

ca-app-pub-3940256099942544/6300978111

並且經過特別設定,可針對每個請求傳回測試廣告,方便您在編寫、測試及偵錯時在自己的應用程式中使用。只要在發布應用程式前,記得用自己的廣告單元 ID 替換它即可。

如要進一步瞭解 Mobile Ads SDK 測試廣告的運作方式,請參閱「測試廣告」一文。

載入廣告

備妥 AdView 後,下一步就是載入廣告。方法是使用 AdView 類別中的 loadAd() 方法。它使用 AdRequest 參數,可保存單一廣告請求的執行階段資訊,例如指定目標資訊。

以下範例說明如何在 ActivityonCreate() 方法中載入廣告:

MainActivity (摘錄)

Java

package ...

import ...
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;

public class MainActivity extends AppCompatActivity {
    private AdView mAdView;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }
        });

        mAdView = findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
    }
}

Kotlin

package ...

import ...
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdView

class MainActivity : AppCompatActivity() {

    lateinit var mAdView : AdView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        MobileAds.initialize(this) {}

        mAdView = findViewById(R.id.adView)
        val adRequest = AdRequest.Builder().build()
        mAdView.loadAd(adRequest)
    }
}

如果廣告無法載入,您只需將廣告單元設定為重新整理,就不需要明確請求另一個廣告;Google Mobile Ads SDK 會遵循您在AdMob 網頁介面中指定的任何重新整理頻率,如果您尚未啟用重新整理功能,就需要發出新的要求。

大功告成!您的應用程式現在可以顯示橫幅廣告了。

廣告事件

如要進一步自訂廣告行為,您可以在廣告生命週期中連結幾個事件:載入、開啟、關閉等。您可以透過 AdListener 類別監聽這些事件。

如要將 AdListenerAdView 搭配使用,請呼叫 setAdListener() 方法:

Java

mAdView.setAdListener(new AdListener() {
    @Override
    public void onAdClicked() {
      // Code to be executed when the user clicks on an ad.
    }

    @Override
    public void onAdClosed() {
      // Code to be executed when the user is about to return
      // to the app after tapping on an ad.
    }

    @Override
    public void onAdFailedToLoad(LoadAdError adError) {
      // Code to be executed when an ad request fails.
    }

    @Override
    public void onAdImpression() {
      // Code to be executed when an impression is recorded
      // for an ad.
    }

    @Override
    public void onAdLoaded() {
      // Code to be executed when an ad finishes loading.
    }

    @Override
    public void onAdOpened() {
      // Code to be executed when an ad opens an overlay that
      // covers the screen.
    }
});

Kotlin

mAdView.adListener = object: AdListener() {
    override fun onAdClicked() {
      // Code to be executed when the user clicks on an ad.
    }

    override fun onAdClosed() {
      // Code to be executed when the user is about to return
      // to the app after tapping on an ad.
    }

    override fun onAdFailedToLoad(adError : LoadAdError) {
      // Code to be executed when an ad request fails.
    }

    override fun onAdImpression() {
      // Code to be executed when an impression is recorded
      // for an ad.
    }

    override fun onAdLoaded() {
      // Code to be executed when an ad finishes loading.
    }

    override fun onAdOpened() {
      // Code to be executed when an ad opens an overlay that
      // covers the screen.
    }
}

AdListener 中的每個可覆寫方法,都對應至廣告生命週期中的一個事件。

可覆寫的方法
onAdClicked() 系統記錄廣告點擊時,會叫用 onAdClicked() 方法。
onAdClosed() 使用者瀏覽廣告到達網頁網址並返回應用程式時,系統會叫用 onAdClosed() 方法。您的應用程式可運用此方法恢復已停權的活動,或執行其他必要工作,以便做好互動準備。 請參閱 AdMob AdListener 範例,瞭解 Android API 試用版應用程式中導入廣告事件監聽器的方法。
onAdFailedToLoad() onAdFailedToLoad() 是唯一包含參數的方法。LoadAdError 類型的錯誤參數說明發生的錯誤。詳情請參閱排除廣告載入錯誤說明文件
onAdImpression() 系統記錄廣告的曝光時,系統會叫用 onAdImpression() 方法。
onAdLoaded() 廣告載入完畢後,系統會執行 onAdLoaded() 方法。如果您希望等到確定廣告可載入後才將 AdView 新增至活動或片段,即可在這裡執行此操作。
onAdOpened() 廣告開啟覆蓋整個螢幕的疊加層時,系統會叫用 onAdOpened() 方法。

展示廣告的容器至少必須與橫幅一樣大。如果容器有邊框間距,就能有效縮小容器大小。如果容器不符合橫幅廣告的大小,系統就不會顯示橫幅,而您會在記錄檔中收到以下警告:

W/Ads: Not enough space to show ad. Needs 320x50 dp, but only has 288x495 dp.

下表列出標準橫幅廣告大小。

大小以 dp (寬 x 高) 說明 服務提供狀況 AdSize 常數
320x50 橫幅廣告 手機和平板電腦 BANNER
320x100 大型橫幅 手機和平板電腦 LARGE_BANNER
300 x 250 IAB 中矩形廣告 手機和平板電腦 MEDIUM_RECTANGLE
468x60 IAB 完整大小橫幅廣告 平板電腦 FULL_BANNER
728x90 IAB 排行榜 平板電腦 LEADERBOARD
提供的寬度 x 自動調整高度 自動調整橫幅廣告 手機和平板電腦 不適用
螢幕寬度 x 32|50|90 智慧型橫幅廣告 手機和平板電腦 SMART_BANNER

如要定義自訂橫幅大小,請設定所需的 AdSize,如下所示:

Java

AdSize adSize = new AdSize(300, 50);

Kotlin

val adSize = AdSize(300, 50)

影片廣告硬體加速

為了讓影片廣告順利在橫幅廣告檢視畫面中顯示,您必須啟用硬體加速功能。

硬體加速功能預設為啟用,但部分應用程式可能會選擇停用。如果符合上述情況,建議您為使用廣告的 Activity 類別啟用硬體加速功能。

啟用硬體加速功能

如果全域開啟硬體加速時,應用程式無法正常運作,也可以個別控制各項活動。如要啟用或停用硬體加速功能,您可以在 AndroidManifest.xml<application><activity> 元素中使用 android:hardwareAccelerated 屬性。以下示範為整個應用程式啟用硬體加速,但針對一項活動停用此功能:

<application android:hardwareAccelerated="true">
    <!-- For activities that use ads, hardwareAcceleration should be true. -->
    <activity android:hardwareAccelerated="true" />
    <!-- For activities that don't use ads, hardwareAcceleration can be false. -->
    <activity android:hardwareAccelerated="false" />
</application>

如要進一步瞭解控制硬體加速的選項,請參閱硬體加速指南。請注意,如果活動處於停用狀態,就無法啟用個別廣告檢視畫面的硬體加速功能,因此活動本身必須啟用硬體加速功能。

其他資源

GitHub 上的範例

  • 橫幅廣告範例:Java | Kotlin

  • 進階功能示範:Java | Kotlin

  • 橫幅廣告 RecyclerView 範例應用程式:Java

行動廣告車庫影片教學課程

成功案例

後續步驟

探索下列主題: