UE4でモバイル向けアプリでのAdmob広告利用時のあれこれ・パッケージ設定

前記事に引き続き、モバイル向けアプリでAdmob広告(AdMob Goodiesプラグイン)を利用するに当たってのあれこれやiOSAndroid パッケージ時の設定など紹介したい。

前の記事 nasvic.hateblo.jp

目次

Google Admob広告

モバイルアプリで収益を得る方法は様々だが、私の場合初っ端から有償のアプリをリリースしたり、アイテム・機能を課金機能で提供するのは気が引けたので、今回はGoogle Admobの広告ユニットをアプリ内で表示させて収益を得る方法をとることにした。

support.google.com

UE標準のAdmob機能について

もちろんUE4のBP標準機能もGoogle Admob広告の表示機能に対応している・・・・・・対応はしているが、今の所

バナー広告(帯状の画像をおもに画面の端部に表示するタイプの広告)

インタースティシャル広告(画像や動画を全画面に一定時間表示させるタイプの広告)

の表示機能のみで、

リワード広告 (広告を視聴することでゲーム内のアイテムやステージスキップなどの褒賞を得られるタイプの広告)

の表示機能は無く、後述するバナータイプやサイズの変更といった細かい調整も存在せず、またiOS上での表示も対応しておらず、全体的に広告機能はまだ弱い。

f:id:Nasvic:20200906232458p:plain
Admobのフォーマット選択画面

docs.unrealengine.com

今回はリワード広告とiOS上でのAdmob広告表示も実現したかった為、GoogleAdmob広告の表示に関しては以下の有償プラグインを使用した。

www.unrealengine.com

Admob広告のテスト

各広告機能のテストには以下のGoogleAdmobが用意したテスト広告用IDを使用すること。

自前で用意した広告IDのバナーなどをアプリ上でみだりに開くと最悪Admobアカウントを停止させられる恐れがあるとのこと。

手元の実機IDをテストデバイスとして登録することで実際の広告IDを設定して広告の表示を確認する手段もあるので、以下のAdMob Goodiesのドキュメントも参考にしてほしい。

developers.google.com

docs.ninevastudios.com

※このテストデバイス登録機能はBP標準では使用不可だが、アプリのビルドコンフィギュレーションでテスト広告IDと本番用広告IDを切り替える手段があるので、以下を参照して欲しい。

UE4で自動でAdmobのテスト広告と本番広告を切り替えるやり方(Android編) - cacapon’s diary

バナー広告利用時の注意点

私の体験談だが、AdMob Goodiesプラグインを使用して一般的なバナー広告(320×50ピクセル)をゲーム画面に表示させていた。

そのバナーの両端が空いており、その隙間にタッチ操作などでインタラクト可能なゲーム上オブジェクトが存在していたのが Admobのガイドライン違反(インタラクティブな要素の近くにある広告)と判断されてしまった。

support.google.com

Google Admobによると「期限内(1ヶ月)に違反箇所の修正・ストアへの再アップ・再審査を終えないと、アプリの広告は収益停止の措置をとる」と言うことだった。

そのため、端末の幅に合わせて表示してくれるスマートバナー広告に置き換えて再度パッケージングしたアプリを再アップロードすることでAdmobの審査を通過した。

残念ながら現在のBP標準機能ではスマートバナーが用意できないため、UI側でバナー表示エリアの両端の隙間を覆ってゲーム上オブジェクトやUIにインタラクトできないようにするといった対策が必要だろう(バナー両端の隙間にインタラクトできるオブジェクトが無ければ特に問題ない)。

f:id:Nasvic:20200906232849p:plain
Android Emulator上でのテスト広告の表示。左が通常バナー、右がスマートバナー

(実際のスマートバナー広告は画像を拡大して黒塗部分も埋めてくれる)

ストア登録後ストアページからアプリをダウンロードして起動してもAdMob広告が表示されない。

AdMobの管理ページで広告ユニットとアプリのストアURLかアプリ名を入力してリンクさせる必要がある。

私の場合、ストアにアプリ登録直後にAdMob管理ページにアクセスしストアURLやアプリ名を入力したが候補は表示されず、結局候補が表示され実際にリンクできるまで数日待つ必要があった。

