橫幅廣告

橫幅廣告是會佔用應用程式的部分版面的矩形廣告。使用者與應用程式互動時,這類廣告會固定顯示在畫面頂端或底部,或在使用者捲動瀏覽內容時,持續顯示在畫面上。橫幅廣告經過一段時間後會自動重新整理。詳情請參閱 橫幅廣告總覽

本指南將說明如何開始使用 錨定自動調整橫幅廣告。這個做法會使用您指定的廣告寬度,針對每部裝置最佳化廣告大小,盡可能提高成效。

錨定自動調整橫幅廣告是固定的顯示比例廣告,而非一般的固定大小廣告。長寬比與 320x50 的業界標準相似。指定可用的完整寬度後,系統會傳回高度調整為該寬度的廣告。在同一部裝置上提出要求時,最佳高度不會改變,而在重新整理廣告時,周圍的檢視畫面也不需要移動。

先備知識

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

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

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

/6499/example/adaptive-banner

這是經過特別設定,可針對每個請求傳回測試廣告,方便您在編寫程式碼、測試及偵錯時用於自家的應用程式。發布應用程式之前,請務必用自己的廣告單元 ID 取代這個 ID。

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

將 AdManagerAdView 新增至版面配置

顯示橫幅的第一步,是將 AdManagerAdView 放在要顯示橫幅的 ActivityFragment 版面配置中:

Java

private AdSize getAdSize() {
  // Determine the screen width (less decorations) to use for the ad width.
  Display display = getWindowManager().getDefaultDisplay();
  DisplayMetrics outMetrics = new DisplayMetrics();
  display.getMetrics(outMetrics);

  float density = outMetrics.density;

  float adWidthPixels = adContainerView.getWidth();

  // If the ad hasn't been laid out, default to the full screen width.
  if (adWidthPixels == 0) {
    adWidthPixels = outMetrics.widthPixels;
  }

  int adWidth = (int) (adWidthPixels / density);
  return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth);
}

private void loadBanner() {
  
  // Create a new ad view.
  AdManagerAdView adView = new AdManagerAdView(this);
  adView.setAdSizes(getAdSize());
  adView.setAdUnitId("/6499/example/adaptive-banner");

  // Replace ad container with new ad view.
  adContainerView.removeAllViews();
  adContainerView.addView(adView);

  // Start loading the ad in the background.
  AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
  adView.loadAd(adRequest);
}

Kotlin


// Determine the screen width (less decorations) to use for the ad width.
// If the ad hasn't been laid out, default to the full screen width.
private val adSize: AdSize
  get() {
    val display = windowManager.defaultDisplay
    val outMetrics = DisplayMetrics()
    display.getMetrics(outMetrics)

    val density = outMetrics.density

    var adWidthPixels = binding.adViewContainer.width.toFloat()
    if (adWidthPixels == 0f) {
      adWidthPixels = outMetrics.widthPixels.toFloat()
    }

    val adWidth = (adWidthPixels / density).toInt()
    return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth)
  }

private fun loadBanner() {
  
  // Create a new ad view.
  val adView = AdManagerAdView(this)
  adView.adSizes = adSize
  adView.adUnitId = "/6499/example/adaptive-banner"

  // Create an ad request.
  val adRequest = AdManagerAdRequest.Builder().build()

  // Start loading the ad in the background.
  adView.loadAd(adRequest)
}

載入廣告

AdManagerAdView 設定妥當後,下一步就是載入廣告。方法是使用 AdManagerAdView 類別中的 loadAd() 方法。該函式使用 AdManagerAdRequest 參數,保留關於單一廣告請求的執行階段資訊,例如指定目標資訊。

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

Java

private void loadBanner() {
  // Create a new ad view.
  adView = new AdManagerAdView(this);
  adView.setAdUnitId(AD_UNIT);
  adView.setAdSize(getAdSize());
  
  // Replace ad container with new ad view.
  adContainerView.removeAllViews();
  adContainerView.addView(adView);

  // Start loading the ad in the background.
  AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
  adView.loadAd(adRequest);
}

Kotlin

private fun loadBanner() {
  // This is an ad unit ID for a test ad. Replace with your own banner ad unit ID.
  adView.adUnitId = "/6499/example/banner"
  adView.setAdSize(adSize)
  
  // Create an ad request.
  val adRequest = AdManagerAdRequest.Builder().build()

  // Start loading the ad in the background.
  adView.loadAd(adRequest)
}

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

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

廣告事件

您可以在廣告生命週期中監聽一些事件,包括載入、廣告曝光、點擊、廣告開啟和關閉事件。建議您在載入橫幅前設定回呼。

Java

AdManagerAdView.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

AdManagerAdView.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() 方法。您的應用程式可以使用此方法恢復已暫停的活動,或執行其他必要工作,準備好進行互動。
onAdFailedToLoad() onAdFailedToLoad() 是唯一包含參數的方法。LoadAdError 類型的錯誤參數會說明發生了什麼錯誤。詳情請參閱廣告載入錯誤偵錯說明文件
onAdImpression() 系統記錄廣告的曝光次數時,系統會叫用 onAdImpression() 方法。
onAdLoaded() 廣告載入完畢後,系統會執行 onAdLoaded() 方法。舉例來說,如果您想等到確定廣告可載入後才將 AdManagerAdView 新增至活動或片段,則可在此執行。
onAdOpened() 當廣告開啟會覆蓋整個螢幕的疊加層時,系統會叫用 onAdOpened() 方法。

