アドフリくんとは
アドフリくんとは、俗に言うSSPというものです。
SSPとはSupply Side Platform(サプライ サイド プラットフォーム)の略語で、簡単に言うといくつかあるアドネットワークから適したものを自動で選んでくれて収益を最大化してくれるツールです。
今回色々と事情があって自作のUnityアプリにアドフリくんを入れてみることにしました。
基本的には丁寧なマニュアルが用意されているので、それに従えば導入できます。
しかしiOS版の導入の仕方が、マニュアルそのままだとXCode上での操作がありちょっと手間なのでUnity上で全部やってしまえるように多少工夫しました。
それをここにメモしておきます。(まずは軽くで良いのでマニュアルを一度読むことをオススメします。)
ADFMovieReward.framework を追加
マニュアルでは、ADFMovieReward.framework をXcodeにドラッグ&ドロップします。
と書いていますが、ビルドのたびにいちいちXCode上で操作するのはめんどくさいです。Unity Cloud Buildもできなくなっちゃうし。
なので、ADFMovieReward.frameworkをAssets/Plugins/iOSの下にぶっこみます。
しかし、そのままだとエラーが出てしまいました。
'ADFMovieReward/ADFmyMovieReward.h' file not found
と言われてしまいます。
ファイルがどこにあるかわかんないのでエラーになってるようです。
ぶっこんだファイルがどこにいったかというと、$(PROJECT_DIR)/Frameworks/Plugins/iOS の下にあります。
なので、これをSearch Pathに入れてあげるため、以下のようなコードを書きます。
using System.IO; using UnityEditor; using UnityEditor.Callbacks; using UnityEditor.iOS.Xcode; public static class XcodePostProcessBuild { [PostProcessBuild] public static void OnPostProcessBuild(BuildTarget target, string path) { if (target != BuildTarget.iOS) { return; } var project = new PBXProject(); project.ReadFromFile(PBXProject.GetPBXProjectPath(path)); //Search Framework pathを追加 string target_name = project.TargetGuidByName("Unity-iPhone"); project.AddBuildProperty(target_name, "FRAMEWORK_SEARCH_PATHS", "$(PROJECT_DIR)/Frameworks/Plugins/iOS"); project.WriteToFile(PBXProject.GetPBXProjectPath(path)); } }
これをXcodePostProcessBuild.csなどと名前をつけて、Assets/Editor以下に置いておきます。
-ObjC -fobjc-arc フラグを追加
Other Linker Flagsに-ObjCと-fobjc-arcを指定とあるので、これをframeworkを選択してinspectorから設定します。
Compile flagsと書いているけれどもOther Linker Flagsにちゃんと追加されるみたい。
他のAdNetworkのframeworkも容赦なくぶっこむ
ADFMovieReward.frameworkを入れただけでは、各社の広告は表示されません。各社のAdNetworkプラグインもインストールする必要があります。
これもマニュアルによると、XCode上でドラッグ・アンド・ドロップというふうに書かれていますがめんどくさいのでAssets/Plugins/iOSに予めぶっこんどきます。
フォルダ階層が深いものもありますが、中から引き出してぶっこみます。
こんな感じ↓(全ファイルが収まらないのでスクショを3枚合成してます)
Privacy Descriptionの追加
このままで来たバイナリをAppleに提出すると、Privacy Descriptionがないよっと怒られます。
Cameraに関するDescriptionは最近のUnityではPlayer Settingsで記述できますので、そちらで書いておきます。
こんな感じ。
Calendarsにもアクセスが入るようです。そちらに関してはスクリプトで追加します。先のOnPostProcessBuildに以下を追加します。
// Add Privacy Description For Adfurikun var plistPath = Path.Combine(path, "Info.plist"); var plist = new PlistDocument(); plist.ReadFromFile(plistPath); plist.root.SetString("Privacy - Calendars Usage Description", "Advertisement would like to use Calendars."); plist.WriteToFile(plistPath);
まとめ
以上で完了。なんとかXCode上で何もしなくて良くなりました!