Blog Tutorial Android Bagi Pemula

Saturday, January 23, 2021

Cara (terbaru) Pasang Iklan Banner, Interstitial, dan RewardedAd AdMob

Tatkala membuka file gradle app,  sering kita menjumpai implementasi library di sorot berwarna (jika kita mengaktifkan inspeksi) yang mana menginstruksikan kita untuk melakukan pembaharuan library. Setelah melakukan pembaharuan sebuah library, ada saja peringatan mengenai class atau metode yang di deprecated (usang) yang tentunya bukanlah hal yang baik jika kita tidak mengganti class atau metode yang di deprecated tersebut.

Pada postingan-postingan terdahulu blog ini sudah membahas cara menerapkan iklan Banner, Interstitial dan Rewarded AdMob secara terpisah, dan disini kita akan membahas ulang ketiga jenis iklan tersebut sekaligus karena cara implementasi untuk Interstitial dan Rewarded pada postingan terdahulu sudah di deprecated, dan untuk Banner masih sama.

Deprecated bukan berarti class, metode atau kode tersebut tidak bisa dipakai lagi, masih tetap dapat dipakai namun tidak disarankan, biasanya karena berbahaya atau ada alternatif lain yang lebih baik.

Kita akan mulai dari iklan banner, namun sebelumnya import terlebih dahulu library Google AdMob SDK terbaru ke dalam file gradle app lalu sync gradle menggunakan internet:

implementation 'com.google.android.gms:play-services-ads:19.7.0'


Kemudian juga meta data ID Aplikasi di dalam tag <application> pada file AndroidManifest.xml. contoh ID Aplikasi berikut adalah sampel ID Aplikasi resmi Google AdMob. Jika Anda ingin lebih detil dan presisi lagi tentang bagaimana cara mendapatkannya, menempatkannya dan lain sebagainya, Anda bisa melihat postingan-postingan terdahulu berikut : Cara Memasang Iklan Interstitial AdMob, Cara Memasang Iklan Banner AdMob, dan Cara Memasang Iklan Video Reward AdMob.

<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-3940256099942544~3347511713"/>


IKLAN BANNER

Penerapan iklan banner merupakan yang termudah dan tersimpel diantara lainnya, kita hanya butuh sebuah komponen view AdView pada layout.xml, kemudian beberapa baris kode pada konteks (pada contoh ini MainActivity.java) iklan siap ditampilkan. Atau kita juga bisa mengimplementasikan seluruhnya pada konteks tanpa perlu membuat komponen AdView pada layout. Disini akan kita bahas keduanya.

Kita mulai dari menempatkan komponen AdView pada layout activity_mai.xml, dengan ukuran iklan "BANNER" (320x50). Ukuran lain yang bisa Anda gunakan selain BANNER adalah : LARGE_BANNER (320x100), MEDIUM_RECTANGLE (300x250), FULL_BANNER (468x60), LEADERBOARD (728x90), dan SMART_BANNER (Screen width x 32|50|90).

activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />


<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>


Kemudian pada MainActivity.java, pertama dengan inisialisasi MobileAds SDK, setelah itu variabel dan inisialisai AdView, lalu memuat iklan dengan  mengirim permintaan ke jaringan AdMob dengan AdRequest. Kita bisa menambahkan opsi listener untuk adView tersebut untuk mengetahui apakah iklan berhasil dimuat atau gagal.

Didalam listener, metode yang paling kita butuhkan ialah onAdLoaded dan onAdFailedToLoad.  Kita bisa menempatkan aksi didalam metode-metode tersebut. Misalnya didalam onAdLoaded (saat iklan berhasil dimuat) kita menampilkan pesan toast. Di dalam onAdFailedToLoad (iklan gagal dimuat) kita menempatkan pesan toast, saat iklan gagal dimuat kita bisa mengirim lagi permintaan iklan ke jaringan AdMob.

Jika Anda mengirim permintaan iklan kembali didalam metode onAdFailedToLoad, pastikan Anda membatasi jumlah permintaan, misalnya sebanyak 3 atau 4 kali. Anda bisa menggunakan integer untuk membatasi jumlah pemintaan ulang. Hal ini untuk menghindari permintaan iklan yang terus-menerus gagal dalam situasi seperti konektivitas jaringan terbatas.

Setelah penyiapan iklan banner selesai, kemudian kita juga perlu men destroy (menghancurkan) AdView dari aktifitas yang ditinggalkan pengguna aplikasi dengan meng override metode onDestroy. Metode onDestroy adalah metode untuk aktifitas yang sudah hancur. Berikut kode selengkapnya :

