Iklan Google admob ditampilkan setelah di klik beberapa kali
Saya menggunakan google admob untuk menampilkan iklan video berhadiah di game saya. Setelah permainan selesai, tombol putar video diaktifkan. Jika pengguna mengkliknya, sebuah panel terbuka menanyakan "apakah Anda ingin menghidupkan kembali pemutar dengan menonton iklan". Ada dua pilihan, satu adalah dengan menekan "ok" dan yang lainnya untuk membatalkan "x". Masalahnya adalah saya harus mengklik "oke" beberapa kali agar iklan ditampilkan. Terkadang iklan tidak tampil sama sekali tidak peduli berapa kali saya mengklik "ok". Berikut kode yang saya miliki di adscript:
public class AdScript : MonoBehaviour
{
string App_ID = "ca-app-pub-123454545~12345678";
string Video_Ad_Id = "ca-app-pub-3940256099942544/5224354917";
private RewardedAd rewardedAd;
void Start()
{
MobileAds.Initialize(App_ID);
}
public void RequestRewardBasedVideo()
{
this.rewardedAd = new RewardedAd(Video_Ad_Id);
AdRequest request = new AdRequest.Builder().Build();
this.rewardedAd.LoadAd(request);
this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
this.rewardedAd.OnAdFailedToLoad += HandleRewardedAdFailedToLoad;
this.rewardedAd.OnAdOpening += HandleRewardedAdOpening;
this.rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow;
this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;
}
public void ShowVideoRewardAd()
{
if (this.rewardedAd.IsLoaded())
{
this.rewardedAd.Show();
}
}
public void HandleRewardedAdLoaded(object sender, EventArgs args)
{
MonoBehaviour.print("HandleRewardedAdLoaded event received");
}
public void HandleRewardedAdFailedToLoad(object sender, AdErrorEventArgs args)
{
MonoBehaviour.print(
"HandleRewardedAdFailedToLoad event received with message: "
+ args.Message);
}
public void HandleRewardedAdOpening(object sender, EventArgs args)
{
MonoBehaviour.print("HandleRewardedAdOpening event received");
}
public void HandleRewardedAdFailedToShow(object sender, AdErrorEventArgs args)
{
MonoBehaviour.print(
"HandleRewardedAdFailedToShow event received with message: "
+ args.Message);
}
public void HandleRewardedAdClosed(object sender, EventArgs args)
{
this.RequestRewardBasedVideo();
}
public void HandleUserEarnedReward(object sender, Reward args)
{
GameManager.instance.ReceiveReward();
}
}
Fungsi RequestRewardBasedVideo () ditambahkan ke tombol putar video dan ShowVideoRewardAd () ditambahkan ke tombol "ok". Iklan percobaan ditampilkan dengan benar tetapi masalahnya adalah saya harus menekan tombol ok beberapa kali agar iklan dapat ditampilkan. Saya tidak yakin mengapa ini terjadi. Dapatkah seseorang tolong bantu?
Jawaban
Iklan dapat membutuhkan waktu beberapa saat untuk dimuat. Seperti, lama sekali. Faktanya, selama ini saya biasanya mulai memuat iklan pertama saya pada peluncuran aplikasi, dan mulai memuat iklan berikutnya segera setelah iklan sebelumnya selesai diputar.
Dugaan saya adalah ini:
public void ShowVideoRewardAd()
{
if (this.rewardedAd.IsLoaded())
{
this.rewardedAd.Show();
}
}
hanya melewatkan panggilan ke Tampilkan berulang setiap kali Anda mengetuk tombol, hingga iklan benar-benar dimuat.
Saran saya adalah untuk tidak menampilkan opsi untuk menonton iklan kecuali IsLoaded mengembalikan true. Atau, Anda dapat memunculkan dialog "harap tunggu" saat pengguna mengetuk untuk menonton video jika IsLoaded salah, dan menunggu HandleRewardedAdLoaded atau HandleRewardedAdFailedToLoad dipanggil.
Saya akan mengambil tebakan liar di sini (sebenarnya dua tebakan).
Tebakan pertama adalah bahwa Kerangka iklan belum sepenuhnya diinisialisasi setelah Anda mencoba memuat iklan pertama Anda. Berdasarkan dokumentasi , tampaknya Anda bisa meneruskan callback ke MobileAds.Initialize();
yang akan dipanggil setelah inisialisasi selesai. Anda harus menunggu sampai inisialisasi selesai dengan benar sebelum meminta iklan pertama Anda. Pada pandangan pertama, dokumentasinya sangat buruk tentang bagaimana melakukan ini dengan tepat, jadi saya sarankan Anda menggali lebih jauh untuk menemukan lebih banyak tentang bagaimana Anda bisa mencapai ini.
Tebakan kedua adalah Anda mencoba memuat iklan sebelum menyetel penangan peristiwa. Jika kita melihat kembali dokumentasi , tampaknya mereka melakukan panggilan ke
// Create an empty ad request.
AdRequest request = new AdRequest.Builder().Build();
// Load the rewarded ad with the request.
this.rewardedAd.LoadAd(request);
setelah mereka menyiapkan pendengar acara. Tebakannya adalah bahwa segera setelah Anda memintanya ke "LoadAd", kerangka kerja mengambil daftar pendengar pada saat itu, dan melakukan hal-hal asinkron dengannya dan memanggil metode yang telah Anda berikan pada saat panggilan. Tidak ada pendengar pada saat panggilan ke LoadAd, jadi mungkin inilah mengapa Anda melihat "tidak ada yang terjadi" dan Anda perlu "mengetuk beberapa kali", karena pada percobaan pertama, tidak ada pendengar, dan pendengar akan menjadi di sana hanya untuk kedua kalinya.