スマホアプリを作ってリリースするに最も必要なことは、広告とシェア機能がちゃんと動くこと。
それらこそスマホアプリの圧倒的強みですね。
(それがなければ誰がこんな制約だらけのプラットフォームで作るか)
ですが、その実装にはほんとにつまづきポイントが多い。凄まじく多い。
面倒な設定の数々を一元管理できるというEasy Mobileを導入してみましたが、期待してた機能は一切動きませんでした。
わからんだらけなのを検証するため、手動で色々試してみました。
●広告
アプリに広告を実装するのに最も厄介な点は、認証のタイムラグにあるとみました。
GooglePlayでデベロッパーとして登録、アプリを仮登録してアプリIDを作成・取得、
AdMobやUnityAdsで各種IDを作成・取得、
プロジェクトに広告のSDKをインポートしてセットアップ、
…という流れですが、
それらのIDが使用可能になるまで、どうも数日かかるみたいです。何の通知もなしで。
ネットで調べたとおり登録してコードも書いたのにテスト広告すら全く機能しない
悶絶してもがくうち1日が過ぎ2日が過ぎ、不安と絶望が蓄積して精神を蝕んでいき…
それが何日かしたら。突然広告が出るようになった。
そして後日アップデートでプロジェクトを久々に開いてテストビルドすると、動いてたはずの広告がまた効かなくなったり。
で、喜んだのもつかの間。動画の広告が問題でして、
バナー広告はまあ置いといて、インタースティシャル(ビデオ)・リワード広告の仕様が謎です。
ネットで調べても広告の実装方法とサンプルコードだけで、実装したら実際どう動くのかについて一切記事がありません。
UnityAds限定の話ですが、エディタ上では、広告表示中でも後ろでシーンが動き続け、BGMは鳴り続け、キャラは動いてしまいます。それらを止める方法がわかりません。
実機では気を利かせて止まってくれるのかもしれないしそうじゃないかもしれないしと、想像がつきません。
検証のため、テストシーンを作りました。

・BGMを流し、動くものも表示したテストシーン1と2を作る
・テストシーン2では別のBGMを流しておく。
・テストシーン1にインタースティシャル広告とリワード広告ボタンを実装、ボタンを押したらテストシーン2へ飛ぶようにセットアップ
・ビルド設定でもろもろセットアップ
動作結果は、
◆エディタ上の挙動 ・リワード、インタースティシャルともに再生中は一切止まらない。
広告終了・スキップ・再生失敗のイベントでテストシーン2に飛ぶように設定したことで、テストシーン2に遷移しました。 ・インタースティシャルは、再生した瞬間にその裏でテストシーン2に飛びました。
◆実機(Android)でテストビルドでの挙動 ・リワード、インタースティシャルともに再生中は広告以外すべて停止しました。BGMも止まりました。 ※ちなみに、UnityAdsの動画広告は、実機ではテストモードであってもマジの広告が流れる仕様です。
・インタースティシャル、リワードとも終了後にテストシーン2に移動したものの、動画終了から次のシーン読み込みの前に一瞬、テストシーン1の動作が解除されて画面が映り、BGMがプッと流れました。 ボタンを押した時点で、最低でもBGMは止める必要があるようです。 ・インタースティシャル、リワードとも動画流れてしばらくするとスキップできるようになります。スキップボタンが出ないときもある? ・動画を読み込む時間が必要なため、シーンが始まって数秒以上してからボタンを押さないと、動画が流れませんでした。またテストシーン2からテストシーン1に戻れるようにして再度テストしたものの、どういうわけかボタンを押しても広告が出ないときがありました。 動画の読み込み時間だけでなく、一定時間あける必要があるとか?
リワード広告には動画のロード完了判定や、終了・スキップ・失敗の判定がついてるので、リワード広告一択でいいような感じがしました。
どのみち、動画再生前にシーン上のすべてを止める(=ポーズ状態にする)仕組みを作る必要があります。
追記:AdMobのバナー広告も問題がありました。
シーンを遷移しても消えない。新規シーンに広告が存在してなくても、DontDestroyになってるようでもないのに、ずっと表示されっぱなしになってしまいます。エディタ上では広告表示用のコンポーネントを無効化したり新規シーンに存在してなければ普通に消えるというのに、実機では残り続けちゃう。
どう考えてもおかしい…
追記:検証したところ、バナー広告は、表示制御のメソッドでしか消せない。それ以外はシーン遷移しようが制御コンポーネントのオブジェクトを非アクティブにしようが消せない、というのがわかりました。
例えばこういう記事を参考にスクリプトを作ったのですが、
bannerView.Show( )で広告を表示
bannerView.Hide( )で広告を非表示
bannerView.Destroy( )でバナー広告を削除
とありますが、でも実際には、bannerView.Hide( )を実行したけど消えなかったのでbannerView.Destroy( )で対処しました。
●シェア機能
スクリーンショットを撮ること自体は
ScreenCapture.CaptureScreenshot("image.png");
でプロジェクト直下にimage.pngとして作れるはずですが、そのファイルをユーザーが取り扱えるようにするには、機種依存なあれこれの手間が必要みたいなんですが。
Social Connector
効きませんでした。
自作のスクショボタンはエディタ上ならimage.pngは作れるものの、テストビルドでは無反応。image.pngはどこにも見当たらず。
これ導入するのがちょっと怖いやつです。アセットをインポートしたらマニュフェストなどの複数のファイルを手作業でPlugins/Androidフォルダに移動しろとありますが、Pluginsフォルダはすでに他のアセットが作ったAndroidフォルダがあるんで、失敗したらとりかえしつかなくなりそう。
シェアは一旦諦めて、スクショを撮ってギャラリーに保存することを目的にすると
ギャラリーに保存するアセットがありました。無料
効きませんでした。ビルドが通らず検証不能です…
…Social Connectorか何かと競合してるのかなあ?上記の理由でSocial Connectorは簡単に除去できません。考えなしに導入してしまった
どれだけサイズの小さいアセットでも、導入前にマニュアルを読み、ファイルを手作業で移動するだの書き換えるだの要求するようなものは必ず事前にプロジェクトのバックアップを取りましょう。
というわけでシェア機能はひとまずギブアップ…
Comments