Unity Adsで広告実装出来なかったのでUnity Monetization使った話
これはUnityでアプリ開発中に備え付けのUnity Ads使おうとしたら役に立たなかった時の話である。
前置き
{
// このメソッドをボタンから呼び出す
if (Advertisement.IsReady())
{
Advertisement.Show();
}
}
というか俺の場合これすらAdvertisementが無くて駄目だった。usingしても無かったのでプログラムが元々無さそう。
これはバージョン2018.4.12fの話である。でも元のプロジェクトはもうちっと前の奴。
そこで色んな手段を試していたらなぜかUnity Monetizationに行き着いたという流れ。
結局原因を解決しないまま別の手段を選んだという、ある意味負けている話だ。
前置きその2
前略、俺はクソゲーを作っていた。
スタミナ制のこんな奴だ。
高い数値を押すとコインを稼げる!
コインを稼ぐと最初の数値が増やせてもっとコインが稼げる!
最近のマージ系ゲームに寄せて作ろうと思った結果前のゲームを使ったんだが、マージ系ってやっぱ冷静に見るとクソゲーだよね。
(注:試行錯誤をする必要性のない物はクソゲーだと思っている人の意見です)
なお原型はこれ。実は5月に作ってるのでマージゲーム意識したかすら定かではない。2048の影響は受けてた。
まぁそれはさておき、これに必要なのは広告が失敗したかどうかである。
広告を見れなかったのに無限に回復されるのは困る。
というわけでその成否を取得しようと思った。
その為に講じた手段を書いていく。
成功例
アセットストアからUnity Monetizationダウンロードしてインポートしてこれを書く。
// Unity adsにログインして該当ゲーム→Settings→Project SettingsにあるGame IDs
private string _gameId = "98565";
private bool testMode = false; // true=test
// Unity Monetizationでは明示的な初期化が必要
Monetization.Initialize(_gameId, testMode);
}
{
// 広告スタート時ここを呼ぶ
if (Advertisement.IsReady("rewardedVideo"))
{
// ビデオ見せる
// asから先無いと駄目、キャストしてる事までは分かった
ShowAdPlacementContent pc = Monetization.GetPlacementContent("rewardedVideo") as ShowAdPlacementContent;
{
pc.Show(HandleShowResult); // HandleShowResultに結果格納して呼び出してるっぽい
}
}
}
//広告結果イベント
private void HandleShowResult(UnityEngine.Monetization.ShowResult result)
{
switch (result)
{
//最後まで終了
case UnityEngine.Monetization.ShowResult.Finished:
// ここにやりたい処理を書いてね
break;
//途中スキップ
case UnityEngine.Monetization.ShowResult.Skipped:
// ここにやりたい処理を書いてね
break;
//表示失敗
case UnityEngine.Monetization.ShowResult.Failed:
// ここにやりたい処理を書いてね
break;
}
}
なお必要部分抜き出しただけなので何か間違っているかも知れない。すまぬ。
実際にはこれに加えてダイアログで「広告を見てスタミナを回復しますか? はい いいえ」を作る事が必要になる。
何か押しただけで確認ダイアログ入れず広告再生するとBANされるって聞いた。
あと同じ広告とか表示されそうな気がする。
駄目な例1
先述の元々入ってるUnity Ads。
そもそもとして何か入ってなかったっぽい。
原因は不明である。バージョン上げたからか?
経験上Assetsからreimport allとかしたらいけそうな気はするが試していない。
Unity Monetizationダウンロードしたらエラーは消えた。
消えたが、元々のを無効化しないままほっといたらビルドエラーが出た。
無効化した。
駄目な例2
公式。
下記にさっきのStart()とHandleShowResult()を書き加えた物。
{
// 広告スタート時ここを呼ぶ
if (Advertisement.IsReady("rewardedVideo"))
{
options.resultCallback = HandleShowResult;
Advertisement.Show ("rewardedVideo", options);
}
}
これ公式なんですけど!?
新形式は発見できなかった。っていうかそもそも多分これ元々入ってる奴向けの古いコードっぽい。
結論
「unity ShowOptions」とか色々探し回ってたらこれに行き着いた。
Unity Monetization SDK 3.0 で動画広告を表示するサンプルスクリプト(コールバックにUnityEventをつかったバージョン) · GitHub
showAdPlacementContent?.Show(_showAdCallbacks);
後は成功例をご覧ください。
やっぱプログラムは自分で試行錯誤して作らないと無理だね!
これも役に立たないかも知れないので自分で考えて調べる必要はあると思う。