AdMob広告バナーが破壊されない

AdMobのUnityプラグインを使ってアプリ内に広告を表示しています。それなりにC#のコードを書く必要がありますが、簡単に広告を表示できるのでとても便利なものです。今回珍しいバグが発生したので記録に残しておこうと思います。

バグの内容

バナー広告が必要なくなったタイミングでバナーを削除します。公式マニュアルにもあるようにBannerViewクラスのメソッドDestroyを呼びます。

LoadAdの処理の完了しないときにこのDestroyを呼ぶと、破棄されないことがありました。(Destroyの後にロードが完了し、バナーが表示されてしまうということが起きました。Destroyの後には処理がされなくなるのが期待されるはずです。)

再現方法

バナー広告をロードしている最中にDestroyを呼べば発生する可能性があります。

私はGameObjectにバナー広告用のスクリプトをつけて使用しているので、シーンの切り替え時にバナーのDestroyが呼ばれていました。シーンの開始時にロードが始まり、ロードが終わると表示。シーンを切り替えるとGameObjectが破棄され、バナーも削除されるという流れです。

なので、バナーのあるシーンに入ってすぐに別のシーンに切り替えることで再現を狙っていました。

発生頻度

たぶん、相当珍しいと思います。

Nexus 5XのAndroid 8.1.0でしばらくの間バグが再現することがありましたが、いつの間にか起こらなくなってしまいました。

一度起きるとしばらく起きる感じですが、発生していたのは2日間くらいでした。

iOS(iPhone8、iPod touch)の方では再現しませんでした。

対処

バナーのイベント時に削除命令を追加しました。

OnAdLoadedかOnAdFailedToLoadがロード完了時に呼ばれるので、Destroyの呼び出しとともにイベントにもDestroyを呼び出すように登録しておきました。

以下のような感じです。