Cocos2d-x:アドフリくん(AndroidStudio編その2)

SDKの導入

前回からの続きです。今回はCocos2d-xで作成したカラのプロジェクト(HelloWorld)にSDKを導入します(いきなり本番は怖いですからね)。
 

libsフォルダの設定

マニュアルはp25から。libsフォルダはビルドしないと生成されませんが、ビルド前に作成してもOKです。なので作成して指示通りjarファイルをいれました(階層はproj.android-studio/app/libs)。

build.gradleの設定

マニュアルp25にはbuild.gradleの設定についても説明されています。ここでgooglePlayServiceの設定をしましょう。またbuild.gradleのcompileSdkVersion/buildToolsVersion/targetSdkVersionの設定がサンプルプロジェクトと異なっていたので、サンプルプロジェクトに合わせました。
adfuly02

classフォルダ内の設定

マニュアルp26でadfurikunフォルダをclass内にコピーしました。これについては特に問題はないと思います。

srcフォルダ内の設定

マニュアルp27でsrc内にjp一式を追加(これもフォルダ上で行う)しました。ここまでの処理でproj.android-studio/appフォルダ内は以下のようになるはずです。
androstudio01

Android.mkの設定

マニュアルp27にはjni/Android.mkの設定についても説明されています。これはサンプルプロジェクトからコピペしたほうが安心でしょう(マニュアルではリワード動画がp27でインターステイシャルがp33です)。

AppActivityの設定

AppActivityの設定は大変なのでサンプルプロジェクトからコピペしましょう。ファイルの場所は「app/src/org/cocos2dx/cpp/AppActivity.java」です(マニュアルではリワード動画がp28でインターステイシャルがp34です)。
adfuly3
 
 
 

広告設定

マニュアルp48〜49でAndroidManifest.xmlの設定をしますが、サンプルプロジェクトのAndroidManifest.xmlをコピペして必要ない広告を削除するほうが良いでしょう。あとp49の後半はversion.xmlの設定なのですが、よく分からなかったので設定しなかったのですが動きました。また注意点としてはSmaAdについてはp67でresフォルダの要素を追加することも忘れずに(数の赤ラベル)。 
adfulyres
 
 
 

広告を表示する

広告を表示する処理はiOSと共通です。AppDelegete.cppで初期化するのを忘れないでください。→参考:Cocos2d-x:アドフリくんの導入(iOS編その3)
 
 
 

cocosコマンドでビルド

あとはビルドして確認するだけです。compileだけしてAndroidStudioからrunでもOKです。

----------------------------------------
cocos compile -s ~/cocos2d-x-3.11.1/project/adfulyTest -p android --android-studio
cocos run -s ~/cocos2d-x-3.11.1/project/adfulyTest -p android --android-studio
----------------------------------------

とりあえずカラのプロジェクトには組み込めて動画広告が再生されるのを確認しました。あとは本番のアプリへの組み込みです(緊張する…)。
 
 

Cocos2d-x:アドフリくん(AndroidStudio編その1)

Eclipseは使わない

Eclipseの方が慣れているが、最新のgooglePlayServiceに対応できないためAndroidStudioへ移行しました(サポートも切れていますし)。利用するマニュアルはiOSと同様に「adfurikun_Cocos2dx_moviereward_manual_1_4.pdf」です。 
 

サンプルプロジェクトの起動

マニュアルp14の通りに必要なSDKを更新しました(下図はクリックで拡大)。
androidstudio

つづいてマニュアルのp17。AndroidStudioになってもEclipse同様にコンソールからのビルドが必要です(下の階層は各自の設定に従ってください)。

----------------------------------------
cocos run -s ~/cocos2d-x-3.11.1/project/AdfurikunSampleCocos2dx -p android --android-studio
----------------------------------------

いきなりrunするのではなくcompileだけしてビルドできるか確認するだけでもOKです。その後でAndroidStudioで読み込みRunしましょう。