また、Google Play Consoleの場合、内部テスト版では広告が表示されないようだ(下記のアンサーハブ回答参照、アルファ版もしくはベータ版としてリリースする必要がある)

以下の記事は同様の事例の解決例 www.yukiiworks.com

answers.unrealengine.com

AdMob Goodies プラグインをオンにすると実機へのデプロイは成功するが、実機上でアプリを開いた時にスプラッシュスクリーン表示後ブラックスクリーンのままになる、もしくは落ちる。

AdMob Goodiesの設定項目でAppIDを埋めていないのが原因に考えられる。ひとまずGoogle AdmobのサイトでアプリIDを設定して埋める。

アプリ ID と広告ユニット ID を確認する

support.google.com

広告を表示するため、AdMob Goodiesプラグインの広告ID変数をSETして指定する必要があるが、PIE(ゲームプレイ)で開いた時だけその変数でAccessed None trying to read propertyエラーをメッセージログに吐く。

原因は判明しなかったが、Begin Playから実行して件の変数をSETするとエラーが再現する(Delayを挟んでも同様)。

そのためConstructやBegin Playから実行ではなく、何らかのボタンを押したりしてから広告IDの変数SET処理を実行した。

私の場合はタイトルの「タップしてはじめる」のボタンを押してから実行するようにして上記エラーを回避した(たまに上記エラーが再発する)。

f:id:Nasvic:20200905093835p:plain
Admob Goodied プラグインでの 広告IDの変数設定処理の一例

iOSでのあれこれ

iPhone実機確認時のトラブル

WindowsUE4でBPオンリーのプロジェクトかつ、Apple DeveloperのCertificates, Identifiers & Profilesページで手持ちのiPhoneをテストデバイスとして登録し、用意したプロビジョニングも証明書も「Valid」なのに、実機へデプロイをしようとすると「rsync error」とメッセージログに表示されデプロイに失敗してしまう。

プロジェクトがBPのみでも、C++が実行されるプラグインを使用しているとC++UE4プロジェクト時と同じようにMacXcodeとのリモートビルド環境が必要になる。

私の場合は広告プラグインが該当していたので上記のようにrsync errorとなってしまった。

該当のプラグインを無効化するか、もしくは何れパッケージング時にリモートビルド環境は必須となるので、iOSでリリースを目論んでいるのであれば速い段階でリモートビルド環境を整備したほうがいいだろう。

また、iPhone実機起動のテスト段階でプロジェクト設定>パッケージ化>プロジェクト>「配布用」項目にチェックが入っていると、プロビジョニングファイルと署名が無いとログに表示されデプロイが走らない。

上記を確認して問題無いはずなのに、リモートビルドに失敗する

macOS側のファイアウォールが有効になっていてリモートビルド時エラーが出ていた、

iPhone実機上で30Fps固定になってしまう

プロジェクト設定>iOS>Power Usage>Frame Rate Lockの項目で60Fpsを選択。

iPhone実機上でテクスチャがおかしい、縦横の比率が違うテクスチャがうまく表示されない

プロジェクト設定>iOS>Power Usage>Rendering>Cook ASTC Texure Data for Metal on A8 or Later devicesの項目にチェックする 。

App Storeのアプリページ「language」項目が「English」のまま。ほかの日本製アプリと同様に「Japanese」にしたい。

プロジェクト設定>iOS>Extra Plist Data>Additional Plist Data項目に以下の文字列を入力

CFBundleDevelopmentRegion ja_JP

f:id:Nasvic:20200906233319j:plain
ストア情報は上記のようになってくれた

AppStoreConnectで審査に提出する時に訊かれるIDFA申請どうすれば

Google Admobとかの追跡型広告サービス使うなら「はい」で。(このへん情報が古くなっている可能性が、 次回審査時に検証しておきます。)

blog.livedoor.jp

Androidでのあれこれ

Android Simulatorでの動作確認

Android Studio(4.25以降ではAndroid開発のためにインストールが必要)から任意のAndroid機種とAndroid OSバージョンを設定してエミュレートすることができる(以下のリンク参照)。

もちろんUE4から書き出した.apkファイルをAndroid Studioで開いてエミュレーター上で実行できるので、手持ちの端末以外の環境でテストしたい場合やAndroid端末を持っていない場合でも開発アプリの動作確認ができる。