MainActivity.java :
package com.gwnbs.admobads;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.Toast;

import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.LoadAdError;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;

public class MainActivity extends AppCompatActivity {

private AdView adView;
private AdRequest adRequest;
private int loadBannerAgain;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

MobileAds.initialize(this, new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {
}
});

adView = findViewById(R.id.adView);
adRequest = new AdRequest.Builder().build();
adView.loadAd(adRequest);

adView.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
//Jika iklan berhasil dimuat
Toast.makeText(getApplicationContext(), "Iklan berhasil dimuat", Toast.LENGTH_SHORT).show();
}

@Override
public void onAdFailedToLoad(LoadAdError adError) {
//Saat iklan gagal dimuat
Toast.makeText(getApplicationContext(), "Iklan gagal dimuat, kode error : " + adError.getMessage(),
Toast.LENGTH_SHORT).show();

//Mengirim permintaan kembali sebanyak 3 kali.
loadBannerAgain += 1;
if (loadBannerAgain == 1 || loadBannerAgain == 2 || loadBannerAgain == 3) {
adView.loadAd(adRequest);
Toast.makeText(getApplicationContext(), "Permintaan ulang " + loadBannerAgain,
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "Sudah 3 kali request tapi tidak muncul juga. Saya stop request",
Toast.LENGTH_SHORT).show();
}
}

@Override
public void onAdClicked() {
//Saat user mengklik iklan
Toast.makeText(getApplicationContext(), "Anda telah mengklik iklan. Terimakasih",
Toast.LENGTH_SHORT).show();
}
});
}

@Override
protected void onDestroy() {
if (adView !=null) {
adView.destroy();
}
super.onDestroy();
}
}


Bagi Anda mungkin yang belum mengerti dan bertanya-tanya mengenai if(adView !=null) didalam metode onDestroy diatas, artinya adalah : null sendiri jika diartikan ke bahasa Indonesia adalah kosong / tidak ada, lalu maksud dari simbol "!=" berarti tidak. Jika diartikan kedalam bahasa percakapan maka "jika adview tidak kosong", artinya adview berhasil dimuat dan ditampilkan. Kita perlu membuat boolean seperti itu untuk menghindari crash.

Coba saja misalnya Anda langsung saja membuat adView.destroy tanpa boolean if, maka saat iklan gagal dimuat dan tampil (berarti adview nya null / kosong), kemudian Anda menekan tombol back atau tombol lain untuk pergi dari aktifitas tersebut maka aplikasi akan crash, dan jika Anda melihat di log cat penyebabnya adalah NullPointerException, yang artinya compiler tidak menemukan object tersebut.

Nah, pada onDestroy diatas, kita memberi instruksi compiler untuk menghancurkan adView jika adView nya tidak kosong, dan jika adView nya kosong atau tidak ada, compiler tidak melakukan apa-apa.


Sekarang kita implementasi AdView keseluruhan melalui konteks MainActivity.java. Pertama kita hilangkan dulu komponen AdView pada activity_main.xml diatas, lalu kita gantikan dengan sebuah layout, dalam contoh ini LinearLayout. Layout ini nantinya yang akan kita gunakan untuk menambahkan AdView melalui MainActivity.

activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />


<LinearLayout
android:id="@+id/layoutBannerAds"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="vertical"
android:gravity="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>


Selanjutnya pada MainActivity kita hanya merubah dan menambah beberapa kode saja. Kode yang kita gantikan adalah inisialisai findViewById menjadi new AdView, kemudian jika tadinya kita menyetel ukuran dan unit ID melalui activity_main.xml, disini kita menyetelnya dengan menggunakan setAdSize dan setAdUnitId. Setelah itu inisialisai LinearLayout lalu menambahkan adView kedalamnya.

MainActivity.java :
package com.gwnbs.admobads;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.LoadAdError;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;

public class MainActivity extends AppCompatActivity {

private AdView adView;
private AdRequest adRequest;
private int loadBannerAgain;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

MobileAds.initialize(this, new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {
}
});

adView = new AdView(this);
adRequest = new AdRequest.Builder().build();
adView.setAdSize(AdSize.BANNER);
adView.setAdUnitId("ca-app-pub-3940256099942544/6300978111");

LinearLayout layoutBannerAds = findViewById(R.id.layoutBannerAds);
layoutBannerAds.addView(adView);
adView.loadAd(adRequest);

adView.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
//Jika iklan berhasil dimuat
Toast.makeText(getApplicationContext(), "Iklan berhasil dimuat", Toast.LENGTH_SHORT).show();
}

