Unity Adsを使う注意点

Unity Adsを使う上で気をつけた方が良いことをまとめておきます。

動画広告のためか通信速度が速くないと、広告の取得ができなくなります。 3G回線ではかなり厳しいかと思います。

サンプルはあくまで最低限の実装であり、これで動くというものです。これだけのスクリプトで動画の広告が載せられるということは素晴らしいのですが、実用的にはもう少し厄介な問題を解決する必要があります。サンプルをそのまま使っても問題は起きません。ただ表示されないときの処理が単純すぎるだけです。

実はAdvertisement.Initialize が重要です。初期化に失敗することがあり、このメソッドは一度しか呼ぶ意味がないようになっています。
通信できない状況でAdvertisement.Initialize を呼ぶと100%失敗します。一度しか呼ぶ意味がないというのはメソッドの内部で呼び出したかどうかのフラグを見ており、一度目以外処理が行わないようになっているからです。
つまり、Advertisement.Initialize を呼び出したときに通信がうまくいかないと、一度ゲームを終了させない限りUnity Adsは使えないということになります。
このあたりのことはソースを見ていて発見したことでした。Unity AdsはUnityに完全に統合されているわけではないので、ソースコードが結構内部まで見れます。

Advertisement.isInitialized をサンプルでは使っていません。使わなくても動くからですが、本来は使うべきものだと思います。
このプロパティは初期化が成功していればtrueになるので、これを調べてfalseのときは広告を出す処理をしないとするべきです。falseのときは広告が出せることはないからです。

Advertisement.isReady というものがあります。これは広告の準備ができたかを判定するためのものです。Unity Adsを使う場合は広告の表示がしたいわけであり、そのための準備を待ちたいと思うのは自然でしょう。そうするとAdvertisement.isReady がtrueになるまで待つような実装をしたいと思うかもしれません。しかし、それには十分な注意が必要なのです。
Advertisement.isReady は内部でAdvertisement.isInitialized を見ています。初期化が失敗していた場合Advertisement.isReady は永遠にfalseになります。したがって以下のようなことが起きやすいと思います。
Advertisement.isReady がtrueになるまで待つという実装をした場合、無限ループに突入する可能性があります。
以上のことは非常に重要ですので、気をつけて実装しましょう。準備が終わる保証はないのです。
サンプルが問題なく動くのは広告表示ができるかどうか関係なしに広告表示するようにしているためです。表示を試してみて失敗するか成功するかという実装です。

Advertisement.isInitialized がtrueであったときだけAdvertisement.isReady の判定処理に行くというのが正しい実装だと思います。そうすればAdvertisement.isReady が絶対にfalseにしかならないということは防げます。
またAdvertisement.isInitialized がtrueであったとしてもAdvertisement.isReady の判定を時間制限した方が無難だと思います。 時間判定に引っかかった場合は広告を表示させずに処理を終わらせます。


Unity Adsはデフォルトで画面横向きの広告が流れるとき、ホームボタンを右側にして横向きに強制します。UntiyのPlayer Settingsで言うとLandscape Leftになっていないと、画面が回転してしまいました。Unity Adsの方の設定で変更できればいいのですが、今のところ見当たりません。 (縦方向というのはありました。自由な向きではないです)


Advertisement.isReady とAdvertisement.Show はゾーンIDを指定しない場合は、管理サイト上で設定したデフォルトの広告を表示しているみたいです。(isReady については未検証です。)
ゾーンIDを指定しなければ、管理サイトを使って自由に変えられるので、指定しない方が便利な気がします。