Dari A ke Z: Iklan Interstitial  Panduan kode dengan aplikasi demo

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.

Subscribe to receive free email updates:

0 Response to "Dari A ke Z: Iklan Interstitial  Panduan kode dengan aplikasi demo"

Posting Komentar