@Override
public void onAdFailedToLoad(LoadAdError adError) {
//Saat iklan gagal dimuat
Toast.makeText(getApplicationContext(), "Iklan gagal dimuat, kode error : " + adError.getMessage(),
Toast.LENGTH_SHORT).show();

//Mengirim permintaan kembali sebanyak 3 kali.
loadBannerAgain += 1;
if (loadBannerAgain == 1 || loadBannerAgain == 2 || loadBannerAgain == 3) {
adView.loadAd(adRequest);
Toast.makeText(getApplicationContext(), "Permintaan ulang " + loadBannerAgain,
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "Sudah 3 kali request tapi tidak muncul juga. Saya stop request",
Toast.LENGTH_SHORT).show();
}
}

@Override
public void onAdClicked() {
//Saat user mengklik iklan
Toast.makeText(getApplicationContext(), "Anda telah mengklik iklan. Terimakasih",
Toast.LENGTH_SHORT).show();
}
});
}

@Override
protected void onDestroy() {
if (adView !=null) {
adView.destroy();
}
super.onDestroy();
}
}



IKLAN INTERSTITIAL

Pada library SDK Google AdMob terbaru ini, penerapan interstitial banyak mengalami perubahan. Mulai dari cara memuat iklan yang sekarang melalui Interstitial static (dulunya melalui inisialisai interstitial), lalu listener yang sekarang menggunakan ContentCallback, dan cara menampilkan iklan yang sekarang menggunakan boolean null.

Masih seperti yang dahulu, implementasi Interstitial sepenuhnya melalui konteks, kita hanya perlu menyediakan komponen tombol melalui layout untuk menampilkan iklan. Biasanya interstitial diterapkan developers pada transisi dari satu aktivitas ke aktivitas lainnya, artinya iklan muncul sebelum pengguna sampai ke aktifitas yang dituju. Atau pada game saat sebuah level permainan selesai, iklan muncul sebelum menuju ke level berikutnya.

Penerapan kemana pengguna akan dibawa setelah iklan ditutup adalah pada metode ContentCallback yaitu onAdDismissedFullScreenContent. Dahulu sebelum di deprecated bernama onAdClosed dengan metode listener sama dengan iklan banner.

Baik, misalnya di activity_main.xml kita memiliki tombol untuk menampilkan iklan.

activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<Button
android:id="@+id/buttonAd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Show Ad"
android:textSize="30sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>


Iklan Interstitial ini sifatnya setelah iklan berhasil dimuat dan berhasil dimunculkan, kita perlu mengirim permintaan baru lagi ke jaringan AdMob untuk iklan selanjutnya. Istilahnya "sekali pakai". Tidak seperti Banner yang berganti iklan secara otomatis.

Nah, di MainActivity, kita menerapkan permintaan iklan di dalam sebuah metode private, lalu metode ini kita panggil di onCreate untuk memuat iklan di awal saat aktifitas dibuka, dan saat iklan di ditutup oleh pengguna yaitu pada onAdDissmisedFullScreenContent, metode ini kita panggil lagi untuk memuat iklan selanjutnya.

Baik, pertama-tama dengan membuat global variabel class Interstitial, kemudian kita buat metode private untuk mengirim permintaan iklan dengan Interstitial static. Di dalam metode mengirim permintaan iklan ini, pada metode onAdLoaded, kita perlu menyamakan global varibel Interstitial dengan argumen variabel Interstitial yang ada dalam onAdLoaded.

Selanjutnya pada onAdFailedToLoad, kita perlu menyetel global varibel Interstitial tersebut ke null.

Kemudian metode menampilkan iklan yaitu pada tombol buttonAd, kita harus membuat boolean "jika interstitial tidak kosong" if (interstitial !=null) terlebih dahulu, kemudian didalamnya disematkan  interstitial.show(MainActivity.this) diikuti listener yaitu setOnFullScreenContentCallback.

Di dalam listener, pada onAdShowedFullScreenContent, variabel interstitial harus disetel lagi ke null supaya iklan yang sama tidak ada lagi. Lalu pada onAdDismissedFullScreenContent kita panggil lagi metode private permintaan iklan untuk memuat iklan baru. Selengkapnya terlihat seperti ini :

MainActivity.java :
package com.gwnbs.admobads;

import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.gms.ads.AdError;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.FullScreenContentCallback;
import com.google.android.gms.ads.LoadAdError;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;
import com.google.android.gms.ads.interstitial.InterstitialAd;
import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback;

public class MainActivity extends AppCompatActivity {

private InterstitialAd interstitialAd;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

MobileAds.initialize(this, new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {
}
});

loadInterstitial();

