Unity/GoogleMobileAds/RewardedVideo7
提供: 初心者エンジニアの簡易メモ
RewardedVideoとは
報酬ありの動画広告
Unity/GoogleMobileAds/RewardedVideo8 [ショートカット]
注意)以下Admob7での書き方で、上記AdMob8での書き方が、新しいので、ショートカット側を確認した方が良い。
サンプル
using System;
using GoogleMobileAds.Api;
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
private RewardedAd rewardedAd;
public void Start()
{
CreateAndLoadRewardedAd();
}
public void CreateAndLoadRewardedAd()
{
#if UNITY_ANDROID
string adUnitId = "ca-app-pub-3940256099942544/52xxxxxxx";
#elif UNITY_IPHONE
string adUnitId = "ca-app-pub-3940256099942544/1712xxxxxxx";
#else
string adUnitId = "unexpected_platform";
#endif
this.rewardedAd = new RewardedAd(adUnitId);
// Called when an ad request has successfully loaded.
this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
// Called when an ad request failed to load.
this.rewardedAd.OnAdFailedToLoad += HandleRewardedAdFailedToLoad;
// Called when an ad is shown.
this.rewardedAd.OnAdOpening += HandleRewardedAdOpening;
// Called when an ad request failed to show.
this.rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow;
// Called when the user should be rewarded for interacting with the ad.
this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
// Called when the ad is closed.
this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;
// Create an empty ad request.
AdRequest request = new AdRequest.Builder().Build();
// Load the rewarded ad with the request.
this.rewardedAd.LoadAd(request);
}
public void HandleRewardedAdLoaded(object sender, EventArgs args)
{
MonoBehaviour.print("HandleRewardedAdLoaded event received");
}
public void HandleRewardedAdFailedToLoad(object sender, AdErrorEventArgs args)
{
MonoBehaviour.print(
"HandleRewardedAdFailedToLoad event received with message: "
+ args.Message);
}
public void HandleRewardedAdOpening(object sender, EventArgs args)
{
MonoBehaviour.print("HandleRewardedAdOpening event received");
}
public void HandleRewardedAdFailedToShow(object sender, AdErrorEventArgs args)
{
MonoBehaviour.print(
"HandleRewardedAdFailedToShow event received with message: "
+ args.Message);
}
// リワード付与後画面を閉じても、リワード付与前に閉じてもここを通る
public void HandleRewardedAdClosed(object sender, EventArgs args)
{
MonoBehaviour.print("HandleRewardedAdClosed event received");
// 2回目以降、事前ロードする場合
CreateAndLoadRewardedAd();
}
// 動画が終わった時点でxで画面を閉じる前に呼ばれる
public void HandleUserEarnedReward(object sender, Reward args)
{
string type = args.Type;
double amount = args.Amount;
MonoBehaviour.print(
"HandleRewardedAdRewarded event received for "
+ amount.ToString() + " " + type);
}
private void ShowAd()
{
if (this.rewardedAd.IsLoaded()) {
this.rewardedAd.Show();
}
}
}
参考
公式:https://developers.google.com/admob/unity/rewarded-ads?hl=ja
事前ロード
CreateAndLoadRewardedAd()をHandleRewardedAdClosedで実行すれば良い。
CreateAndLoadRewardedAd()内にrewardedAdをifでnull判定すると事前ロードができないので注意
広告取得完了時に画面遷移するとアプリが落ちる対処法
iosなら以下のようなエラーがでる時
libc++abi.dylib: terminating with uncaught exception of type Il2CppExceptionWrapper
TitleScript.csがTitleSceneのシーンにアタッチしてる時の場合の例
public void HandleRewardedAdLoaded(object sender, EventArgs args)
{
MonoBehaviour.print("HandleRewardedAdLoaded event received");
// csの名前じゃなくてアタッチしてるSceneの名前を入れる
if (Application.loadedLevelName.Equals("TitleScene")) {
if (rewardButton != null)
{
rewardButton.transform.position = new Vector3(2.32f, 2.40f, rewardButton.transform.position.z);
}
}
}
エラー対応
以下エラーが出るとき
error CS0246: The type or namespace name 'EventArgs' could not be found (are you missing a using directive or an assembly reference?)
以下を追加する
using System;
