iOSとAndroid対応のスマートフォン用アプリを製作しています。
動画広告としてAdmobを利用しており、リワード広告を見るとアイテムがもらえ、10分間経つとまた動画が見られるという仕組みになっています。
ところがiOS版のみAdmobのリワード広告が1回しか流れず、2回目以降はリワード広告を読み込まず、ずっと「動画準備中」という状態になります。Android版は問題なく2回目以降も動画は流れます。iOS版だけ違う処理をしているつもりはないのですが、なぜなのでしょうか?
該当のソースコード
using System;
using GoogleMobileAds.Api;
using UnityEngine;
using UnityEngine.Events;
/// <summary>
/// Admob、動画処理
/// </summary>
public class AdmobRewardedVideo : MonoBehaviour {
/// <summary>動画広告</summary> private RewardBasedVideoAd rewardBasedVideo; /// <summary>動画を閉じた時の処理</summary> public UnityAction ClosedAction; /// <summary>リワードを与える時の処理</summary> public UnityAction RewardedAction; /// <summary>ゲーム中に表示するエラーメッセージ</summary> public string ErrorMessageToDisplay; /// <summary> /// ロードが済んでいるか /// </summary> /// <returns></returns> public bool IsLoaded() { return rewardBasedVideo != null && rewardBasedVideo.IsLoaded(); } /// <summary> /// リワード動画を再生する /// </summary> public bool ShowAdVideo() { if (rewardBasedVideo.IsLoaded()) { rewardBasedVideo.Show(); return true; } else { return false; } } /// <summary> /// Unity Event /// 広告の使用準備をしています /// </summary> private void Start() { ErrorMessageToDisplay = ""; InitAds(); SettingRewardBasedVideo(); RequestRewardBasedVideo(); } /// <summary> /// 広告の初期化 /// </summary> private void InitAds() {
#if UNITY_ANDROID
string appId = "ca-app-pub-~";
#elif UNITY_IPHONE
string appId = "ca-app-pub-~";
#else
string appId = "unexpected_platform";
#endif
// Initialize the Google Mobile Ads SDK. MobileAds.Initialize(appId); } /// <summary> /// 動画広告の設定(初期化、ハンドラ設定) /// リクエストは動画閲覧ごとに走らせたいので別にしています /// </summary> private void SettingRewardBasedVideo() { // Get singleton reward based video ad reference. this.rewardBasedVideo = RewardBasedVideoAd.Instance; // Called when an ad request has successfully loaded. rewardBasedVideo.OnAdLoaded += HandleRewardBasedVideoLoaded; // Called when an ad request failed to load. rewardBasedVideo.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad; // Called when an ad is shown. rewardBasedVideo.OnAdOpening += HandleRewardBasedVideoOpened; // Called when the ad starts to play. rewardBasedVideo.OnAdStarted += HandleRewardBasedVideoStarted; // Called when the user should be rewarded for watching a video. rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded; // Called when the ad is closed. rewardBasedVideo.OnAdClosed += HandleRewardBasedVideoClosed; // Called when the ad click caused the user to leave the application. rewardBasedVideo.OnAdLeavingApplication += HandleRewardBasedVideoLeftApplication; } /// <summary> /// 動画広告リクエスト /// </summary> private void RequestRewardBasedVideo() {
#if UNITY_ANDROID
string adUnitId = "ca-app-pub-8147775589203500/3668786461";
#elif UNITY_IPHONE
// string adUnitId = "ca-app-pub-3940256099942544/1712485313";
string adUnitId = "ca-app-pub-8147775589203500/2444527959";
#else
string adUnitId = "unexpected_platform";
#endif
// Create an empty ad request. AdRequest request = new AdRequest.Builder().Build(); // Load the rewarded video ad with the request. this.rewardBasedVideo.LoadAd(request, adUnitId); } /// <summary> /// 広告の読み込み完了時に行う処理 /// </summary> /// <param name="sender"></param> /// <param name="args"></param> public void HandleRewardBasedVideoLoaded(object sender, EventArgs args) { MonoBehaviour.print("HandleRewardBasedVideoLoaded event received"); } /// <summary> /// 広告の読み込み失敗時に行う処理 /// </summary> /// <param name="sender"></param> /// <param name="args"></param> public void HandleRewardBasedVideoFailedToLoad(object sender, AdFailedToLoadEventArgs args) { ErrorMessageToDisplay = args.Message; RequestRewardBasedVideo(); MonoBehaviour.print( "HandleRewardBasedVideoFailedToLoad event received with message: " + args.Message); } /// <summary> /// 広告を表示して画面をカバーしたときに行う処理 /// トラッキングする場合はここで行う /// </summary> /// <param name="sender"></param> /// <param name="args"></param> public void HandleRewardBasedVideoOpened(object sender, EventArgs args) { MonoBehaviour.print("HandleRewardBasedVideoOpened event received"); } /// <summary> /// 広告再生開始時に行う処理 /// </summary> /// <param name="sender"></param> /// <param name="args"></param> public void HandleRewardBasedVideoStarted(object sender, EventArgs args) { MonoBehaviour.print("HandleRewardBasedVideoStarted event received"); } /// <summary> /// 広告を閉じる際に行う処理 /// 止めていたBGMの再開など、ゲームへの復帰処理はここで行う /// </summary> /// <param name="sender"></param> /// <param name="args"></param> public void HandleRewardBasedVideoClosed(object sender, EventArgs args) { RequestRewardBasedVideo(); MonoBehaviour.print("HandleRewardBasedVideoClosed event received"); ClosedAction?.Invoke(); } /// <summary> /// 報酬を与えるべき時に行う処理 /// </summary> /// <param name="sender"></param> /// <param name="args"></param> public void HandleRewardBasedVideoRewarded(object sender, Reward args) { string type = args.Type; double amount = args.Amount; MonoBehaviour.print( "HandleRewardBasedVideoRewarded event received for " + amount.ToString() + " " + type); RewardedAction?.Invoke(); } public void HandleRewardBasedVideoLeftApplication(object sender, EventArgs args) { MonoBehaviour.print("HandleRewardBasedVideoLeftApplication event received"); }
}
補足
Unity2018.1.6F1とVSCode1.28.2を使用しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/12 22:24