Comment前回の記事の続き。前回まではfirebaseの導入だけでしたが、今回はAdmobで広告を表示していきます。今回も参照するページは以下の公式サイトです(「C++統合」という見出しから)。今回は公式サイトだからといって正しいソースだとは限らないということを身にしみて感じました。統合」の項目にしたがい。AppDelegate.cppを編集(コピペ)します。cocos2d-xはネイティブ(iOS/android)との連携をAppDelegate.cppでおこなっています。iOSもAndroidも、まずはこの部分を修正していきます。上図のモザイクになっている部分にはアプリIDを設定するのですが、これはadmobにアプリを登録しないと得られません。登録については公式サイトを確認してください。idが割り振られるのでコピーして利用します。確認する広告の親を取得する公式サイトで「広告の親を取得する」の項目にしたがい。FirebaseHelper.hとFirebaseHelper.cppを作成(コピペ)します。これはfirebaseのフレームワークに含まれるのではなく、新規にファイルを作成しなければなりません。ファイルを作成したらコードは公式からコピペです。xcodeで作成するとhファイルがhppになります。hppでも問題ないと思うのですが、わたしはhファイルにリネームしています。これらのファイルでアプリと広告の連携をつけます。Android.mkの編集Androidは新規にファイルを追加した場合、ビルド設定(Android.mk)を書き換える必要があります。公式サイトに従いコピペしますが、上の行末にバックスラッシュを追加するのを忘れてはいけません。バナー広告を読み込む公式サイトで「バナー広告を読み込む」の項目にしたがい、広告を表示したいcppファイルを編集します。コピペすると下図のようにupdateのbanner_viewがエラーになります...。banner_viewの宣言をheaderファイルに移動しました。以下の移動した2業に該当するcppファイルの2行はコメントアウトしておきましょう。__HELLOWORLD_SCENE_H__広告IDの設定admobの広告idはadmobの管理画面(下図)で取得できます。広告のテスト中は公式サイトの説明に従いテスト用の広告IDを利用しましょう。Ads(Android)xcworkspaceでのCCLOGadmobのサンプルコードにCCLOGが含まれますが、xcworkspaceファイルではCCLOGは効きません(debugモードではなくなっている?)。ログはlogを利用しましょう。logは本番ビルドでもログを出すので本番の時にはコメントアウトしましょう。そんなこんなでビルドして広告が表示されるのを確認しました。IndicatorというUIが追加されました。これに伴いUIや広告を設置してはいけないセーフエリアを考慮しなければならなくなりました。iPhoneX完全対応マニュアルこの記事は既存、もしくは新規で開発するiOSアプリをiPhoneXに対応するための知見をまとめたものです。v3.17はセーフエリアに対応しているためバナーはセーフエリア内に配置されます。下画像のテキスト間違えました...。赤枠はセーフエリア外です。セーフエリア外に何も配置しないのはデザイン的に美しくありません。Cocos2d-xでもセーフエリア外にオブジェクトを配置することはできるようです。Cocos2d-x運用タイトルにおける新画面サイズ対応2017/11/03のiPhoneX発売に向けてクライアントアプリで対応した時の話を例に、新しい画面サイズに対応する時の苦労話を紹介します。Indicator自体を非表示にすることもできるようです。Xでアプリを起動すると画面下部に表示されるIndicatorです。Androidでのビルドここまでの作業でAndroid版のビルド準備も完了です(Android固有の作業はAndroid.mkの編集だけでした)。必要ないかと思うのですがAndroidStudioで開く前にコンソールからコンパイルしてみました。ちなみにコンソールでは以下の様にadTestの階層まで降りてからコンパイルしています。コンソールからのビルドができなくなった...色々環境をバージョンアップして再びコンソールからビルドしたらエラーでビルドできなくなっていました。試しに新規Cocos2d-xプロジェクトを作成して確認したのですがダメでした。どのバージョンアップでダメになったか分からないのですが、AndroidStudioでビルドできるため問題はないと思います(たぶん)。広告表示のタイミングでクラッシュ公式サイトの通りにソースを記述するとバナーを表示するタイミングでアプリがクラッシュします。当初Admobの問題ではなくAndroidStudioの環境が原因と考えていたため、SDKのバージョン確認などに時間を費やしてしまい解決には非常に時間がかかってしまいました...。公式のソースなんて疑わないよね...。原因はロードの完了直後にバナーを表示することでした。公式ではupdate関数ないでイニシャライズやロードが完了したらバナーを表示するように処理が書かれていますが、update内でShowすることをやめてCocos2d-xのプロジェクトに付いているボタンをタップしたら表示するように変更(下図)したところ、無事バナーが表示されました。機種や通信環境によって状況は変わるかもしれませんが、広告の読み込み完了後すぐに広告を表示するのは危険なのかもしれません。読込完了後に少し間を取ってから表示するようにしましょう。Admobの導入では公式サイトのコードを疑うことを学びました。公式サイトは絶対正しいと認識していたため環境まわりのチェックなど余分な時間を取ってしまいました(恨み節)。twitterを本格的に初めてみた。ブログの更新記事をつぶやくのがメイン。あとCocos2dやUnity、その他アプリ開発に関連するツイッターの方をフォローして情報も集められたらなぁと思います。コメントをキャンセルメールアドレスが公開されることはありません。