クリアメモリ

プログラミングやモーショングラフィックス、便利なアプリケーションなど雑多に記録するブログ

【Unity】BannerView.Destroy()でAdMobバナーが消えない |AdMob広告がクラッシュする時の対処

f:id:clrmemory:20170422155812p:plain 

先日UnityアプリにAdMobを導入するという記事で、AdMobの導入方法を紹介しました。

その中で、インタースティシャル広告の表示が終了したら、削除しなければならない理由を説明しました。

 

今回は、AdMob広告でクラッシュしないようにする方法を紹介します。

 

 

 

はじめに

 

まずクラッシュというのは、アプリの動作が極端に重くなり「アプリが落ちる」ことです。

 

インタースティシャル広告だけでなくバナー広告も複数存在してしまうことで、アプリが重くなったりクラッシュしたりしてしまいます。

 

 

AdMob広告が原因でアプリが落ちることを回避するには、UnityのStart()が呼ばれるタイミングを理解し、うまく使いこなさなければなりません。

 

 

バナー広告の削除

 

バナー広告が複数存在しないようにするためには、シーンを跨ぐ時にバナーを削除する必要があります。

 

バナーの削除には 「BannerView.Destroy()」で削除することができます。

ですが、Unityの性質上別のシーンにあるオブジェクトを操作することはできません。

 

そういった時にはDontDestroyOnLoad()などを使うのですが、AdMobでそれをやってしまうと、オブジェクトが複数存在するのでクラッシュします。

そこでシーンを跨ぐ前に削除しなければなりません。

 

例えば、「Start」というボタンを押すとゲームのシーンに移動するというコードがあった場合、

 

「Startを押されたかを判定する」タイミングでBannerView.Destroy()を呼び出します。

 

必ずシーンを跨ぐ前にしてください。

シーンを跨いだ後にBannerView.Destroy()を呼び出しても、AdMobバナー自体が存在しないのでバナーを消すことができません。

 

Start()が呼ばれるタイミング

 

では、どのような処理を作成すれば良いのかというと、

「すべてのシーンにAdMobバナーを作成する」

というものになります。

 

AdMobのバナー広告のオブジェクトはシーンが変わる時に自動的に削除されます。

さらにシーンを跨ぐ時にBannerView.Destroy()を呼ぶことで、バナー自体も削除できます。

 

 

つまり、シーンが変わるたびに新しいバナー広告を呼び出すことで複数存在することなくバナーを表示できます。

「Start()はシーンロード時に1度だけ呼び出す」というものです。

 

ですので、Application.loadedLevelなどで同じシーンを呼び出した時にもBannerView.Destroy()を呼びださなければなりません。

 

AdMobが原因でクラッシュしてしまう時には、BannerView.Destroy()が正しく呼びだされているかを確認しましょう。

まとめ

 

今回の方法を使えば、AdMobでクラッシュすることなくアプリを作成することができると思います。

 

ちなみにクラッシュとはアプリが落ちることという説明をしましたが、アプリがフリーズすることもあります。

iOSで実機テストをする場合、クラッシュしたタイミングでConsole内に表示されるので確認しましょう。

 

 

ではまた。