本指南說明如何在 Android 應用程式中載入錨定式自動調整橫幅廣告。
先決條件
- 完成入門指南的步驟。
- (選用) 如要查看橫幅廣告導入範例,請選取下列任一範例應用程式:
- Java、Kotlin 或 Jetpack Compose 錨定式自動調整橫幅廣告範例。
- Java 或 Kotlin 進階功能示範。
 
請務必使用測試廣告進行測試
建構及測試應用程式時,請務必使用測試廣告,而非實際的正式廣告,否則可能導致帳戶遭停權。
如要載入測試廣告,最簡單的方法是使用 Android 橫幅專用的測試廣告單元 ID:
/21775744923/example/adaptive-banner
測試 ID 經特別設定,可針對每個請求傳回測試廣告,且您可在編寫程式碼、測試及偵錯時,在自家應用程式中使用這些 ID。發布應用程式前,請務必將測試用 ID 替換為自己的廣告單元 ID。
請參閱「啟用測試廣告」,進一步瞭解 Google Mobile Ads SDK 測試廣告的運作方式。
定義廣告檢視區塊
XML 版面配置
在版面配置 XML 檔案中新增檢視區塊,做為錨定式自動調整橫幅廣告的容器:
<!-- Ad view container that fills the width of the screen and adjusts its
    height to the content of the ad. -->
<FrameLayout
        android:id="@+id/ad_view_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_alignParentBottom="true" />
