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

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

新規登録して質問してみよう
ただいま回答率
85.47%
C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

1回答

2739閲覧

Unityの実機テストで広告が表示されなくなりました

yuyusaki

総合スコア11

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2022/02/15 08:29

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

Unityで脱出ゲームを作成しているのですが、
作成したゲームの広告表示がUnityEditor上では動作するのですが、
実機テストで動作しなくなってしまいました。
数時間前までは実機でも動いていたのですが、別の不具合に対応するするために
フォルダごと取ってあるバックアップから戻したりしている内に動作しなくなってしまいました。
(バナー広告、リワード広告の2種類を導入していますが、いずれも動作しません)

試したこと

Android logcatを導入してログを取得すると下記のようなエラーが発生していました。
(ログをWarn以上にフィルターして抽出しました)

Error Unity AndroidJavaException: java.lang.ClassNotFoundException: com.google.android.gms.ads.initialization.OnInitializationCompleteListener Error Unity java.lang.ClassNotFoundException: com.google.android.gms.ads.initialization.OnInitializationCompleteListener Error Unity at java.lang.Class.classForName(Native Method) Error Unity at java.lang.Class.forName(Class.java:454) Error Unity at com.unity3d.player.UnityPlayer.nativeRender(Native Method) Error Unity at com.unity3d.player.UnityPlayer.access$300(Unknown Source:0) Error Unity at com.unity3d.player.UnityPlayer$e$1.handleMessage(Unknown Source:95) Error Unity at android.os.Handler.dispatchMessage(Handler.java:102) Error Unity at android.os.Looper.loop(Looper.java:246) Error Unity at com.unity3d.player.UnityPlayer$e.run(Unknown Source:20) Error Unity Caused by: java.lang.ClassNotFoundException: com.google.android.gms.ads.initialization.OnInitializationCompleteListener Error Unity ... 8 more Error Unity at UnityEngine.AndroidJNISafe.CheckException () [0x00096] in <d21e055bfb244463b7cf4d29f8901369>:0 Error Unity at UnityEngine.AndroidJNISafe.FindClass (System.String name) [0x0000c] in <d21e055bfb244463b7cf4 Error Unity AndroidJavaException: java.lang.ClassNotFoundException: com.google.android.gms.ads.initialization.OnInitializationCompleteListener Error Unity java.lang.ClassNotFoundException: com.google.android.gms.ads.initialization.OnInitializationCompleteListener Error Unity at java.lang.Class.classForName(Native Method) Error Unity at java.lang.Class.forName(Class.java:454) Error Unity at com.unity3d.player.UnityPlayer.nativeRender(Native Method) Error Unity at com.unity3d.player.UnityPlayer.access$300(Unknown Source:0) Error Unity at com.unity3d.player.UnityPlayer$e$1.handleMessage(Unknown Source:95) Error Unity at android.os.Handler.dispatchMessage(Handler.java:102) Error Unity at android.os.Looper.loop(Looper.java:246) Error Unity at com.unity3d.player.UnityPlayer$e.run(Unknown Source:20) Error Unity Caused by: java.lang.ClassNotFoundException: com.google.android.gms.ads.initialization.OnInitializationCompleteListener Error Unity ... 8 more Error Unity at UnityEngine.AndroidJNISafe.CheckException () [0x00096] in <d21e055bfb244463b7cf4d29f8901369>:0 Error Unity at UnityEngine.AndroidJNISafe.FindClass (System.String name) [0x0000c] in <d21e055bfb244463b7cf4

該当のソースコード

ひとまずバナー広告とリワード広告に関するスクリプトのみ下記に記載します。
それぞれバナー用とリワード用の空のオブジェクトを作り、それぞれのスクリプトをアタッチしています。

GoogleAdsBanner.cs

C#