qiita.com

パッケージ名の設定について

プロジェクト設定>Android>APK Packaging>「Android パッケージ名」項目はちゃんと決めてから設定すること!

ひとまずテストとしてデフォルト設定のまま.apkファイルにパッケージ化して、Google Playコンソールに新規アプリ登録してアップロードすると、そのまま最終的なストアページのURLがデフォルト時設定の「.YourCompany.アプリ名」みたいな悲惨なことになる。

体験談だが、アプリ情報やストアページ、レーティング情報など入力して登録した後、α版リリースを経てストアページURLを確認したら上記のような状態となってしまい、再度新規アプリ登録して対応したので、再度審査で3日待たされることに…。

ちなみにストアに一度新規アプリ登録して、後から「Android パッケージ名」を変更してパッケージングした.apkをPlayコンソールにアップロードすると、当然「パッケージ名が違う」と弾かれてしまう。

パッケージ名は他のアプリのストアページURLを参考にすると良い。

【com.あなたの企業名.あなたのアプリ名】が無難。

【】内は全て半角英数かつ小文字が望ましい。

developer.android.com

アプリ初回起動時にダウンロード中を示すプログレスバーが表示される。

プロジェクト設定>Android>APK Packagingの「初回スタート/更新時のOBB確認を無効化」項目にチェックを入れる。

もしくはプロジェクト設定>Android>APK Packaging>「.apk内のゲームデータをパッケージ化?」項目にチェックを入れることで、apkファイル内に全てのゲームデータを同梱することができる。

ただし100MBを超える.apkファイルになってしまうとGoogle Play Consoleにてアップロードできないので、その場合は素直に.apkと.OBBファイルに分けてアップロードする必要あり。

アプリ初回起動時の権限確認について

プロジェクト設定>Android>APK Packaging>「UE4GameファイルにEXternalFilesDirを使用?」にチェックすると初回起動時にフォルダアクセスの権限可否について聞かれなくなる(以下のリンク参照)。

Android 10環境では確認ウィンドウも出ず、セーブ・ロードが機能しなかったとの報告例も寄せられたので、チェック必須かと。

answers.unrealengine.com

書き出したAndroid用パッケージのサイズが大きすぎる!

パッケージ時にAndroid(Multi)を選択しない。今回私の場合「ASTC」でパッケージした。ただし、「ETC1」としてパッケージングするほうが良い?情報求む。

モバイルスターターコンテンツを消す。

また最後の手段として、新規プロジェクト作成し、既存プロジェクトからゲームで使用するレベルを全て選択して「移行」すると必要なアセットだけ移行される、ただしDefaultEngine.iniなどコンフィギレーションファイルは手作業で移動してあげる必要あり。

特定の機種で描画が上手く行かない

Android EmulatorにてPixel2と3、Nexus5で描画が上手く行かず(メッシュが描画されず真っ暗、UIのみ表示されている)、UE4のプロジェクト設定>Android>Build>「OpenGL ES2をサポート(非推奨)」の項目にチェックを入れ、プロジェクト設定>レンダリング>モバイル>「モバイルHDR」のチェックを外してETC1の形式でパッケージングしたところ正常に描画された。

ただしモバイルHDRがオフなので当然ポストプロセスエフェクトも乗らなかった。このあたりは現在も検証中だ。(私のアプリは現在、OpenGL ES3.X未満の利用端末向けに提供していない)

プライバシーポリシー

どちらのモバイルプラットフォームも登録時にプライバシーポリシーを記載した自前のウェブページを要求される。(SNS上の投稿やクラウド上のデータなどは不可なようだ)難しい話はわかんねぇ!って感じだったので、下記の記事などを参考にさせていただきながら、プライバシーポリシーを用意してブログの記事ページとして公開してそのページURLを貼った。今の所お咎めないので大丈夫なようだ。

blog.livedoor.jp


以上、随時更新予定です(項目が増えたら分割します)。

記事の中で分からない項目や詳しく知りたい箇所があればお知らせください。また、間違った手順や記述も含まれると思われます。お気づきの場合にはご指摘いただけたらありがたいです。