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'
<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.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>
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.
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>
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.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.
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();
}
});
}
}
@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.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();
}
});
}
}
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.
ReplyDeleteCause 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!
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