Google Mobile Ads SDK 也支援自訂搜尋樣式。如果您的應用程式 目前已經採用 Google Mobile Ads SDK,建議您改用 AFSMA SDK 版本 。
如果您要從 18.1.0 以下版本升級至 19.0.0 以上版本,請參閱遷移指南。
必要條件
本導入指南假設您熟悉下列項目:
- AdSense 自訂搜尋廣告 使用自訂搜尋樣式
- Android 應用程式開發
匯入 AFS Native 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
設為 v3.2.1 以上版本。 - 將
compileSdkVersion
設為 28 以上。 - 更新應用程式以使用 Jetpack (AndroidX);請遵循 遷移至 AndroidX
類別
如要在應用程式中放送 AFS 原生廣告,請實作下列類別:
- 這個類別負責非同步要求廣告、快取及擷取廣告,以及顯示廣告。
- 每個廣告情境都需要獨立的
SearchAdController
;舉例來說 一個畫面,在搜尋結果清單和其他項目旁顯示廣告 顯示廣告與特定產品的詳細資料一同顯示時,您應該 建立兩個不同的SearchAdController
例項,每個情況各一個。 - 您必須提供網站資源代碼 (發布商編號)、
要套用的樣式 ID
以及
SearchAdOptions
。建構函式中提供的Context
必須是包含SearchAdController
的Activity
,也是您要放置廣告View
的位置。 - 呼叫
loadAds
可表示新使用者搜尋,並發出非同步廣告要求。當您發出新的呼叫時,系統會從內部廣告快取中清除先前對loadAds
呼叫時載入的廣告。 - 使用
createAdView
建立View
,以便顯示廣告素材。 - 廣告載入後,請使用先前透過
createAdView
產生的View
呼叫populateAdView
,將已快取的廣告算繪至該View
。除了要填入的View
之外,請提供adKey
,也就是用來專屬識別廣告的任意字串。這會將來自 使用adKey
的快取,因此當相同的adKey
傳遞至未來的呼叫時 至populateAdView
,系統都會傳回相同的廣告。舉例來說,如果第一次呼叫populateAdView
時使用adKey="keyA"
,並顯示登山靴的廣告,那麼之後每次透過adKey="keyA"
呼叫populateAdView
時,都會填入相同的登山靴廣告。(發起新通話:loadAds
會清除所有快取廣告和相關廣告鍵)。
- 將此物件傳遞至
SearchAdController
建構函式來自訂廣告方式 以便系統要求並顯示在SearchAdOptions.Builder
上呼叫build()
: 建立SearchAdOptions
物件。
View
- 在
SearchAdController
上呼叫createAdView()
,藉此建立View
物件,以便保留廣告。一次最多會顯示一個廣告,但相同的View
可以 以便日後放送不同的廣告
- 使用
SearchAdRequest
在SearchAdController
上呼叫loadAds
方法,以便啟動非同步廣告請求。透過以下裝置呼叫build()
:SearchAdRequest.Builder
,用來建立SearchAdRequest
物件。
- 實作這個介面並傳遞至
SearchAdController
建構函式 註冊多個狀態的回呼。 - 注意:系統不會針對已取消的要求 (對
loadAds
的呼叫,在第一次呼叫解析前已遭其他對loadAds
的呼叫搶先) 呼叫AdListener
回呼。
實作範例
以下範例說明如何在範例 Activity
中建立 SearchAdController
。
// 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
,並在 SearchAdController
上呼叫 loadAds
,以啟動非同步廣告請求。
// 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
需要使用 AdListener
物件,並搭配 onAdLoaded()
方法,才能通知應用程式廣告已準備好顯示。我們也建議您
實作 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);
}
};
AdListener 中定義了 onAdFailedToLoad()
回呼方法使用的常數。