findViewById(R.id.buttonAd).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (interstitialAd !=null) {
interstitialAd.show(MainActivity.this);

interstitialAd.setFullScreenContentCallback(new FullScreenContentCallback(){
@Override
public void onAdDismissedFullScreenContent() {
// Saat iklan ditutup
loadInterstitial();
Toast.makeText(getApplicationContext(), "Iklan ditutup", Toast.LENGTH_SHORT).show();
}

@Override
public void onAdFailedToShowFullScreenContent(AdError adError) {
// Saat iklan gagal muncul
Toast.makeText(getApplicationContext(), "Iklan gagal muncul", Toast.LENGTH_SHORT).show();
}

@Override
public void onAdShowedFullScreenContent() {
// saat iklan sudah muncul
interstitialAd = null;
Toast.makeText(getApplicationContext(), "Iklan sedang tampil", Toast.LENGTH_SHORT).show();
}
});
}
}
});
}

private void loadInterstitial() {
InterstitialAd.load(this, "ca-app-pub-3940256099942544/1033173712", new AdRequest.Builder().build(),
new InterstitialAdLoadCallback() {
@Override
public void onAdLoaded(@NonNull InterstitialAd interstitial) {
// Saat iklan berhasil dimuat
interstitialAd = interstitial;
Toast.makeText(getApplicationContext(), "Iklan berhasil dimuat", Toast.LENGTH_SHORT).show();
}

@Override
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
// Saat iklan gagal dimuat
interstitialAd = null;
Toast.makeText(getApplicationContext(), "Iklan gagal dimuat. Kode gagal : " + loadAdError.getMessage(),
Toast.LENGTH_SHORT).show();
}
});
}
}


Jika Anda hendak menuju ke aktivitas lain saat iklan ditutup, Anda hanya perlu menambahkan startActivity(new Intent(MainActivity.this, namaActivityAnda.class)); di dalam onAdDismissedFullScreenContent. Dan juga Anda perlu menambahkannya didalam onAdFailedToLoad pada metode permintaan iklan jika memang fungsi utama tombol Anda adalah ke aktivitas lain. Karena tentu tidak lucu saat iklan berhasil dimuat dan tampil pengguna di arahkan ke aktivitas lain tersebut saat iklan ditutup namun tidak saat iklan gagal dimuat.

Lalu jika Anda hendak menampilkan iklannya pada tombol back perangkat, Anda override saja onBackPressed lalu pindahkan semua kode yang ada didalam metode klik tombol buttonAd ke dalam onBackPressed, seperti dibawah ini.

@Override
public void onBackPressed() {
if (interstitialAd !=null) {
interstitialAd.show(MainActivity.this);

interstitialAd.setFullScreenContentCallback(new FullScreenContentCallback(){
@Override
public void onAdDismissedFullScreenContent() {
// Saat iklan ditutup
loadInterstitial();
MainActivity.super.onBackPressed();
Toast.makeText(getApplicationContext(), "Iklan ditutup", Toast.LENGTH_SHORT).show();
}

@Override
public void onAdFailedToShowFullScreenContent(AdError adError) {
// Saat iklan gagal muncul
Toast.makeText(getApplicationContext(), "Iklan gagal muncul", Toast.LENGTH_SHORT).show();
}

@Override
public void onAdShowedFullScreenContent() {
// saat iklan sudah muncul
interstitialAd = null;
Toast.makeText(getApplicationContext(), "Iklan sedang tampil", Toast.LENGTH_SHORT).show();
}
});
} else {
super.onBackPressed();
}
}



IKLAN REWARDED

Jenis iklan ini hanya video. Penerapan iklan reward ini sama persis dengan penerapan Interstitial, bedanya hanya ada pada reward atau hadiah. Sesuai namanya, harus ada hadiah yang didapatkan pengguna setelah penyelesaian menonton iklan, hadiah tentu tergantuang sang developer, entah itu Anda akan memberi misalnya dalam game yaitu koin tambahan, uang, nyawa tambahan, akses premium dan lain sebagainya.

Jadi untuk penjelasan selain metode hadiah nanti, sama persis dengan Interstitial sehingga tidak perlu dijelaskan kembali.

Nah, dicontoh ini kita terapkan yang simpel saja, yaitu memberikan hadiah bonus uang 100  dollar kepada user. Kita akan menyimpan nilai uang pengguna menggunakan SharedPreferences. Penentuan dan pemberian hadiah diterapkan didalam metode onUserEarnedReward yang di override bersamaan saat menampilkan iklan yaitu :

rewardedAd.show(MainActivity.this, new OnUserEarnedRewardListener() {
//disini penentuan hadiah
});

