ツテなしフリーランス日誌

ツテが全く無いまま会社を辞め、我が道を行くフリーランスエンジニアのブログです



【Unity】AdMobのメディエーションにUnity Adsを組み込み、動画広告再生。

前回は、UnityにAdMobを組み込み、バナーを表示する方法を紹介しました。

www.kurisankaku.xyz

今回は、AdMobのメディエーションとして「Unity Ads」を組み込む手順を紹介します。

1. Unity Ads のプロジェクト作成

Unity Adsのダッシュボード よりプロジェクトを作成してください。

ここで作成したプロジェクトに登録されている「アプリID」は、後で使用します。

f:id:kurisankaku:20170320183127p:plain

2. AdMobで新しい広告ユニットの作成

1. AdMob の対象のアプリの収益化ページを開いてください。「新しい広告ユニット」のボタンを押します。

2. 動画リワードを選択し、広告ユニット名を入力、「保存」を押してください。

f:id:kurisankaku:20170320182446p:plain

3. 設定手順を表示では、「完了」を押します。

4. メディエーションのリンクを押します。(下の画像例では、「1個の広告ソース」)

f:id:kurisankaku:20170320182743p:plain

5. 「新しい広告ネットワーク」を押します。

f:id:kurisankaku:20170320182759p:plain

6. 「利用可能な広告ネットワーク」から「Unity Ads(報酬型)」を選択し、必要項目を入力し、「続行」を押します。

  • Game ID ・・・ Unity Adsの「アプリID」を入力してください。
  • Placement ID ・・・ 「広告枠ID」を入力してください。
  • 広告ネットワーク最適化はチェックを外しても構いません。

【AdMob画面】 f:id:kurisankaku:20170320182821p:plain

【UnityAds画面】 f:id:kurisankaku:20170320183127p:plain

f:id:kurisankaku:20170320182939p:plain

7. 新しい広告ネットワークが作成されました。「保存」を押します。

f:id:kurisankaku:20170320183359p:plain

3. Unityのスクリプト作成

AdMobを組み込むUnityプロジェクトを開きます。新しいスクリプトを作成し、下記 3−1〜3 のコードを設定してください。

AdMobのプラグインは、既にUnityプロジェクトへインポート済みとします。プラグインのインポート方法については、こちらを参照してください。

www.kurisankaku.xyz

それぞれのAPIの詳細は、公式ドキュメントを参照してください。

3-1. 動画リワード広告のロード

adUnitIdには、AdMobの「広告ユニットID」を入力してください。

private void RequestRewardBasedVideo()
{
    #if UNITY_ANDROID
    string adUnitId = "INSERT_AD_UNIT_HERE";
    #elif UNITY_IPHONE
    string adUnitId = "INSERT_AD_UNIT_HERE";
    #else
     string adUnitId = "unexpected_platform";
    #endif

    RewardBasedVideoAd rewardBasedVideo = RewardBasedVideoAd.Instance;

    AdRequest request = new AdRequest.Builder().Build();
    rewardBasedVideo.LoadAd(request, adUnitId);
}

3-2. イベントハンドラの登録

動画のロード完了、開始、終了などのイベントをハンドリングするためのコードです。

private void RegistHandler() {
    RewardBasedVideoAd rewardBasedVideo = RewardBasedVideoAd.Instance;
    // Ad event fired when the rewarded video ad
    // has been received.
    rewardBasedVideo.OnAdLoaded += HandleRewardBasedVideoLoaded;
    // has failed to load.
    rewardBasedVideo.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad;
    // is opened.
    rewardBasedVideo.OnAdOpening += HandleRewardBasedVideoOpened;
    // has started playing.
    rewardBasedVideo.OnAdStarted += HandleRewardBasedVideoStarted;
    // has rewarded the user.
    rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
    // is closed.
    rewardBasedVideo.OnAdClosed += HandleRewardBasedVideoClosed;
    // is leaving the application.
    rewardBasedVideo.OnAdLeavingApplication += HandleRewardBasedVideoLeftApplication;
}

#region RewardBasedVideo callback handlers

private void HandleRewardBasedVideoLoaded (object sender, EventArgs args)
{
    MonoBehaviour.print ("HandleRewardBasedVideoLoaded event received");
}

private void HandleRewardBasedVideoFailedToLoad (object sender, AdFailedToLoadEventArgs args)
{
    MonoBehaviour.print (
        "HandleRewardBasedVideoFailedToLoad event received with message: " + args.Message);
}

