Dari A ke Z: Iklan Interstitial
Panduan kode dengan aplikasi demo
Perkenalan
Dokumentasi berikut adalah walkthrough iklan Interstitial AdMob.
Step implementasi dapat berubah karena update. Silahkan cek info terbaru di halaman berikut:
Prerequisites
Versi terbaru Android Studio dan Google Play Services.
Download aplikasi demo
Untuk kebutuhan pembelajaran, silahkan download aplikasi demo disini.
Aplikasi demo berikut memiliki tiga views , TITLE, GAME dan RESULT. Kamu akan mengimplementasi AdMob di aplikasi demo berikut.
#1: Cara yang sering digunakan developer
Instruksi:
- Iklan interstitial sudah diimplementasikan di project demo. Cek implementasi createAndLoadInterstitialAd() di ResultActivity .
- Panggil createAndLoadInterstitialAd() method di onCreate method di ResultActivity .
Setelah cek kode, silahkan bangun project dan jalankan aplikasi.
Bagaimana implementasi diatas dapat menyebabkan pelanggaran kebijakan?
- Ad request berjalan secara asynchronous , sehingga iklan bisa load dan dimunculkan secara tiba-tiba.
- Hal ini menyebabkan Accidental Click
#2: Cara mencegah pelanggaran
Cara fix implementasi untuk mencegah accidental click :
- Jangan memunculkan interstitial secara otomatis ketika iklan sudah load.
- Setelah user klik tombol RETRY, cek jika iklan interstitial sudah load atau belum.
- IF : iklan interstitial sudah load: tampilkan iklan interstitial.
- ELSE : tampilkan GAME view .
- Tampilkan GAME view ketika iklan interstitial ditutup user.
Silahkan modifikasi kode interstitial sebagai berikut:
- Hapus ad listener di createAndLoadInterstitialAd() method.
- Di onRetryButtonClick() method, cek jika iklan interstitial sudah di load atau belum.
- IF : iklan interstitial sudah load: tampilkan iklan interstitial.
- ELSE : panggil startGameActivity() method.
- Di ad listener onAdClosed() , panggil startGameActivity() method supaya game berikutnya dapat dimulai ketika user menutup iklan.
Mengubah createAndLoadInterstitialAd() method
Silahkan hapus line kuning berikut di createAndLoadInterstitialAd() method di ResultActivity.
/**
* Create InterstitialAd object and load ad.
*/
private void createAndLoadInterstitialAd() {
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.addTestDevice("YOUR_DEVICE_HASH")
.build();
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
mInterstitialAd.show();
}
});
mInterstitialAd.loadAd(adRequest);
}
Mengubah onRetryButtonClick() method
Ubah onRetryButtonClick() method di the ResultActivity sebagai berikut:
/**
* Called when "RETRY" button is clicked.
* Show Interstitial Ad when ad has been loaded. Otherwise start Game Activity.
*/
public void onRetryButtonClick(View view) {
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
// When ad is closed, start Game Activity.
super.onAdClosed();
startGameActivity();
}
});
mInterstitialAd.show();
} else {
startGameActivity();
}
}
Implementasi diatas masih belum optimal, mengapa?
- Jika user klik tombol RETRY terlalu cepat, iklan tidak dimunculkan karena belum sempat loading.
- Pendapatan tidak optimal.
#3: Cara yang paling optimal (pre-caching)
Silahkan modifikasi iklan interstitial sebagai berikut:
- Buat sebuah subclass dari Application class untuk sharing object iklan interstitial yang sama diantara class yang berbeda.
- Load iklan di metode onCreate() di GameActivity .
- Hapus line yang tidak dibutuhkan dari ResultActivity dan modifikasi kode untuk menggunakan ad object Interstitial yang di share bersama.
Tambahkan "MyApplication" Class
Tambahkan sebuah subclass Application (MyApplication) dan buat method helper yang memuat (load)/ membalikkan iklan interstitial.
package com.example.tapin10s;
import android.app.Application;
import android.util.Log;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;
/**
* This is a subclass of Application used to provide shared objects for this app.
*/
public class MyApplication extends Application {
private InterstitialAd mInterstitialAd;
@Override
public void onCreate() {
super.onCreate();
}
/**
* Load InterstitialAd when InterstitialAd hasn't been loaded yet.
*/
synchronized public void loadInterstitialAd() {
if (mInterstitialAd == null || !mInterstitialAd.isLoaded()) {
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice("YOUR_DEVICE_HASH")
.build();
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdFailedToLoad(int errorCode) {
super.onAdFailedToLoad(errorCode);
Log.d("InterstitialAd", "onAdFailedToLoad with error: " +
errorCode);
}
@Override
public void onAdLoaded() {
super.onAdLoaded();
Log.d("InterstitialAd", "onAdLoaded");
}
});
mInterstitialAd.loadAd(adRequest);
} else {
Log.d("InterstitialAd", "InterstitialAd has been loaded");
}
}
/**
* Get the InterstitialAd for this Application.
*/
synchronized public InterstitialAd getInterstitialAd() {
if (mInterstitialAd == null) {
loadInterstitialAd();
}
return mInterstitialAd;
}
}
Ubah AndroidManifest.xml
Untuk menggunakan class MyApplication, silahkan tambahkan line hijau berikut di element aplikasi:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.tapin10s" >
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".TitleActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".GameActivity" >
</activity>
<activity android:name=".ResultActivity" >
</activity>
</application>
</manifest>
Load InterstitialAd lebih awal
Untuk load InterstitialAd, tambahkan line hijau berikut di onCreate method di GameActivity.
// Get the MyApplication object.
MyApplication application = (MyApplication) getApplication();
// Load InterstitialAd.
application.loadInterstitialAd(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
setTitle(screenName);
resetGame();
startCountDown();
// Get the MyApplication object.
MyApplication application = (MyApplication) getApplication();
// Load InterstitialAd.
application.loadInterstitialAd();
}
Ubah ResultActivity
Karena sekarang kita menggunakan object yang di share di class MyApplication, silahkan hapus line kuning di ResultActivity.
public class ResultActivity extends AppCompatActivity {
private static final String screenName = "RESULT";
private InterstitialAd mInterstitialAd;
/**
* Disable back button.
*/
@Override
public void onBackPressed() {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
setTitle(screenName);
showResult();
loadBannerAd();
createAndLoadInterstitialAd();
}
/**
* Load Banner Ad.
*/
private void loadBannerAd() {
AdView mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.addTestDevice("YOUR_DEVICE_HASH")
.build();
mAdView.loadAd(adRequest);
}
/**
* Create InterstitialAd object and load ad.
*/
private void createAndLoadInterstitialAd() {
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.addTestDevice("YOUR_DEVICE_HASH")
.build();
mInterstitialAd.loadAd(adRequest);
}
Untuk memperoleh object InterstitialAd yang di share, silahkan tambahkan line hijau berikut di onRetryButtonClick() method.
/**
* Called when "RETRY" button is clicked.
*/
public void onRetryButtonClick(View view) {
// Get the MyApplication object.
MyApplication application = (MyApplication) getApplication();
// Obtain the shared InterstitialAd object.
InterstitialAd mInterstitialAd = application.getInterstitialAd();
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
// When ad is closed, start Game Activity.
super.onAdClosed();
startGameActivity();
}
});
mInterstitialAd.show();
} else {
startGameActivity();
}
}
Sekian, terimakasih telah mengunjungi Blog Catatan Aan. Semoga bermanfaat dan selamat mencoba.
HALAMAN SELANJUTNYA:
ConversionConversion EmoticonEmoticon