----------------------------------------
cocos compile -s ~/cocos2d-x-3.11.1/project/AdfurikunSampleCocos2dx -p android --android-studio
----------------------------------------

問題がなければ実機上で起動されます(iOSの時と同様に広告の認証が済んでないと動画は再生されません)。ソースを変更した場合はeclipse同様に毎回compileが必要になります。
adfulycapture
 

次回はSDKの導入

続いてはiOSの時と同様にカラのプロジェクトにSDKを組み込みます。
 
 
 

Cocos2d-x:アドフリくんの導入(iOS編その3)

利用しない広告を外す

前回の続きです。
マニュアルp6の「パフォーマンス」で「動画広告は負荷が大きいので利用する種類は調整してください」的な事が書いてあります。ということで今回は以下のように5種類の広告に絞ることにしました。VungleとUnityAdsを使わなかった理由は、これらは動画を見てもユーザーがアプリをインストールしない限り利益が発生しないからです(単価は高いらしいけど)。Aplovinもこのタイプなのですが、1つくらいは試してみようと入れています。
adfuly

ということでVungleとUnityAdsの設定を外します。

importのコメントアウト

まずはマニュアルp83,94のADFMovieRewardCocosAdapter.mへのインポートをやめます。具体的には以下のようにimportをコメントアウトします。
adfuly2

関連フォルダの削除

続いてマニュアルp81,92の関連するフォルダを削除します。具体的には以下の2つのフォルダを削除しました。
adfuly3

Compile Sourcesの確認

上記の処理を行うとマニュアルp83,94のCompile Sourcesからも該当するファイルが削除されます。下の画像のようにMovieReward6001.mやMovieReward6006.mの項目がなくなります。
adfuly4

必要のないframeworkの削除

最後にマニュアルp82,93の処理で追加したframeworkを削除しようと思ったのですが、これらは全て他の広告で利用しているものと重複していたので削除してはダメ。
でもって、ビルドが通る事を確認(警告の数は前回と同じでした)。
adfuly5
 
 
 

広告を表示する

次にボタンを押したら動画広告を表示するようにします(マニュアルはp100〜)。マニュアルよりもサンプルプロジェクトを参考にしたほうが混乱しません(マニュアルにも「詳細」はンプルプロジェクトをご確認下さい…とあるし)。

AppDelegateでの処理

サンプルプロジェクトの「HelloAdfurikunReward.cpp」と「HelloAdfurikunReward.h」を確認すれば利用方法は分かると思います。しかし見落としがちなのはAppDelegate.cppにも処理を追加する点です。コメントがなくて分かりにくいのですが、4行目でのADFMovieReward.hの読込。40行目でのリワード広告の初期化。41行目でインターステイシャルの初期化をしています(インターステイシャルを使わない場合はコメントアウトしてOKだと思う)。尚、この処理はマニュアルでいうとp104の部分だと思います。
adfuly6

BGMやアニメの扱い

サンプルプロジェクトにもコメントが書いてありますが、動画広告を表示するときにはBGMやアニメを停止しましょう。

動画が表示されることを確認

色々とログが書き出されますが、サンプルプロジェクトと同じ内容のログならOK。この段階でiPhone版のアプリに組み込む手順は全て学べたと思うのですが、以下の理由で先にAndroid版でもビルドできるか確認することにしました。
 
 
 

実際に組み込む前にAndroidへの組み込みも確認

最後にサンプルプロジェクトと今回練習で作成したプロジェクトのフォルダ構成を確認したら結構違っています。私はAndroidのビルド設定をするときClassフォルダ内の全てを組み込むようにしているのですが、このファイル構成では色々問題が発生しそうなのでAndroid版でもビルドできるか確認しようと思います。

adfuly7

Cocos2d-x:アドフリくんの導入(iOS編その2)

SDKの導入(iOS)

前回の続きです。
いきなりアプリに組み込むのは怖いので、カラのプロジェクトを作って練習をすることにしました。マニュアルは引き続きadfurikun_Cocos2dx_moviereward_manual_1_4.pdfで、Xcode(iOS)への導入に挑戦していきます(P37〜)。

