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を呼び出すように登録しておきました。
以下のような感じです。
コメント