private void HandleRewardBasedVideoOpened (object sender, EventArgs args)
{
    MonoBehaviour.print ("HandleRewardBasedVideoOpened event received");
}

private void HandleRewardBasedVideoStarted (object sender, EventArgs args)
{
    MonoBehaviour.print ("HandleRewardBasedVideoStarted event received");
}

public void HandleRewardBasedVideoClosed (object sender, EventArgs args)
{
    MonoBehaviour.print ("HandleRewardBasedVideoClosed event received");
}

private void HandleRewardBasedVideoRewarded (object sender, Reward args)
{
    string type = args.Type;
    double amount = args.Amount;
    MonoBehaviour.print (
        "HandleRewardBasedVideoRewarded event received for " + amount.ToString () + " " + type);
}

private void HandleRewardBasedVideoLeftApplication (object sender, EventArgs args)
{
    MonoBehaviour.print ("HandleRewardBasedVideoLeftApplication event received");
}
#endregion

3-3. 動画の再生

3-1, 3-2のメソッドを使用して、動画を再生する例です。通常は何らかのアクションがあった場合に動画を再生するようにしてください。

// Use this for initialization
void Start ()
{
    RegistHandler ();
    RequestRewardBasedVideo ();
}

bool isShowed = false;
void Update ()
{
    RewardBasedVideoAd rewardBasedVideo = RewardBasedVideoAd.Instance;
    if (rewardBasedVideo.IsLoaded () && !isShowed) {
        rewardBasedVideo.Show ();
        isShowed = true;
    }
}

4 ビルド

Android, iOS別でのビルド方法を説明します。

4-1. Android

1. SDKのダウンロード

1. 下記公式の Mediation Networks 一覧のページを開いてください。

f:id:kurisankaku:20170320183443p:plain

2. Unity Adsの「Compatiable SDK」の「Download Android」のページを開きます。

3. Releasesから最新の「unity-ads.aar」をダウンロードしてください。

f:id:kurisankaku:20170320183556p:plain

2. アダプタのダウンロード

1. 下記公式の Mediation Networks 一覧のページを開いてください。

2. Unity Adsの「Adapter」の「Download Android」のページを開きます。

3. Filesタブを開き、最新の「unity-X.X.X.X.aar」をダウンロードしてください。

f:id:kurisankaku:20170320183612p:plain

3. SDKとアダプタの組み込み、ビルド

1. Unityのプロジェクトの Assets -> Plugins -> Android フォルダ直下にダウンロードしてきた「unity-ads.aar」と「unity-X.X.X.X.aar」を入れてください。

2. メニューバーのFile -> Build Settings を開き、Androidにプラットフォームを設定し、「Build And Run」を実行してください。実機もしくはエミュレータをつなげている場合は、アプリが実行され動画が再生されます。

4-2. iOS

1. GoogleMobileAds.frameworkのダウンロード

googlemobileadssdkios.zip をダウンロードし展開、「GoogleMobileAds.framework」があることを確認してください。

2. SDKのダウンロード

1. 下記公式の Mediation Networks 一覧のページを開いてください。

2. Unity Adsの「Compatiable SDK」の「Download iOS」のページを開きます。

3. Releasesから最新の「UnityAds.framework.zip」をダウンロードし展開、「UnityAds.framework」があることを確認してください。

f:id:kurisankaku:20170320183759p:plain

3. アダプタのダウンロード

1. 下記公式の Mediation Networks 一覧のページを開いてください。

2. Unity Adsの「Adapter」の「Download iOS」のページを開きます。

3. Filesタブを開き、最新の「UnityAdapter-X.X.X.X.zip」をダウンロードし展開、「UnityAdapter.framework」があることを確認してください。

f:id:kurisankaku:20170320183936p:plain

4. xcodeprojの作成

UnityのメニューバーのFile -> Build Settings を開き、iOSにプラットフォームを設定し、「Build」を実行して、xcodeprojをエクスポートしてください。

5. frameworkを追加

  1. エクスポートされたxcodeprojをXcodeで開いてください。
  2. UnityAds.framework」「UnityAdapter.framework」「GoogleMobileAds.framework」をプロジェクトにドラッグアンドドロップし、追加してください。

f:id:kurisankaku:20170320184129p:plain

6. 実行

実行し、デバイスもしくはシミュレータでアプリが起動し、広告動画が再生されることを確認してください。