Google Mobile Ads SDK juga mendukung gaya penelusuran kustom. Jika aplikasi Anda sudah menggunakan Google Mobile Ads SDK, sebaiknya gunakan versi AFSMA SDK.
Jika Anda melakukan upgrade ke versi 19.0.0 atau yang lebih baru dari 18.1.0 atau sebelumnya, lihat panduan migrasi kami.
Prasyarat
Panduan penerapan ini mengasumsikan bahwa Anda sudah memahami hal berikut:
- Iklan Penelusuran Khusus AdSense dengan gaya penelusuran kustom
- Pengembangan aplikasi Android
Mengimpor AFS Native SDK
Menambahkan SDK
Untuk menambahkan AFS Native SDK ke aplikasi Anda, lakukan hal berikut:
Buka file build.gradle
di dalam direktori modul aplikasi Anda.
Tambahkan aturan build baru di bagian dependencies
untuk versi terbaru SDK:
dependencies {
implementation 'com.google.android.gms:play-services-afs-native:19.1.0'
}
Pastikan build.gradle
tingkat teratas Anda berisi referensi ke repositori google()
atau ke maven { url "https://maven.google.com" }
.
Ikuti petunjuk ini
untuk menyertakan Plugin Pencocokan Versi Mandiri Google Play dalam project Anda.
Menerapkan plugin ini akan menyebabkan error build gradle saat AFS Native SDK
digunakan dengan versi Layanan Google Play yang tidak kompatibel, bukan mengizinkan
aplikasi di-build, tetapi berpotensi menyebabkan error runtime. Atau, terapkan
failOnVersionConflict()
ResolutionStrategy
ke project Anda untuk menyebabkan error build saat versi Layanan Google Play
yang tidak kompatibel digunakan dalam project Anda.
Simpan perubahan, lalu klik Sync Project with Gradle Files di
toolbar.
Menggunakan AndroidX, bukan Android Support Library
Mulai versi 17.0.0
SDK, aplikasi Anda harus menggunakan Library Jetpack (AndroidX),
bukan Android Support Library. Persyaratan kompatibilitas:
- Tetapkan
com.android.tools.build:gradle
ke v3.2.1 atau yang lebih baru. - Tetapkan
compileSdkVersion
ke 28 atau yang lebih baru. - Update aplikasi Anda untuk menggunakan Jetpack (AndroidX); ikuti petunjuk dalam Bermigrasi ke AndroidX.
Class
Untuk menayangkan iklan native AFS di aplikasi Anda, terapkan kelas berikut:
- Kelas ini bertanggung jawab untuk meminta iklan secara asinkron, menyimpan dalam cache dan mengambil iklan, serta merender iklan.
- Setiap konteks iklan memerlukan
SearchAdController
yang terpisah; misalnya, jika Anda memiliki layar yang menampilkan iklan bersama dengan daftar hasil penelusuran dan layar lain yang menampilkan iklan bersama detail untuk produk tertentu, Anda harus membuat dua instance terpisah dariSearchAdController
, satu untuk setiap kasus. - Konstruktor harus memberikan kode properti web (ID penayang), ID gaya yang akan diterapkan ke iklan yang ditampilkan, dan
SearchAdOptions
.Context
yang disediakan dalam konstruktor harus berupaActivity
yang berisiSearchAdController
dan di mana Anda akan menempatkanView
iklan. - Panggil
loadAds
untuk menunjukkan penelusuran pengguna baru dan memulai permintaan iklan asinkron. Semua iklan yang dimuat dari panggilan sebelumnya keloadAds
akan dihapus dari cache iklan internal saat panggilan baru dilakukan. - Buat
View
dengancreateAdView
untuk menampilkan materi iklan. - Setelah iklan dimuat, panggil
populateAdView
denganView
yang sebelumnya dibuat dengancreateAdView
untuk merender iklan yang di-cache keView
tersebut. SelainView
yang akan diisi, berikanadKey
, yaitu string arbitrer untuk mengidentifikasi iklan secara unik. Hal ini mengaitkan materi iklan tertentu yang ditampilkan dari cache denganadKey
tersebut, sehingga jikaadKey
yang sama diteruskan ke panggilan mendatang kepopulateAdView
, iklan yang sama akan ditampilkan. Misalnya, jikapopulateAdView
dipanggil untuk pertama kalinya denganadKey="keyA"
dan merender iklan untuk sepatu bot lintas alam, setiap panggilan berikutnya kepopulateAdView
denganadKey="keyA"
akan mengisi iklan yang sama untuk sepatu bot lintas alam. (Melakukan panggilan baru keloadAds
akan menghapus semua iklan yang di-cache dan kunci iklan terkait.)
- Teruskan objek ini ke konstruktor
SearchAdController
untuk menyesuaikan cara iklan diminta dan ditampilkan. Panggilbuild()
diSearchAdOptions.Builder
untuk membuat objekSearchAdOptions
.
View
- Buat objek
View
untuk membekukan iklan dengan memanggilcreateAdView()
padaSearchAdController
. Menampilkan maksimal satu iklan dalam satu waktu, tetapiView
yang sama dapat didaur ulang untuk menampilkan iklan yang berbeda dari waktu ke waktu.
- Panggil metode
loadAds
diSearchAdController
denganSearchAdRequest
untuk memulai permintaan iklan asinkron. Panggilbuild()
padaSearchAdRequest.Builder
untuk membuat objekSearchAdRequest
.
- Implementasikan antarmuka ini dan teruskan ke konstruktor
SearchAdController
untuk mendaftarkan callback untuk beberapa status. - Catatan: Callback
AdListener
tidak akan dipanggil pada permintaan yang dibatalkan (panggilan keloadAds
yang didahului oleh panggilan lain keloadAds
sebelum panggilan pertama diselesaikan).
Contoh implementasi
Contoh di bawah menunjukkan pembuatan SearchAdController
dalam contoh
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);
}
Saat pengguna memulai kueri, buat SearchAdRequest
dan panggil loadAds
di SearchAdController
untuk memulai permintaan iklan asinkron.
// Create the request.
SearchAdRequest.Builder requestBuilder = new SearchAdRequest.Builder();
requestBuilder.setQuery("user query here");
// Load the ads.
adController.loadAds(requestBuilder.build());
Terapkan callback onAdLoaded
Anda untuk mengisi iklan yang dimuat ke tampilan iklan.
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");
}
Iklan yang terkait dengan kueri tertentu sekarang akan muncul di adView
.
Menyelidiki error
SearchAdController
memerlukan objek AdListener
dengan metode onAdLoaded()
untuk memberi tahu aplikasi Anda bahwa iklan siap ditampilkan. Anda juga harus
menerapkan metode onAdFailedToLoad()
agar dapat mendeteksi dan memperbaiki error.
Misalnya, Anda dapat menggunakan AdListener
berikut untuk men-debug
implementasi Anda:
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);
}
};
Konstanta yang digunakan dalam metode callback onAdFailedToLoad()
ditentukan di AdListener.