Baik, kita mulai dari layout yaitu sebuah TextView untuk menampilkan nilai uang dan sebuah tombol untuk menampilkan iklan. Berikut isinya :

activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
android:id="@+id/textDollar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:fontFamily="serif"
android:gravity="center_vertical"
android:padding="20dp"
android:text="0"
android:textColor="@color/black"
android:textSize="35sp"
app:drawableStartCompat="@drawable/ic_dollar"
app:layout_constraintTop_toTopOf="parent" />

<Button
android:id="@+id/buttonBonus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Bonus $100"
android:textSize="30sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>


Seperti yang sudah disampaikan diatas bahwa cara mengirim permintaan iklan, menampilkan iklan untuk rewarded sama persis dengan Interstitial. Nah berikut isi selengkapnya pada MainActivity.java.

MainActivity.java :
package com.gwnbs.admobads;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.gms.ads.AdError;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.FullScreenContentCallback;
import com.google.android.gms.ads.LoadAdError;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.OnUserEarnedRewardListener;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;
import com.google.android.gms.ads.rewarded.RewardItem;
import com.google.android.gms.ads.rewarded.RewardedAd;
import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback;

public class MainActivity extends AppCompatActivity {

private RewardedAd rewardedAd;
private TextView textDollar;
private SharedPreferences preferences;
private int hadiah;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textDollar = findViewById(R.id.textDollar);
preferences = getSharedPreferences("REWARD", MODE_PRIVATE);
hadiah = preferences.getInt("hadiah", 0);
textDollar.setText(String.valueOf(hadiah));

MobileAds.initialize(this, new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {
}
});

loadRewarded();

findViewById(R.id.buttonBonus).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (rewardedAd != null) {
rewardedAd.show(MainActivity.this, new OnUserEarnedRewardListener() {
@Override
public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
// Memberi hadiah kepada pengguna saat iklan selesai ditonton
Toast.makeText(getApplicationContext(), "Anda dapat $100 bonus", Toast.LENGTH_SHORT).show();
hadiah += 100;
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("hadiah", hadiah);
editor.apply();
textDollar.setText(String.valueOf(hadiah));
}
});

rewardedAd.setFullScreenContentCallback(new FullScreenContentCallback(){
@Override
public void onAdShowedFullScreenContent() {
// Saat iklan sedang tampil
rewardedAd = null;
Toast.makeText(getApplicationContext(), "Iklan sedang tampil", Toast.LENGTH_SHORT).show();
}

@Override
public void onAdFailedToShowFullScreenContent(AdError adError) {
// Saat iklan gagal ditampilkan
Toast.makeText(getApplicationContext(), "Iklan gagal ditampilkan", Toast.LENGTH_SHORT).show();
}

@Override
public void onAdDismissedFullScreenContent() {
// Saat iklan ditutup
loadRewarded();
Toast.makeText(getApplicationContext(), "Iklan ditutup", Toast.LENGTH_SHORT).show();
}
});

} else {
Toast.makeText(getApplicationContext(), "Iklan null", Toast.LENGTH_SHORT).show();
}
}
});
}

private void loadRewarded() {
RewardedAd.load(this, "ca-app-pub-3940256099942544/5224354917",
new AdRequest.Builder().build(), new RewardedAdLoadCallback(){
@Override
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
// Iklan gagal dimuat
rewardedAd = null;
Toast.makeText(getApplicationContext(), "Iklan gagal dimuat", Toast.LENGTH_SHORT).show();
}

@Override
public void onAdLoaded(@NonNull RewardedAd reward) {
// Iklan berhasil dimuat
rewardedAd = reward;
Toast.makeText(getApplicationContext(), "Iklan berhasil dimuat", Toast.LENGTH_SHORT).show();
}
});
}
}




Baik, terimakasih atas kunjungan dan waktunya. Jika ada pertanyaan silahkan diposting dikolom komentar.
Share:

2 comments:

  1. Hi, your code helped me as no one has done! thanks a lot, but I still have a doubt, I want to show the interstitial each time user click the same button.

    Cause as you teach it only works the first time clicked, it would be perfect to add that code.

    I tried with backbutton code you showed but it didn't work.

    Ok whatever thanks a lot! I have been this interstitial code in all web, but just yours worked! not even android. developer code worked! thanks again!

    Regards!

    ReplyDelete
    Replies
    1. Hi, peluky! You need to send ad request again after the ad shown. From the code example above, after the ad is closed, a new ad request is made inside onAdDissmisedFullScreenContent by calling loadInterstitial (); . The ad should appear every time the button is clicked.

      Delete

Hubungi Saya

Name

Email *

Message *

Terlaris 30 Hari Terakhir