読者です 読者をやめる 読者になる 読者になる

ナノカ技術メモ

ただのエンジニア。何でも屋みたいな扱い受けてます。

UnityAdsを実装してみた

はじめに

動作検証環境
MacOS:Sierra10.12.1
Unity:5.5.0
Xcode:8.1
iPhone6:iOS8.0

広告についてよく知らない、どんな種類があるの?導入する際に気をつけることは?などに関して自分の整理のために以下の記事を書きましたので興味があればご覧下さい。
madgenius.hateblo.jp

では、UnityAdsについて...
UnityAdsはUnityが提供する動画広告の仕組み、またその機能のことを指す。
Unityのゲームをプレイ中に動画視聴でゲーム内通貨プレゼントなどというものを見たことないだろうか?主にそういう実装で使用されているためユーザーへの不快感は少ない。

項目 概要
種類 動画(30秒)
収益 CPI型(Install数×広告主の設定価格)
不快感 少なめ
実装コスト 少なめ
提供 Unity

30秒の動画を視聴させユーザーが興味を持ちストアからダウンロードすればInstall数に応じた広告主の設定価格が収益として手に入る仕組みだ。
Unityが提供しているためUnityでの動作の安定性はもちろん実装コストも最低限までに短縮されている。
実装コストとユーザーへの不快感は少ないため実装することに対してのデメリットはない。
CPI型なのが収益へ繋がるか不安という方もいるだろうがUnity製アプリの広告のみが出るため主に高クオリティで動画なので音声やプレイ画面から興味を持つユーザーも多いので心配はないそうだ。
また、クリックが収益になるバナー広告などとも共存は可能。

UnityAdsダッシュボードの設定

UnityAdsのページからUnityのデベロッパーアカウントを使ってログインができる。
また、新規作成もできるので持ってない人でもここで作成可能。
f:id:nanokanato:20170417121402p:plain:w300

アカウント認証後に広告を出すアプリ情報やユーザー情報などを聞かれる場合がありますがあとから変更や削除可能です。またアプリ情報は最新版であればUnityから自動生成ができます。
f:id:nanokanato:20170417121431p:plain:w300

ログインが完了するとAdminのページになる。左は日本版サイト、右は海外用サイトだ。
広告の導入や収益の確認はコインが重なっている方を、広告を配布してユーザー獲得する場合は人型のボタンを押してください。
ここでは広告の出し方に関しては記載しません。
f:id:nanokanato:20170417121448p:plain:w300

広告を掲載しているアプリのダッシュボードです。
画像はログイン時にアプリ情報の入力があったためすでにプロジェクトが追加されています。

  1. 新しいプロジェクトのボタンからいつでも追加できます。

f:id:nanokanato:20170417121523p:plain:w300

プロジェクトの追加画面の入力内容です。プロジェクトをサイトから追加する場合に使用します。
しかし、最新版のUnityでは自動生成されるため不要なので飛ばして結構です。
画面下の13歳以下を対象にしているかのチェックを入れるとおそらく過激な表現(戦争,暴力など?)の動画などは表示されなくなります。もし、過激な表現の動画が表示OKでもアメリカ合衆国13歳以下の児童を対象にしている場合はチェックをつけましょう。
f:id:nanokanato:20170417121545p:plain:w300

以上で完了です。これだけ?って感じですね。
Unity5.1以前の場合はAsset StoreよりUnityAdsのAssetの追加と、作成したプロジェクトごとのIDなどが必要になるようですが....それより新しいバージョンだとサイトでプロジェクトを作成するだけになります。
最新版でAssetを追加するとデフォルトで入っているため競合しエラーが発生します。

UnityAdsサンプル用のプロジェクトの作成

UnityAdsを有効にするためにUnityを起動してのプロジェクトを開きましょう。
プロジェクト名は先ほどサイトで追加したAdsTestです。

