AdMobのバナー広告(bannerView)がシーン切替後も消えない
先日リリースしたAndroid用ゲームで、画面上部に設置したAdMobのバナー広告(bannerView)表示の不具合がありました。
本来は、バナー広告が表示されるのはタイトル画面のみで、他のシーンへ移動するボタンを押した際に下記コードを使い bannerView を破棄/削除するようにしていました。
1 |
bannerView.Destroy (); |
リリース後に実機で確認すると、広告が読み込まれて表示するより前に他のシーンへ移動してしまうと、シーン遷移後に広告の読み込みが完了しバナー広告が表示されてしまう問題が起きていました。
テスト時は広告が表示されるかどうかを確認していたので、表示前のシーン遷移をチェックしていなかったのかもしれません。
ちなみに、この問題の修正時に実機で確認したところ、iOS(iPhone)では起きない現象みたいです。
色々試した結果、対処方法はごくシンプルで下記コードになります。
1 2 |
bannerView.Hide(); bannerView.Destroy(); |
Android Studioに実機を繋いだ状態でログを見てみると、シーン遷移後に広告の読み込みが完了しているのは同じなのですが、Hideの効果で見えなくなっていました。
隠すだけでは次第に重複して処理が重たくなるんじゃないか?と思い、確認する為に下記のコードを入れてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
private void RequestBanner() { #if UNITY_ANDROID string adUnitId = "ca-app-pub-3940256099942544/6300978111"; #elif UNITY_IPHONE string adUnitId = "ca-app-pub-3940256099942544/2934735716"; #else string adUnitId = "unexpected_platform"; #endif if (bannerView != null) { bannerView.Destroy(); Debug.Log("ad:バナー広告作成前に既にあるBannerViewを破棄する"); } else if (bannerView == null) { Debug.Log("ad:バナー広告作成前にBannerViewは存在しない"); } // Create a 320x50 banner at the top of the screen. bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Top); // Create an empty ad request. AdRequest request = new AdRequest.Builder().Build(); // Load the banner with the request. bannerView.LoadAd(request); } |
※ログをフィルタリングできるように、広告関連の Debug.Log の先頭に “ad:” と記述するようにしています。
シーン遷移後に広告の読み込みが完了した(隠れて見えない)状態で、元のタイトル画面に戻ってみました。
正常に広告が表示され、ログでは else if (bannerView == null) の方の結果の、”ad:バナー広告作成前にBannerViewは存在しない” と表示されていました。
この修正を含んだ、アプリのアップデートをしています。
ディスカッション
コメント一覧
まだ、コメントがありません