【Unity】Monetization SDK(旧UnityAds)で動画広告で収益化しよう【簡単です】
こんにちは!ジェイです。今回はUnity標準で内蔵されているUnityAdsを使って、動画広告を実装します。
Unity2020.3.4f1
内臓のAdsがOFFであることを確認する
最初から入っているAdsをOFFにして起きます。メニュー>window>General>Servisを選択します。
次にAdsのOFFであることを確認します。
Monetization SDKのインポート
Unity2020.3.4f1ではデフォルトではインポートされているので必要ありせんが、もし入っていないバージョンを使っている場合パッケージマネージャー(windowからインポートする必要があります。
次にOrganizationsでproject IDを選択肢して、Create projectIDをクリックします。
このアプリは13歳未満をターゲットにしたアプリですか?と聞かれるので答えてSaveします。
次にAdsのOFFをクリックしONの状態にします。
AdsとAnalyticsがONになっていることを確認して、Dashboardをクリックします。
OperateにあるProject SettingsのGame IDsで確認できます。ちなみにゲームIDとはゲームやプラットフォームごとに違うAdsのIDの事で、ServicesのウィンドウでAdsを有効にするだけで生成されます。
実際のコードは以下のような感じで、ゲームIDを渡してAdvertisement.Initializeを実行するだけです。
using UnityEngine;
using UnityEngine.Advertisements;//Advertisementクラスを使うのに必要
public class NewBehaviourScript : MonoBehaviour
{
private void Start()
{
//ゲームIDをAndroidとそれ以外(iOS)で分ける
#if UNITY_ANDROID
string gameID = "3395904";
#else
string gameID = "3395905";
#endif
//広告の初期化
Advertisement.Initialize(gameID);
}
private void Update()
{
//広告が使えるようになったかの確認
Debug.Log(Advertisement.IsReady());
}
}
動画広告の表示
動画広告の表示するには、Placement IDを渡してAdvertisement.showを実行するだけです。
//動画広告の表示("video"がPlacement ID)
Advertisement.Show("video");
ちなみにPlacement IDの確認や追加もOperateから行えます。なお、デフォルトでvideoとrewardedVideoが設定されているようです。
なお、IsReady(isInitializedではなく)がtrueになっていなければ表示出来ませんし、表示したい広告自体の準備が出来ている必要もあるので、以下のような確認をいれた方が良いです。
//動画広告のPlacementID
private static readonly string VIDEO_PLACEMENT_ID = "video";
public void ShowMovieAd()
{
//広告全体の準備が出来ているかチェック
if (!Advertisement.IsReady())
{
Debug.LogWarning("動画広告の準備が出来ていません");
return;
}
//表示したい広告の準備が出来ているかチェック
var state = Advertisement.GetPlacementState(VIDEO_PLACEMENT_ID);
if (state != PlacementState.Ready)
{
Debug.LogWarning($"{VIDEO_PLACEMENT_ID}の準備が出来ていません。現在の状態 : {state}");
return;;
}
//広告表示
Advertisement.Show(VIDEO_PLACEMENT_ID);
}
動画広告の再生後の判定
リワード広告を実装したい場合、動画が正常に再生されたかを判定する必要があります。そんな時は以下のような感じでIUnityAdsListenerを実装します。(動画再生部分は上記と変わらず)
using UnityEngine;
using UnityEngine.Advertisements;//Advertisementクラスを使うのに必要
public class NewBehaviourScript : MonoBehaviour, IUnityAdsListener //IUnityAdsListenerを実装
{
private void Start()
{
//ゲームIDをAndroidとそれ以外(iOS)で分ける
#if UNITY_ANDROID
string gameID = "3395904";
#else
string gameID = "3395905";
#endif
//広告の初期化
Advertisement.Initialize(gameID);
//広告関連のイベントが発生するように登録
Advertisement.AddListener(this);
}
//広告の準備完了
public void OnUnityAdsReady (string placementId)
{
Debug.Log($"{placementId}の準備が完了");
}
//広告でエラーが発生
public void OnUnityAdsDidError (string message)
{
Debug.Log($"広告でエラー発生 : {message}");
}
//広告開始
public void OnUnityAdsDidStart (string placementId)
{
Debug.Log($"{placementId}の広告が開始");
}
//広告の表示終了
public void OnUnityAdsDidFinish (string placementId, ShowResult showResult)
{
Debug.Log($"{placementId}の表示終了");
switch (showResult)
{
//最後まで視聴完了(リワード広告ならここでリワード付与する感じ)
case ShowResult.Finished:
Debug.Log("広告の表示成功");
break;
//スキップされた
case ShowResult.Skipped:
Debug.Log("広告スキップ");
break;
//表示自体が失敗した
case ShowResult.Failed:
Debug.LogWarning("広告の表示失敗");
break;
}
}
}
すると、広告が最後まで見られた、スキップされた、表示が失敗した、のどれか分かるようになり、さらに広告の準備が完了したタイミング、開始されたタイミングも分かるようになります。
アイコンはゆづあさんからお借りしました