サンプルプロジェクトを参考に

前回動作確認をしたサンプルプロジェクトが無ければ途方に暮れていたと思います…。マニュアルと合わせてサンプルプロジェクトの構造を確認しながら導入するのがオススメです。

足りないファイルを補完しよう

p37から設定を開始し、p42で問題が発生します。p42ではADFMovieInterstitialNativeManager.mmとADFMovieInterstitialCocosAdapter.mのコンパイル設定をするように説明されていますが、このファイルはマニュアル通りに作業しても組み込まれません。
 
なのでサンプルプロジェクトを基に必要なファイルを手作業で追加することにしました。主にインターステイシャル系のファイルが抜け落ちています。良い機会だったのでサンプルプロジェクトと比較して足りなさそうなファイルを組み込みました。下図のようにサンプル(左)と同じ構成になるようにしました。
adfuly00

足りないファイルはサンプルのclassフォルダ内にあります(下図)。これでp42の設定ができるはずです。
adfuly01

Xcode8/iOS10対応

マニュアルp46の設定はサンプルプロジェクトのinfo.plistには存在しなかった。たぶん古いままなのだと思う。ということできちんと設定した(下図はp44とp46の設定を追加したinfo.plistの部分)。
adfuly02

とりあえずビルドに挑戦

まだ広告会社毎の設定をしていないのでビルドは失敗すると思うのですが、とりあえずビルドしてみました。以下のようにMovieReward6002.mで1つエラーが出ただけでした(もっとエラーだらけになると思ったのに)。
adfuly03
 
 
 

各アドネットワークの設定

続いては各アドネットワーク別の導入です。引き続きXcodeで設定していくのでマニュアルはP70からです。とりあえずサンプルプロジェクトと同じように全てのアドネットワークの設定をしたいと思います。

Applovin導入

P71:ここまでの操作で登録されているはずなので何もしなくてOK
p75:前回出ていたバンドルIDの警告はApplovinのだったのですね。
P76:ここまでの操作で登録されているはずなので何もしなくてOK
 

AdColony導入

P76:ここまでの操作で登録されているはずなので何もしなくてOK
p77:libz.1.2.5.dylibというライブラリが追加できない。ググってみたら今では拡張子が変わってlibz.1.2.5.tbdになったようだ。
参考リンク:How can i add libz.1.2.3.dylib to iOS 9.1 in Xcode 7?
 

サンプルプロジェクトと比較して設定した方が良いと思う

このあたりでマニュアルに沿った設定が面倒になり、サンプルプロジェクトと比較して必要な設定をする方針に変更。まずは「Compile Sources」を設定。サンプルプロジェクトよりファイル数は2つ少なくなります。画像はクリックで拡大されます。
adfuly04
 
次に「Link Binary with Libraries」の設定をサンプルプロジェクトと同じようにします。RequiredとOptionalの設定も同じにすることを忘れずに。練習用に作成したプロジェクトにはサンプルプロジェクトには存在しない「OpenGLES.frameworks」があるのですが、削除するのは不安なので残しておきました。
adfuly05
 
でもってビルドしたら通りました(警告数は24)。
adfuly06
 
 
 

各アドネットワークのメモ

Applovin(マニュアルp75)

・Applovinでは広告の読み込みに失敗したときに実行されるメソッドがある。
・バンドルIDは申請したのと同じにしないとダメ。

AdColony(マニュアルp80)

リンクが切れている。しかし、たぶんマニュアルp44の件だと思う。

UnityAds(マニュアルp84)

AppStore向けの署名を含んだバイナリでないとビュー内でのダウンロードに失敗する。
たぶん真っ当な処理。検証中に広告からのインストールなんてしないと思うし。

Maio

マニュアルに特記事項無し

Tapjoy(マニュアルp91)

