質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AdMob

AdMobは、事前に指定した条件に従ってアプリに広告を表示するGoogleのサービス。開発者の向けのサービスで、広告を掲載することにより、収益を得ることが可能です。その他、見た目や雰囲気などアプリに合う広告に変更したり、広告表示の場所を指定することもできます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

3087閲覧

Unity+AdMob+iOS で interstitial広告が実機テストのみ表示されない

hm08103

総合スコア8

AdMob

AdMobは、事前に指定した条件に従ってアプリに広告を表示するGoogleのサービス。開発者の向けのサービスで、広告を掲載することにより、収益を得ることが可能です。その他、見た目や雰囲気などアプリに合う広告に変更したり、広告表示の場所を指定することもできます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

1グッド

0クリップ

投稿2021/08/15 14:11

前提・実現したいこと

iOS向けに、簡単な算数アプリを開発中です。
計算結果から復習をするシーン遷移の際にランダム発生のインタースティシャル広告を挟みたいです。

発生している問題・エラーメッセージ

Unityエディタ上では理想通りの動作が確認できていますが、
iOS実機(iPhone SE2)でのテスト時バナー再生のみ動作してインタースティシャルは動画読み込みがなされていないようでした。
動作確認の実施方法として、 interstitial.IsLoaded() をDebug.Logでshow()が実行される直前に
Unityエディタ上、Xcodeエディタ上でそれぞれ確認した結果、
Unityでは true が返され、テスト広告も再生されました。
Xcodeでは false が返ってきて、そのまま次ロードシーンが走ってしまいます。

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.SceneManagement; 5using GoogleMobileAds.Api; 6using System; 7using UnityEngine.Events; 8 9public class GoogleAds : MonoBehaviour 10{ 11 public UnityEvent OnOpeningAd; 12 public UnityEvent OnClosedAd; 13 private InterstitialAd interstitial; 14 private BannerView bannerView; 15 16 // Use this for initialization 17 void Start() 18 { 19 #if UNITY_ANDROID 20 string appId = "XXXXXX~XXXXXXX..."; 21 #elif UNITY_IPHONE 22 string appId = "XXXXXX~XXXXXXX..."; 23 #else 24 string appId = "unexpected_platform"; 25 #endif 26 // Initialize the Google Mobile Ads SDK. 27 MobileAds.Initialize(initStatus => { }); 28 RequestBanner(); 29 RequestInterstitial(); 30 } 31 32 //////// ここからバナー用記述 33 private void RequestBanner() 34 { 35 #if UNITY_ANDROID 36 string adUnitId = "XXXXXX/XXXXXXX..."; 37 #elif UNITY_IPHONE 38 string adUnitId = "XXXXXX/XXXXXXX..."; 39 #else 40 string adUnitId = "unexpected_platform"; 41 #endif 42 // Create a 320x50 banner at the top of the screen. 43 this.bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Bottom); 44 45 // Create an empty ad request. 46 AdRequest request = new AdRequest.Builder().Build(); 47 48 // Load the banner with the request. 49 this.bannerView.LoadAd(request); 50 } 51 52 public void BannerDestroy() 53 { 54 bannerView.Destroy(); 55 } 56 57 //////// ここからインタースティシャル用記述 58 // 広告読み込み:次の広告表示の前に実行しておく必要あり 59 public void RequestInterstitial() 60 { 61 //テスト用 62 #if UNITY_ANDROID 63 string adUnitId = "XXXXXX/XXXXXXX..."; 64 #elif UNITY_IPHONE 65 string adUnitId = "XXXXXX/XXXXXXX..."; 66 #else 67 string adUnitId = "unexpected_platform"; 68 #endif 69 // Initialize an InterstitialAd. 70 this.interstitial = new InterstitialAd(adUnitId); 71 DestroyInterstitialAd(); 72 73 this.interstitial.OnAdLoaded += HandleOnAdLoaded; 74 this.interstitial.OnAdFailedToLoad += HandleOnAdFailedToLoad; 75 this.interstitial.OnAdOpening += HandleOnAdOpened; 76 this.interstitial.OnAdClosed += HandleOnAdClosed; 77 78 // Create an empty ad request. 79 AdRequest request = new AdRequest.Builder().Build(); 80 // Load the interstitial with the request. 81 this.interstitial.LoadAd(request); 82 } 83 84 // OnAdLoaded イベントは、広告の読み込みが完了すると実行されます。 85 public void HandleOnAdLoaded(object sender, EventArgs args) 86 { 87 MonoBehaviour.print("HandleAdLoaded event received"); 88 } 89 90 // OnAdFailedToLoad イベントは、広告の読み込みに失敗すると呼び出されます。Message パラメータは、発生した障害のタイプを示します。 91 public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) 92 { 93 SceneManager.LoadScene("RetryQuiz"); 94 } 95 96 // このメソッドは、広告がデバイスの画面いっぱいに表示されたときに呼び出されます。 97 public void HandleOnAdOpened(object sender, EventArgs args) 98 { 99 OnOpeningAd.Invoke(); 100 } 101 102 // このメソッドは、ユーザーが「閉じる」アイコンまたは「戻る」ボタンをタップしてインタースティシャル広告を閉じたときに呼び出されます。音声出力やゲームループを一時停止するアプリの場合は、ここで再開すると効果的です。 103 public void HandleOnAdClosed(object sender, EventArgs args) 104 { 105 OnClosedAd.Invoke(); 106 RequestInterstitial(); 107 } 108 109 //90%の確率でインタースティシャル広告発生 110 public void ShowInterstitialAd() 111 { 112 UnityEngine.Random.InitState(System.DateTime.Now.Millisecond); 113 int Num = UnityEngine.Random.Range(1, 101); 114 if(Num > 10) 115 { 116 if (this.interstitial.IsLoaded()) 117 { 118 this.interstitial.Show(); 119 } 120 else 121 { 122 SceneManager.LoadScene("RetryQuiz"); 123 } 124 } 125 else 126 { 127 SceneManager.LoadScene("RetryQuiz"); 128 } 129 } 130 131 // 一度リセット:次の広告表示の前に実行しておく必要あり 132 public void DestroyInterstitialAd() 133 { 134 interstitial.Destroy(); 135 } 136}

試したこと

AdMobのUnity向け公式+こちらのサイト+こちらのサイトを参考に実装しました。
ランダム発生のif文以外はほぼ写生レベルです。

また、Google Mobile Ads Unity Pluginの版がv6.0.2だったこともあり
こちらのサイトを参考に
①、②xCode側設定変更
③.mファイルの作成は試しましたが動作せず。

実機側でも
①iPhone再起動
②トラッキング許可
③デベロッパ設定でNetwork Link ConditionerをON
など試しましたが、いずれも動作しません。

ここまでくると何か初歩的なミスをおかしていると推測していますが
きっかけが見つけられずにいます。。。
長文でお手数ですがご指南いただければ幸いです。

補足情報(FW/ツールのバージョンなど)

Unity 2020.2.5f1
VScode 1.55.1
Google Mobile Ads Unity Plugin v6.0.2
Xcode ver12.5.1

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。
具体的にはDestroyメソッド位置を変更することで改善。(下記★印コメント部分が変更箇所)

C#

1//////ここから上は質問文と同じ記述////// 2 3 //////// ここからインタースティシャル用記述 4 // 広告読み込み:次の広告表示の前に実行しておく必要あり 5 public void RequestInterstitial() 6 { 7 //テスト用 8 #if UNITY_ANDROID 9 string adUnitId = "XXXXXX/XXXXXXX..."; 10 #elif UNITY_IPHONE 11 string adUnitId = "XXXXXX/XXXXXXX..."; 12 #else 13 string adUnitId = "unexpected_platform"; 14 #endif 15 // Initialize an InterstitialAd. 16 this.interstitial = new InterstitialAd(adUnitId); 17 //DestroyInterstitialAd(); ←★★★こいつを削除★★★ 18 19 this.interstitial.OnAdLoaded += HandleOnAdLoaded; 20 this.interstitial.OnAdFailedToLoad += HandleOnAdFailedToLoad; 21 this.interstitial.OnAdOpening += HandleOnAdOpened; 22 this.interstitial.OnAdClosed += HandleOnAdClosed; 23 24 // Create an empty ad request. 25 AdRequest request = new AdRequest.Builder().Build(); 26 // Load the interstitial with the request. 27 this.interstitial.LoadAd(request); 28 } 29 30 // OnAdLoaded イベントは、広告の読み込みが完了すると実行されます。 31 public void HandleOnAdLoaded(object sender, EventArgs args) 32 { 33 MonoBehaviour.print("HandleAdLoaded event received"); 34 } 35 36 // OnAdFailedToLoad イベントは、広告の読み込みに失敗すると呼び出されます。Message パラメータは、発生した障害のタイプを示します。 37 public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) 38 { 39 SceneManager.LoadScene("RetryQuiz"); 40 } 41 42 // このメソッドは、広告がデバイスの画面いっぱいに表示されたときに呼び出されます。 43 public void HandleOnAdOpened(object sender, EventArgs args) 44 { 45 OnOpeningAd.Invoke(); 46 } 47 48 // このメソッドは、ユーザーが「閉じる」アイコンまたは「戻る」ボタンをタップしてインタースティシャル広告を閉じたときに呼び出されます。音声出力やゲームループを一時停止するアプリの場合は、ここで再開すると効果的です。 49 public void HandleOnAdClosed(object sender, EventArgs args) 50 { 51 interstitial.Destroy(); //★★★Destroyをここで実行★★★ 52 OnClosedAd.Invoke(); 53 RequestInterstitial(); 54 } 55 56 //90%の確率でインタースティシャル広告発生 57 public void ShowInterstitialAd() 58 { 59 UnityEngine.Random.InitState(System.DateTime.Now.Millisecond); 60 int Num = UnityEngine.Random.Range(1, 101); 61 if(Num > 10) 62 { 63 if (this.interstitial.IsLoaded()) 64 { 65 this.interstitial.Show(); 66 } 67 else 68 { 69 SceneManager.LoadScene("RetryQuiz"); 70 } 71 } 72 else 73 { 74 SceneManager.LoadScene("RetryQuiz"); 75 } 76 } 77 78 // ★★★このメソッドも削除して、AdClosedメソッド内で直接プロパティアクセスしてDestroyすることにした★★★ 79 //public void DestroyInterstitialAd() 80 //{ 81 // interstitial.Destroy(); 82 //} 83}

解決の糸口はDebug.Logでした。
各動作(広告読み込んだとき・開いたとき・閉じたとき)のタイミングでログをつけて行って
動作が正常になるよう組み替えしたら解決しました。

投稿2021/08/18 14:27

hm08103

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問