ProjectのタブはSceneとScriptのみです。
UnityAdsの実装処理を書くためのUnityAdsScript.csを用意しました。
f:id:nanokanato:20170417121615p:plain:w300

Awakeメソッドの中身は公式の実装方法にはなかったですが追加することで動作するようになりました。
GameIDの部分は置き換えますが次のUnityAdsの有効化で説明します。

using UnityEngine;
using UnityEngine.Advertisements;

public class UnityAdsScript : MonoBehaviour
{
	public UnityEngine.UI.Text CountText;
	private int count = 0;

	void Awake()
	{   
		// まずはAwake()内で、初期化をします。先ほどのゲームIDを入力。
		Advertisement.Initialize ("【GameID】");
	}

	public void ShowRewardedAd()
	{
		if (Advertisement.IsReady("rewardedVideo"))
		{
			var options = new ShowOptions { resultCallback = HandleShowResult };
			Advertisement.Show("rewardedVideo", options);
		}
	}

	private void HandleShowResult(ShowResult result)
	{
		switch (result)
		{
		case ShowResult.Finished:
			Debug.Log ("The ad was successfully shown.");
			//
			// YOUR CODE TO REWARD THE GAMER
			// Give coins etc.
			count++;
			CountText.text = "視聴回数:" + count;
			break;
		case ShowResult.Skipped:
			Debug.Log("The ad was skipped before reaching the end.");
			break;
		case ShowResult.Failed:
			Debug.LogError("The ad failed to be shown.");
			break;
		}
	}
}

HierarchyはCanvasを使用し、Textを2つとButtonを配置。Buttonを押すと動画広告を表示にします。
どこでも大丈夫ですがCanvasにUnityAdsScript.csを追加して、CountTextとHierarchyのCountTextを紐付けます。これによって動画広告が視聴完了して閉じられた時にCountTextに表示している視聴回数をカウントします。
Buttonが押された時UnityAdsScript.csのShowRewardedAd()が呼ばれるように設定します。
f:id:nanokanato:20170417121644p:plain:w300

Sceneが完成しました。
Buttonの文字は「動画広告を表示」に変更。
CountTextは「視聴回数:0」に変更。
DetailTextは「↑これがポイント付与要素になる」に変更しました。
f:id:nanokanato:20170417121711p:plain:w300

UnityAdsの有効化

UnityのWindowからServicesを選択してServicesのタブを表示します。
f:id:nanokanato:20170417121758p:plain:w300

最初にログインを求められることがありますがUnityAdsのサイトのアカウントでログインしてください。
ログインするとサイトにプロジェクトが自動で追加されます。その際設定が必要なIDなども自動で入力してくれています。
サイトで行った13歳以下対象のチェックやプロジェクト名、プロジェクトIDの変更などはSERVICESのところを押すと変更可能です。サイトで作成したプロジェクトを使う場合はプロジェクトIDを変更してください。
今回はAdsを有効にするためAdsを選択しましょう。
Adsの項目があるので
f:id:nanokanato:20170417121814p:plain:w300

デフォルトでは上のスイッチがOFFになってますのでONにしてください。ONで下の項目も表示されます。
GameIDの部分は自動で生成されます。こちらもサイトで作成したプロジェクトを使う場合、置き換えてください。GameIDをUnityAdsScript.csのAwakeメソッドでの初期化に使いますので置き換えてください。
f:id:nanokanato:20170417121829p:plain:w300

動作確認

UnityEditorでもエラーになったりはしないが非対応のような専用画面が表示される。Closeを押すことで動画視聴完了のコールバックが呼ばれ画面を閉じることができる。
f:id:nanokanato:20170417121928p:plain:w300

iOSの実機ではこんな感じ
動画再生中
f:id:nanokanato:20170417121947p:plain:w300
動画再生終了
f:id:nanokanato:20170417122020p:plain:w300

コールバックが無事に呼ばれたので視聴回数が1回になった。
f:id:nanokanato:20170417122039p:plain:w300