1using System.Collections; 2using System.Collections.Generic; 3using System; 4using UnityEngine; 5using GoogleMobileAds.Api; 6 7public class GoogleAdsBanner : MonoBehaviour { 8 9 private BannerView bannerView; 10 11 public void Start() 12 { 13 // Initialize the Google Mobile Ads SDK. 14 MobileAds.Initialize(initStatus => { }); 15 16 this.RequestBanner(); 17 } 18 19 private void RequestBanner() 20 { 21 #if UNITY_ANDROID 22 string adUnitId = "ca-app-pub-3940256099942544/6300978111"; 23 #elif UNITY_IPHONE 24 string adUnitId = "ca-app-pub-7689051089863147/2788662322"; 25 #else 26 string adUnitId = "unexpected_platform"; 27 #endif 28 29 // Clean up banner ad before creating a new one. 30 if (this.bannerView != null) 31 { 32 this.bannerView.Destroy(); 33 } 34 35 AdSize adaptiveSize = 36 AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(AdSize.FullWidth); 37 38 this.bannerView = new BannerView(adUnitId, adaptiveSize, AdPosition.Bottom); 39 40 // Register for ad events. 41 this.bannerView.OnAdLoaded += this.HandleAdLoaded; 42 this.bannerView.OnAdFailedToLoad += this.HandleAdFailedToLoad; 43 this.bannerView.OnAdOpening += this.HandleAdOpened; 44 this.bannerView.OnAdClosed += this.HandleAdClosed; 45 46 AdRequest adRequest = new AdRequest.Builder().Build(); 47 48 // Load a banner ad. 49 this.bannerView.LoadAd(adRequest); 50 } 51 52 53 #region Banner callback handlers 54 55 //関数の中身はほぼ公式から引用。文字数の関係で省略 56 public void HandleAdLoaded(object sender, EventArgs args) 57 { 58 } 59 public void HandleAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) 60 { 61 } 62 public void HandleAdOpened(object sender, EventArgs args) 63 { 64 } 65 public void HandleAdClosed(object sender, EventArgs args) 66 { 67 } 68 public void HandleAdLeftApplication(object sender, EventArgs args) 69 { 70 } 71 #endregion 72}

GoogleAdsReward.cs

C#

1using System.Collections; 2using System.Collections.Generic; 3using System; 4using UnityEngine; 5using GoogleMobileAds.Api; 6 7public class GoogleAdsReward : MonoBehaviour 8{ 9 [SerializeField] HintPanel hintPanel; 10 private RewardedAd rewardedAd; 11 bool isRewarded; 12 13 // Start is called before the first frame update 14 void Start() 15 { 16 MobileAds.Initialize(initStatus => { }); 17 RequestRewardAd(); 18 } 19 20 // Update is called once per frame 21 void Update() 22 { 23 if(isRewarded){ 24 isRewarded=false; 25 ShowRewardResult(); 26 } 27 } 28 29 public void UserChoseToWatchAd() 30 { 31 if(hintPanel.CheckNextHint()){ 32 if(this.rewardedAd.IsLoaded()) 33 { 34 this.rewardedAd.Show(); 35 } 36 } 37 hintPanel.NoHintRemained(); 38 } 39 40 void RequestRewardAd() 41 { 42 43 #if UNITY_ANDROID 44 string adUnitId = "ca-app-pub-3940256099942544/5224354917"; 45 #elif UNITY_IPHONE 46 string adUnitId = "リワード広告のIDを入れます"; 47 #else 48 string appId = "unexpected_platform"; 49 #endif 50 51 this.rewardedAd = new RewardedAd(adUnitId); 52 53 // Load成功時に実行する関数の登録 54 this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded; 55 // Load失敗時に実行する関数の登録 56 this.rewardedAd.OnAdFailedToLoad += HandleRewardedAdFailedToLoad; 57 // 表示時に実行する関数の登録 58 this.rewardedAd.OnAdOpening += HandleRewardedAdOpening; 59 // 表示失敗時に実行する関数の登録 60 this.rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow; 61 // 報酬受け取り時に実行する関数の登録 62 this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward; 63 // 広告を閉じる時に実行する関数の登録 64 this.rewardedAd.OnAdClosed += HandleRewardedAdClosed; 65 66 AdRequest request = new AdRequest.Builder().Build(); 67 this.rewardedAd.LoadAd(request); 68 } 69 70 public void ShowRewardResult() 71 { 72 hintPanel.CallHintPanel(); 73 } 74 75 public void CreateAndLoadRewardedAd() 76 { 77 #if UNITY_ANDROID 78 string adUnitId = "ca-app-pub-3940256099942544/5224354917"; 79 #elif UNITY_IPHONE 80 string adUnitId = "リワード広告のIDを入れます"; 81 #else 82 string appId = "unexpected_platform"; 83 #endif 84 85 this.rewardedAd = new RewardedAd(adUnitId); 86 87 this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded; 88 this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward; 89 this.rewardedAd.OnAdClosed += HandleRewardedAdClosed; 90 91 AdRequest request = new AdRequest.Builder().Build(); 92 this.rewardedAd.LoadAd(request); 93 } 94 95 //関数の中身はほぼ公式から引用。文字数の関係で省略 96 public void HandleRewardedAdLoaded(object sender, EventArgs args) 97 { 98 } 99 public void HandleRewardedAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) 100 { 101 } 102 public void HandleRewardedAdOpening(object sender, EventArgs args) 103 { 104 } 105 public void HandleRewardedAdFailedToShow(object sender, AdErrorEventArgs args) 106 { 107 } 108 public void HandleRewardedAdClosed(object sender, EventArgs args) 109 { 110 } 111 public void HandleUserEarnedReward(object sender, Reward args) 112 { 113 } 114}

ここに問題に対して試したことを記載してください。

Unityのバージョンが2020.3.17f1だったため、2020.3.25f1に上げてみたところ
VisualStudioCodeEditorのアセンブリ参照ができなくなり、UnityEngine.UIやUnityEngine.EventSystemsが
認識されなくなりました。
パッケージマネージャでVisualStudioCodeEditorの更新をかけても改善しなかったため、Unityのバージョンを戻しました。

また下記のような記事を見つけましたが、Google Mobile Ads SDK、またUnity Ads SDKのバージョンを
どのように確認するのかがわかりませんでした。
UnityMediationDependencies.xmlというファイルの中身を修正すればよいのかな?と思いましたが
これはプロジェクトファイルの中に入っているものなのでしょうか?

https://ringonokajitu.com/?p=428

その他原因として考えられることがあればご教授いただけないでしょうか?
よろしくお願いします。

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

2020.3.17f1
・app-IDと広告のIDは取得しておりますが、ひとまずテスト用に公開されているもので試しています。
・iphone動作は考えておらず、今のところandroidのみの予定です。

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

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

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

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

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

guest

回答1

0

自己解決

色々と試していたら実機でも広告表示されるようになりました。

アセット>External Dependency Manager>Android Resolver>Force Resolve を実行することで
エラーが消えました。
下記のサイトを参考にさせていただきました。
https://momokets.com/momolog/admob-androidjavaexception/

投稿2022/02/15 14:13

yuyusaki

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問