橫幅廣告是會佔用應用程式版面配置一部分的矩形廣告。使用者與應用程式互動時,這類廣告會固定顯示在畫面頂端或底部,或在使用者捲動瀏覽內容時,持續顯示在畫面上。橫幅廣告會在一段時間後自動重新整理。詳情請參閱 橫幅廣告總覽。
本指南將說明如何開始使用 錨定自動調整橫幅廣告,這項功能會根據您指定的廣告寬度,為每種裝置調整出最佳廣告大小,盡可能提高成效。
錨定自動調整橫幅廣告是固定的顯示比例廣告,而非一般固定大小的廣告。長寬比與 320x50 業界標準類似。指定可用完整寬度後,系統便會傳回與該寬度最理想高度的廣告。不同裝置的請求之間,最佳高度不會改變,周圍檢視畫面也不需要在廣告重新整理時移動。
必要條件
- 完成入門指南。
一律使用測試廣告進行測試
建構及測試應用程式時,請務必使用測試廣告,而非正式版廣告。否則可能導致帳戶遭到停權。
載入測試廣告最簡單的方法,就是使用 Android 橫幅廣告專用的測試廣告單元 ID:
/6499/example/adaptive-banner
系統已針對每項請求傳回測試廣告,而您可以將廣告用於自己的應用程式,同時對編寫、測試及偵錯時使用。但請注意,請務必先替換成自己的廣告單元 ID,再發布應用程式。
如要進一步瞭解 Mobile Ads SDK 測試廣告的運作方式,請參閱「測試廣告」一文。
將 AdManagerAdView 加入版面配置
顯示橫幅廣告的第一步,就是將 AdManagerAdView
放在 Activity
或 Fragment
的版面配置中 (您想要顯示區塊)。
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
參數,其中含有單一廣告請求的指定目標資訊等執行階段資訊。
以下範例說明如何在 Activity
的 onCreate()
方法中載入廣告:
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() 方法。您的應用程式可運用這個 API 恢復已停權的活動,或執行任何其他必要工作以做好互動準備。
|
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 試用版應用程式中導入應用程式事件。
其他資源
GitHub 上的範例
後續步驟
可收合橫幅廣告
可收合橫幅廣告是指最初以較大的重疊廣告方式呈現的橫幅廣告,其中包含可將廣告收合為較小的尺寸的按鈕。建議您利用這項功能進一步最佳化效能。詳情請參閱可收合橫幅廣告。
內嵌自動調整橫幅廣告
與錨定自動調整橫幅廣告相比,內嵌自動調整橫幅廣告會尺寸更大、圖示也更高。它們的高度可變,而且高度與裝置螢幕高度一樣。如果應用程式會在可捲動內容中刊登橫幅廣告,建議採用內嵌自動調整橫幅廣告,而非錨定自動調整橫幅廣告。詳情請參閱內嵌自動調整橫幅廣告。