Unityアプリ上で Ad Generation の広告配信サービスを利用して広告を表示するための実装について説明します。Ad Generation (アドジェネ)は国内最大級のインプレッション数を誇るSSPサービスです。スマホアプリの広告媒体仕様に多く選ばれているようです。
Ad Generationはアカウント作成しなくても実装マニュアルが参照できます。(他のサービスもできるかもしれませんが、目につくところに資料がありませんでした)
なので、今回はいきなりテスト広告を実装していきます。
開発環境
- Unity 2019.4.18f1
- Xcode 12.4
- adg_for_unity.unitypackage 2.2.8
- Android 10
- iOS 14.4
Ad Generation SDK セットアップ
Android iOS共通セットアップ
実装にあたり、こちらの公式マニュアルを参照しました。
Unityプロジェクトを起動してAssets→Import Package→Custom PackageからこちらのUnityプラグインをインポートします。

既存のAssetsにImportしようとすると以下のようなWarningが表示されることがあります。

Warningが出ているフォルダが原因でビルドエラーや動作不良が発生する可能性があります。もし異常があった場合はWaningのフォルダを削除してImportしたり、少しづつ段階的にImportして原因を探ってみてください。
私の環境では特に問題が起きなかったのでそのままImportして進めています。
Androidセットアップ
ライブラリダウンロード
こちらからAndroid SDKのadg-X.XX.X.aarをダウンロードします。(XXはバージョン番号)
ダウンロードしたファイルはAssets/Plugins/Androidにコピーしておきます。
AndroidManifestの設定
ここで設定する内容は公式のマニュアルには記載されていません。ただ、経験上ネットワーク通信する場合は設定しておいた方がよいと思われます。
Player Settings→Other Settings→Internet AccessをRequireに設定します。

この設定でビルドし、Unityが吐き出したAndroidManifest.xmlは以下に格納されています。
PROJECT_PATH\Temp\gradleOut\unityLibrary\src\main\AndroidManifest.xml
このファイルをUnity EditorのAssets/Plugins/Androidにコピーして、このManifestを使用するように Player Settings→Publishing Settings→Build→Custom Main Manifestにチェックを入れます。
最後にAssets/Plugins/AndroidにあるManifestに以下の3点を追加、変更します。
- <application android:usesCleartextTraffic=”true”>
- <uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE” />
- <meta-data android:name=”unityplayer.ForwardNativeEventsToDalvik” android:value=”true”/>
Google Play Servicesを設定する
UnityにはGoogle Play Service APIを必要なところだけ解決してくれるパッケージがあり、Admobパッケージをインストールすることで自動的に適用されるのでそれを利用しました。Admobはこちらから。
Admobのサービスを使用するわけではないので、AdSenseアカウントは不要です。
iOSセットアップ
フレームワークダウンロード
こちらからiOSフレームワークのADG.framework.zipをダウンロードします。ダウンロードしたファイルは展開すると以下のような構造になっていました。
ADG.framework
└Versions
└A
├Headers
├Modules
└Resources
ADG.frameworkをそのままAssets/Plugins/iOSにコピーしても正しくビルドできない、かつADG-Resources.bundleが見つからないということで。AフォルダをADG.frameworkフォルダにリネームして使用しました。
リネームしたADG.frameworkをAssets/Plugins/iOSにコピーし、Resources/ADG-Resources.bundleもAssets/Plugins/iOSにコピーします。
フレームワークの追加
その他必要なフレームワーク一覧がこちらに記載されています。マニュアルのようにXcode上で設定するか、フレームワークをAssets/Plugins/iOS下にコピーしてもよいです。
Other Linker Flags設定
XcodeのエディタからOther Linker Flagsに-ObjCを追加します。が、以下のようにすでに追加されていました。

ARCをOFFする
ADGNI.mmのコンパイルフラグに-fno-objc-arcを設定してARCをOFFします。これがONのままだとビルドエラーになってしまいます。リストの右の方をクリックすると値が入力できます。

入力できると以下のように値が表示されます。

Ad Generation 広告表示スクリプト
適当なGameObjectに以下のスクリプトをアタッチします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AdGenerationManager : MonoBehaviour
{
public bool Enabled = true;
// Start is called before the first frame update
void Start()
{
if (Enabled) {
ADGUnitySDK.IOSLocationID = "48547";
ADGUnitySDK.AndroidLocationID = "48547";
ADGUnitySDK.AdType = "SP";
ADGUnitySDK.X = 0;
ADGUnitySDK.Y = 0;
ADGUnitySDK.Horizontal = "CENTER";
ADGUnitySDK.Vertical = "TOP";
ADGUnitySDK.Margin = new int[] { 0, 10, 0, 0 };
ADGUnitySDK.MessageObjName = "MainCamera";
ADGUnitySDK.initADG();
}
}
// Update is called once per frame
void Update()
{
}
}
各種パラメータの意味はこちらを参照してください。エディタでEnabledにチェックを付けると表示、外すと非表示になります。
Android及びiPhone実機での動作確認
Android、iOS共に表示されました。上部に表示されています。

おわりに
アカウント作成を省略して動作確認できるような顧客への導線を引いておくことが素晴らしいと感じました。まずは動かしてみて良ければ導入のようなアプローチが取れます。
そして手引きをGitで示すことで、構成管理も捗ります。また、導入手順も非常にシンプルでよいのですが、ADG.framework.zipのインストールに手間取ったのが残念でした。
ただ、色々な広告配信サービスを試してみましたが、エンジニア目線で最も使いやすいサービスではないかと思います。
コメント