影片廣告的硬體加速

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

硬體加速功能預設為啟用,但部分應用程式可能會選擇停用。如果您的應用程式有這種情況,建議您為使用廣告的 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>

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

以人工方式計算曝光次數

手動計算曝光次數的功能只適用於直接銷售廣告活動和內部廣告活動, 而且其中包含直接在 Ad Manager 中投放的廣告素材。但不得用於候補廣告或第三方聯播網廣告。詳情請參閱「計算曝光和點擊」一文。

如果您設有特殊曝光記錄時機,可以手動將曝光連線偵測 (ping) 傳送至 Ad Manager。方法是在載入廣告前,針對手動曝光啟用 AdManagerAdRequest

Java

AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder()
    .setManualImpressionsEnabled(true)
    .build();

Kotlin

val adRequest = AdManagerAdRequest.Builder()
    .setManualImpressionsEnabled(true)
    .build()

當您確定廣告已經成功傳回並出現在螢幕上時,可以手動記錄曝光:

Java

AdManagerAdView.recordManualImpression();

Kotlin

AdManagerAdView.recordManualImpression()

應用程式事件

應用程式事件可讓您建立廣告,以便傳送訊息到應用程式的程式碼。接著,應用程式即可根據這些訊息採取行動。

您可以使用 AppEventListener 監聽 Ad Manager 專屬的應用程式事件。 這些事件可能會在廣告的生命週期內隨時發生,即使在呼叫 onAdLoaded() 之前亦然。

Java

public interface AppEventListener {
  void onAppEvent(String name, String info);
}

Kotlin

interface AppEventListener {
    fun onAppEvent(name: String, info: String)
}

廣告發生應用程式事件時,系統會呼叫 void onAppEvent(String name, String info)。這個介面可由活動或任何其他物件實作:

Java

import com.google.android.gms.ads.admanager.*;

public class BannerExample extends Activity implements AppEventListener {
}

Kotlin

import com.google.android.gms.ads.admanager.*

class BannerExample : Activity(), AppEventListener {
}

然後傳遞至 AdManagerAdView

Java

AdManagerAdView.setAppEventListener(this);

Kotlin

AdManagerAdView.appEventListener = this

以下範例說明如何根據具有顏色名稱的應用程式事件,變更應用程式的背景顏色:

Java

@Override
public void onAppEvent(String name, String info) {
  if ("color".equals(name)) {
    if ("green".equals(info)) {
      // Set background color to green.
    } else if ("blue".equals(info)) {
      // Set background color to blue.
    } else {
      // Set background color to black.
    }
  }
}

Kotlin

override fun onAppEvent(name: String?, info: String?) {
    if (name == "color") {
        when (info) {
            "green" -> {
                // Set background color to green.
            }
            "blue" -> {
                // Set background color to blue.
            }
            else -> {
                // Set background color to black.
            }
        }
    }
}

以下的對應廣告素材會將色彩應用程式事件訊息傳送給事件監聽器:

<html>
<head>
  <script src="//www.gstatic.com/afma/api/v1/google_mobile_app_ads.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
      // Send a color=green event when ad loads.
      admob.events.dispatchAppEvent("color", "green");

      document.getElementById("ad").addEventListener("click", function() {
        // Send a color=blue event when ad is clicked.
        admob.events.dispatchAppEvent("color", "blue");
      });
    });
  </script>
  <style>
    #ad {
      width: 320px;
      height: 50px;
      top: 0px;
      left: 0px;
      font-size: 24pt;
      font-weight: bold;
      position: absolute;
      background: black;
      color: white;
      text-align: center;
    }
  </style>
</head>
<body>
  <div id="ad">Carpe diem!</div>
</body>
</html>

請參閱 Ad Manager 應用程式事件範例,瞭解如何在 API 試用版應用程式中實作應用程式事件。

Java Kotlin

其他資源

GitHub 上的範例

  • 錨定自動調整橫幅廣告範例:Java | Kotlin

後續步驟

可收合橫幅廣告

可收合橫幅廣告是一種橫幅廣告,一開始會以較大的重疊廣告呈現,並提供可將廣告收合至較小尺寸的按鈕。建議您運用它進一步最佳化效能。詳情請參閱「可收合橫幅廣告」一文。

內嵌自動調整橫幅廣告

與錨定自動調整橫幅廣告相比,內嵌自動調整橫幅廣告尺寸更大、更高。它們的高度不一,而且可以和裝置螢幕一樣高。如果應用程式會在可捲動內容中刊登橫幅廣告,建議使用內嵌自動調整橫幅廣告,而非錨定式自動調整橫幅廣告。詳情請參閱內嵌自動調整橫幅廣告

探索其他主題