ソースがマニュアルの記述と異なっている。デバッグモードの切り替えは引数で設定できるようになっているっぽい。変更しなくてOKだよね…。

Vungle(マニュアルp95)

これもUnityAdsと同じ、AppStore向けの署名を含んだバイナリでないとビュー内でのダウンロードに失敗する。
  
 

次回は…

マニュアルp6に「アドネットワーク数は、アプリの全体の負荷に応じて適時調整して下さい」とあるので、次回は不必要なアドネットワークを削る作業をしたいと思います。
さらにボタンをタップしたら動画広告ことにも挑戦したいです。

Cocos2d-x:アドフリくんの導入(iOS編その1)

動画リワード広告とアドフリくん

1年前から興味があったものの弾幕ゲームとの相性が悪いために導入しなかった「動画リワード広告」。しかし今回のアプリは育成要素があり動画リワード広告と相性が良いです(動画を見ると獲得Goldを5倍にする施策をします)。

ただ、この動画リワード広告は出稿数が少なく広告を頻繁に表示できないというデメリットがあります(気合いの入った動画広告を作成できるアプリメーカは少ないため)。そこで複数の広告社の動画をとりまとめて、広告切れが発生しにくくなるようなシステム(メディエーションというらしい)を提供する会社が現れました。世界的にはgoogleが有名ですが、日本ではアドフリくんが1強らしいです。→アドフリ君webサイト

利益の発生ポイント

バナー広告の場合はクリックされたときに開発者に利益が入る仕組みですが、動画リワード広告は大抵の場合は動画を見るだけで利益となります(ただしバナーより大幅に安い…)。また広告会社によってはアプリがインストールされたときに利益が発生するタイプもあるようです(これは利益が高いらしい)。
 
 
 
 

サンプルアプリの起動

アドフリくんの審査が通るとSDKやサンプルがダウンロードできるので、早速ダウンロード(Cocos2d-x用ver1.4)しました。ここではマニュアル(adfurikun_Cocos2dx_moviereward_manual_1_4.pdf)をベースに躓いた部分と対応策をメモしていきます。
 

cocos2dフォルダ毎コピー

まず13ページ目1-1(4)SDKサンプル導入で少し戸惑いました。サンプルプロジェクトのcocos2dフォルダに…とありますが、ダウンロードしたデータにcocos2dフォルダはありませんでした。ここは単純に他で作成したプロジェクトのcocos2dフォルダを丸ごとコピーでOKでした。ちなみに私が利用しているCocos2d-xのverは3.11.1で、アドフリ君では動作確認されていないものでしたが問題有りませんでした(今のところ)。
 
adfuly01

XcodeからAndroid用のファイルは除く

まずは慣れたxcodeでのビルドに挑戦。cocos2dお馴染みのproj.ios_mac内のxcodeプロジェクトをダブルクリックして開きます。しかし「jin.iniが見つかりません」的なエラーが表示されます。これはAndroid用のファイルなので必要有りません。というかAndroidフォルダはiOSには必要ないのでフォルダ毎削除しました(以下のようにiOSのフォルダだけでOK)。これでビルドが通りました。
 
adfuly00
 

サンプルプロジェクトのバンドルID

ビルドは通りますがログに以下のような警告が表示されます。しかし広告ID(マニュアルp12)が設定されていれば問題ないようでした(というか申請したBundleIDにしたらアプリが上書きされてしまいますし…テスト用のIDがあっても良いと思うのに…)。
adfulu006

申請後スグには確認できない

しかし所定の操作をしても広告が表示されません。これは各広告会社への申請が完了していないためでした。初めて利用するときは焦らずにゆっくり待ちましょう。
adfuly
 
 

広告が流れた!

広告の申請が完了したので、サンプルを再度確認。無事広告が流れました!。
adfuly02
 

次回はSDKの導入

いきなり完成しているアプリにsdkを導入するのは怖いので、カラのプロジェクトを作成しsdk導入の練習をすることにしました。
次回は、そのあたりをメモしようと思います。