Google Mobile Ads Unity Pluginをインポートする
アプリでAdmobの広告を表示するのであれば、Google Mobile Ads Unity Pluginをインポートしておく必要があります。
アプリをアップデートする場合、古いバージョンのGoogle Mobile Adsのままだとうまく動かなかったり、Admobやストアから警告が来ることがあるのでGoogle Mobile Adsもアップデートするようにしましょう。
ただし、Google Mobile Adsは最新のバージョンの場合うまく動こないこともあるので、なるべく安定版を使うようにしましょう。
広告表示処理を実装する
Google Mobile Adsをインポートしたら広告を表示する処理を実装します。
Google Mobile Adsのバージョンが変わっても実装方法はほぼほぼ変わらないのですが、メジャーアップデートがされている場合は初期化方法やメソッド名などが変わっているときがあります。
いちおう都度確認するようにしましょう(公式サイトと丁寧に説明してくださっているサイトの両方見ておくとわかりやすくて吉)。
トラブルシューティング
実機で広告が表示されない
原因はいろいろ考えられると思いますが、とにもかくにも実機の再起動は必ずやってみましょう。
Google Mobile Adsのコールバックメソッドはメインスレッドで呼ばれないことに注意する
UnityのAPIはメインスレッド(StartメソッドやUpdateメソッド)で呼び出される必要がありますが、Google Mobile Adsはメインスレッドで処理されていません。
そのため、インタースティシャルなどの広告を閉じた時などに呼び出されるコールバックメソッドにUnityのAPIを呼び出すコードを書くと以下のような問題が生じる可能性があります。
コルーチンなどもUnityのAPIなので、単に処理のタイミングをずらそうと思ってもコルーチンの実行で失敗します。
とにもかくにもGoogle Mobike Adsのコールバックの中にUnityAPIを呼び出す処理は書かないようにしましょう。(対処は後述)
(以下の現象はAndroidデバイスで検証した内容です)
コールバックメソッドが呼ばれない
コールバックメソッドが呼び出されないという現象があります。正確にはコールバックメソッドが呼び出されないというより、コールバックメソッドの中にメインスレッドでしか呼べないUnityAPIが含まれていて、エラーが出ている可能性があります。
ただ、なぜかビルドするときに"Development Build"にチェックを外していると回避できたりすることもあります(根本解決にはなりませんので注意)。
アプリが落ちる
コールバックメソッドの中にResources.Load系の処理があるとアプリが落ちるという現象がありました。
しかもログにも特にエラーが表示されないので原因を知るのが大変でした。
サウンド系のエラーが出まくる
コールバックメソッドでサウンド系の処理があるとログにエラーが表示されます。特にアプリの動作に影響はありませんでしたが、やっぱり気持ち悪いです。
Google Mobile Adsのコールバックメソッドをメインスレッドで呼ぶ方法
いろいろと方法があるかと思いますが、ざっくりと2つ。
- フラグ変数などを使ってUpdateメソッドから実行する。
- MobileAdsEventExecutor.ExecuteInUpdateを使ってUpdateメソッドで実行する(イベントをキューしてUpdateメソッドで実行しているらしいですが、どこのUpdateメソッドなのかはよくわからんです)。
MobileAdsEventExecutor.ExecuteInUpdate(() => { 処理 });