Jetpack Compose
- 加入 JetpackComposeDemo/compose-util 模組。這個模組包含用於編寫 - AdView物件和素材資源的輔助程式。
- 使用 - compose-util模組編寫- BannerAd類別:
// Place the ad view at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
  Box(modifier = modifier.fillMaxWidth()) { AdManagerBannerAd(adView, modifier) }
}
設定廣告大小
將 AdSize 設為錨定式自動調整橫幅廣告,並指定寬度:
Java
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360));
Kotlin
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360))
Jetpack Compose
// Set the adaptive banner ad size with a given width.
val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(LocalContext.current, 360)
adView.setAdSize(adSize)
將 AdManagerAdView 新增至版面配置
根據要加到應用程式版面配置的廣告大小,建立 AdManagerAdView:
Java
// Create a new ad view.
adView = new AdManagerAdView(this);
adView.setAdUnitId(AD_UNIT);
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360));
// Replace ad container with new ad view.
adContainerView.removeAllViews();
adContainerView.addView(adView);
Kotlin
// Create a new ad view.
val adView = AdManagerAdView(this)
adView.adUnitId = AD_UNIT_ID
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360))
this.adView = adView
// Replace ad container with new ad view.
binding.adViewContainer.removeAllViews()
binding.adViewContainer.addView(adView)
Jetpack Compose
val adView = remember { AdManagerAdView(context) }
// Setup and load the adview.
// Set the unique ID for this specific ad unit.
adView.adUnitId = ADMANANGER_ADAPTIVE_BANNER_AD_UNIT_ID
// Set the adaptive banner ad size with a given width.
val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(LocalContext.current, 360)
adView.setAdSize(adSize)
// Place the ad view at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
  Box(modifier = modifier.fillMaxWidth()) { AdManagerBannerAd(adView, modifier) }
}
載入廣告
AdManagerAdView 建立完成後,接著就要載入廣告,做法是使用 AdManagerAdView 類別的 loadAd() 方法。這個方法需要 AdManagerAdRequest 參數,用來存放有關單一廣告請求的執行階段資訊,例如指定目標資訊。
以下是載入廣告的範例:
Java
AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
adView.loadAd(adRequest);
Kotlin
val adRequest = AdManagerAdRequest.Builder().build()
adView.loadAd(adRequest)
如果順利載入,應用程式就能顯示橫幅廣告。
重新整理廣告
如已設定廣告單元重新整理功能,廣告載入失敗時,就不需要請求其他廣告。Google Mobile Ads SDK 會套用您在 Ad Manager UI 指定的重新整理頻率。如果您未啟用這項功能,請發出新請求。如要進一步瞭解廣告單元的重新整理功能,例如怎麼設定重新整理頻率,請參閱「行動應用程式中廣告的重新整理頻率」。
釋出廣告資源
放送完橫幅廣告後,您可以釋出橫幅廣告的資源。
如要釋出廣告資源,請從檢視區塊階層移除廣告,並捨棄所有參照項目:
Java
public void destroyBanner() {
  // Remove banner from view hierarchy.
  if (adView != null) {
    View parentView = (View) adView.getParent();
    if (parentView instanceof ViewGroup) {
      ((ViewGroup) parentView).removeView(adView);
    }
    // Destroy the banner ad resources.
    adView.destroy();
  }
  // Drop reference to the banner ad.
  adView = null;
}
Kotlin
fun destroyBanner() {
  // Remove banner from view hierarchy.
  val parentView = adView?.parent
  if (parentView is ViewGroup) {
    parentView.removeView(adView)
  }
  // Destroy the banner ad resources.
  adView?.destroy()
  // Drop reference to the banner ad.
  adView = null
}
廣告事件
您可以監聽廣告生命週期中的多種事件,包括載入、廣告曝光和點擊,以及廣告開啟和關閉事件。建議您先設定回呼,再載入橫幅廣告。Java
if (adView != null) {
  adView.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(@NonNull 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
adView?.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 投放,不應用於候補廣告或第三方聯播網廣告。詳情請參閱「計算曝光和點擊次數」。
如需在特定條件下記錄曝光次數,可以手動向 Ad Manager 送出曝光訊號,
Java
if (adManagerAdView != null) {
  adManagerAdView.setManualImpressionsEnabled(true);
}
Kotlin
adManagerAdView?.setManualImpressionsEnabled(true)
確定廣告已成功傳回,並在畫面顯示後,就能手動記錄曝光次數:
Java
if (adManagerAdView != null) {
  adManagerAdView.recordManualImpression();
}
Kotlin
adManagerAdView?.recordManualImpression()
應用程式事件
您可以利用應用程式事件,在建立廣告時加入向應用程式碼傳送訊息的功能,收到這類訊息後,應用程式就能據此採取行動。
您可以使用 AppEventListener 監聽 Ad Manager 專屬的應用程式事件。這類事件可能在廣告生命週期的任何時間點發生,甚至在呼叫 onAdLoaded() 之前。
在 AdManagerAdView 設定 AppEventListener:
Java
if (adManagerAdView != null) {
  adManagerAdView.setAppEventListener(this);
}
Kotlin
adManagerAdView?.appEventListener = this
以下示範如何透過應用程式事件指定顏色,來改變應用程式的背景顏色:
Java
@Override
public void onAppEvent(@NonNull String name, @NonNull String info) {
  if (name.equals("color")) {
    switch (info) {
      case "green":
        // Set background color to green.
        break;
      case "blue":
        // Set background color to blue.
        break;
      default:
        // Set background color to black.
        break;
    }
  }
}
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 試用版應用程式如何實作應用程式事件。
後續步驟
可收合橫幅廣告
可收合橫幅廣告是橫幅廣告的一種,一開始會以較大尺寸重疊在畫面上,點按上面的按鈕就會收合縮小。您可以考慮使用這類廣告來進一步提升效能,詳情請參閱「可收合橫幅廣告」。
內嵌自動調整橫幅廣告
與錨定自動調整橫幅廣告相比,內嵌自動調整橫幅廣告的尺寸更大、更高,且高度可變,最多可與裝置螢幕等高。如果應用程式需要在可捲動的內容中放送橫幅廣告,建議優先採用內嵌自動調整橫幅廣告。詳情請參閱「內嵌自動調整橫幅廣告」。