Google Mobile Ads SDK 也支援自訂搜尋樣式。如果您的應用程式 目前已經採用 Google Mobile Ads SDK,建議您改用 AFSMA SDK 版本 。
如果您要從 18.1.0 或更舊版本升級至 19.0.0 以上版本,請參閱 遷移指南。
必要條件
本實作指南假設您已熟悉下列項目:
- AdSense 自訂搜尋廣告 使用自訂搜尋樣式
- Android 應用程式開發
匯入 AdSense 搜尋廣告原生 SDK
新增 SDK
如要在應用程式中加入 AdSense 搜尋廣告原生 SDK,請按照下列步驟操作:
在應用程式模組目錄中開啟 build.gradle
檔案。
針對最新版 SDK,在 dependencies
下新增建構規則:
dependencies {
implementation 'com.google.android.gms:play-services-afs-native:19.1.0'
}
確認頂層 build.gradle
包含 google()
的參照
複製到 maven { url "https://maven.google.com" }
請按照這些步驟操作
,在專案中加入 Google Play 獨立版本比對器外掛程式。
套用這個外掛程式,當 AFS 原生 SDK 處於
使用不相容的 Google Play 服務版本,而不再允許
但可能會導致執行階段異常終止或者,您也可以套用
failOnVersionConflict()
ResolutionStrategy
,當 Google Play 版本不相容時,就會發生建構錯誤
專案中會使用服務。
儲存變更,然後點選下方的「Sync Project with Gradle Files」。
按一下工具列
使用 AndroidX 而非 Android 支援資料庫
從 17.0.0
版 SDK 開始,應用程式必須使用 Jetpack (AndroidX)
而非 Android 支援資料庫。相容性需求:
- 將
com.android.tools.build:gradle
設為 3.2.1 以上版本。 - 將
compileSdkVersion
設為 28 以上。 - 更新應用程式以使用 Jetpack (AndroidX);請遵循 遷移至 AndroidX
類別
若要在應用程式中放送 AdSense 搜尋廣告原生廣告,請導入下列類別:
- 此類別負責以非同步方式請求廣告、快取,以及 擷取及顯示廣告
- 每個廣告情境都需要獨立的
SearchAdController
;舉例來說 一個畫面,在搜尋結果清單和其他項目旁顯示廣告 顯示廣告與特定產品的詳細資料一同顯示時,您應該 建立兩個不同的SearchAdController
例項,每個情況各一個。 - 您必須提供網站資源代碼 (發布商編號)、
要套用的樣式 ID
以及
SearchAdOptions
。建構函式中提供的Context
必須是包含SearchAdController
的Activity
,而 廣告會刊登View
。 - 呼叫
loadAds
以表示新的使用者搜尋並啟動非同步廣告 請求。從先前呼叫loadAds
載入的所有廣告都會從以下位置清除: 執行新的呼叫時,內部廣告快取。 - 使用
createAdView
建立View
,以顯示廣告素材。 - 廣告載入後,使用先前產生的
View
呼叫populateAdView
使用createAdView
,就能在該View
中顯示快取廣告。除了 要填入的View
,請提供adKey
,也就是要填入資料的任意字串 可明確識別廣告。這會將來自 使用adKey
的快取,因此當相同的adKey
傳遞至未來的呼叫時 至populateAdView
,系統都會傳回相同的廣告。舉例來說 第一次使用adKey="keyA"
呼叫populateAdView
並轉譯 登山靴廣告,每次呼叫populateAdView
adKey="keyA"
會填入同一支登山靴的廣告。(發起新通話:loadAds
會清除所有快取廣告和相關廣告鍵)。
- 將此物件傳遞至
SearchAdController
建構函式來自訂廣告方式 以便系統要求並顯示在SearchAdOptions.Builder
上呼叫build()
: 建立SearchAdOptions
物件。
View
- 建立
View
物件來存放廣告,方法是呼叫createAdView()
SearchAdController
。一次最多會顯示一個廣告,但相同的View
可以 以便日後放送不同的廣告
- 使用
SearchAdRequest
對SearchAdController
呼叫loadAds
方法 提出非同步廣告請求透過以下裝置呼叫build()
:SearchAdRequest.Builder
,用來建立SearchAdRequest
物件。
- 實作這個介面並傳遞至
SearchAdController
建構函式 註冊多個狀態的回呼。 - 注意:系統不會針對已取消的要求 (呼叫) 呼叫
AdListener
回呼 對loadAds
的呼叫,此物件在第一個呼叫之前,已被另一個對loadAds
的呼叫先佔 呼叫已解決)。
實作範例
以下範例說明如何在範例中建立 SearchAdController
Activity
。
// MainActivity.java implementation
// (MainActivity is a subclass of Activity)
SearchAdController adController;
// adContainer where we will place our ads in this example.
ViewGroup adContainer;
protected void onCreate(Bundle bundle){
super.onCreate(bundle);
adContainer = (ViewGroup) findViewById(...);
// Specify ad options (not required).
SearchAdOptions.Builder adOptionsBuilder = new SearchAdOptions.Builder();
adOptionsBuilder.setAdType(SearchAdOptions.AD_TYPE_TEXT);
adOptionsBuilder.setPrefetch(true);
adOptionsBuilder.setNumAdsRequested(3);
// Provide a callback to trigger when ads are loaded.
AdListener adListener = new AdListener() {
public void onAdLoaded() {
createAndShowAd();
}
};
// Instantiate the SearchAdController.
adController = new SearchAdController(this, "your-client-id", "your-style-id",
adOptionsBuilder.build(), adListener);
}
當使用者開始查詢時,請建立 SearchAdRequest
並呼叫 loadAds
SearchAdController
上,以便啟動非同步廣告請求。
// Create the request.
SearchAdRequest.Builder requestBuilder = new SearchAdRequest.Builder();
requestBuilder.setQuery("user query here");
// Load the ads.
adController.loadAds(requestBuilder.build());
執行 onAdLoaded
回呼,在廣告檢視畫面中填入已載入的廣告。
private void createAndShowAd() {
// Create a new view that will contain the ad.
View adView = adController.createAdView();
// Attach the new view to the view hierarchy.
adContainer.addView(adView);
// Display the ad inside the adView. We need to provide an adKey to
// indicate which ad is to be displayed in the adView. In this example,
// since we only have one ad, we can provide any constant string. However,
// if you intend to display multiple ads, each ad you wish to display
// should be given a unique adKey of your choosing.
adController.populateAdView(adView, "demoAd");
}
與該查詢相關的廣告現在就會顯示在 adView
中。
調查錯誤
SearchAdController
需要有 onAdLoaded()
的 AdListener
物件
方法,通知應用程式廣告已可顯示。我們也建議您
實作 onAdFailedToLoad()
方法,以便偵測並修正錯誤。
舉例來說,您可以使用下列 AdListener
來為
實作:
AdListener adListener = new AdListener() {
public void onAdLoaded() {
// Called when an ad is loaded.
Toast.makeText(MainActivity.this, "Ad Loaded",
Toast.LENGTH_SHORT).show();
Log.d(MainActivity.class.getSimpleName(), "Ad Loaded");
}
public void onAdLeftApplication() {
// Called when an ad leaves the application
// (to go to the browser for example).
Toast.makeText(MainActivity.this, "Ad Left Application",
Toast.LENGTH_SHORT).show();
Log.d(MainActivity.class.getSimpleName(), "Ad Left Application");
}
@Override
public void onAdFailedToLoad(int errorCode) {
// Called when an ad request failed.
Toast.makeText(MainActivity.this, "Ad Failed to Load: " + errorCode,
Toast.LENGTH_SHORT).show();
Log.e(MainActivity.class.getSimpleName(), "Ad Failed to Load: " +
errorCode);
}
};
onAdFailedToLoad()
回呼方法中使用的常數
是在 AdListener 中定義。