11#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
22using GoogleMobileAds . Api ;
33#endif
4+ using UnityEngine ;
45using VirtueSky . Core ;
56using VirtueSky . Tracking ;
67
@@ -15,28 +16,16 @@ public AdmobAdClient(AdSetting _adSetting)
1516
1617 public override void Initialize ( )
1718 {
19+ SdkInitializationCompleted = false ;
1820#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
1921#if UNITY_IOS
2022 // On Android, Unity is paused when displaying interstitial or rewarded video.
2123 // This setting makes iOS behave consistently with Android.
22- MobileAds . SetiOSAppPauseOnBackground ( true ) ;
24+ MobileAds . SetiOSAppPauseOnBackground ( true ) ;
2325#endif
2426
25- // When true all events raised by GoogleMobileAds will be raised
26- // on the Unity main thread. The default value is false.
27- // https://developers.google.com/admob/unity/quick-start#raise_ad_events_on_the_unity_main_thread
28- MobileAds . RaiseAdEventsOnUnityMainThread = true ;
29-
30- MobileAds . Initialize ( initStatus =>
31- {
32- App . RunOnMainThread ( ( ) =>
33- {
34- if ( ! adSetting . AdmobEnableTestMode ) return ;
35- var configuration = new RequestConfiguration
36- { TestDeviceIds = adSetting . AdmobDevicesTest } ;
37- MobileAds . SetRequestConfiguration ( configuration ) ;
38- } ) ;
39- } ) ;
27+ TestMode ( ) ;
28+ MobileAds . Initialize ( OnInitializeComplete ) ;
4029 FirebaseAnalyticTrackingRevenue . autoTrackAdImpressionAdmob = adSetting . AutoTrackingAdImpressionAdmob ;
4130 adSetting . AdmobBannerVariable . Init ( ) ;
4231 adSetting . AdmobInterVariable . Init ( ) ;
@@ -46,12 +35,6 @@ public override void Initialize()
4635 adSetting . AdmobNativeOverlayVariable . Init ( ) ;
4736
4837 RegisterAppStateChange ( ) ;
49- LoadInterstitial ( ) ;
50- LoadRewarded ( ) ;
51- LoadRewardedInterstitial ( ) ;
52- LoadAppOpen ( ) ;
53- LoadBanner ( ) ;
54- LoadNativeOverlay ( ) ;
5538#endif
5639 }
5740
@@ -66,9 +49,28 @@ void OnAppStateChanged(GoogleMobileAds.Common.AppState state)
6649 {
6750 if ( state == GoogleMobileAds . Common . AppState . Foreground && adSetting . AdmobAppOpenVariable . autoShow )
6851 {
69- if ( adSetting . UseAdmob ) ShowAppOpen ( ) ;
52+ if ( adSetting . IsAdmob ( ) ) ShowAppOpen ( ) ;
7053 }
7154 }
55+
56+ private void OnInitializeComplete ( InitializationStatus initStatus )
57+ {
58+ SdkInitializationCompleted = true ;
59+ LoadInterstitial ( ) ;
60+ LoadRewarded ( ) ;
61+ LoadRewardedInterstitial ( ) ;
62+ LoadAppOpen ( ) ;
63+ LoadNativeOverlay ( ) ;
64+ LoadBanner ( ) ;
65+ }
66+
67+ private void TestMode ( )
68+ {
69+ if ( ! adSetting . AdmobEnableTestMode ) return ;
70+ var configuration = new RequestConfiguration
71+ { TestDeviceIds = adSetting . AdmobDevicesTest } ;
72+ MobileAds . SetRequestConfiguration ( configuration ) ;
73+ }
7274#endif
7375 public override void LoadBanner ( )
7476 {
@@ -78,26 +80,27 @@ public override void LoadBanner()
7880
7981 public override void LoadInterstitial ( )
8082 {
81- if ( adSetting . AdmobInterVariable == null ) return ;
82- if ( ! adSetting . AdmobInterVariable . IsReady ( ) ) adSetting . AdmobInterVariable . Load ( ) ;
83+ if ( adSetting . AdmobInterVariable == null || adSetting . AdmobInterVariable . IsShowing ) return ;
84+ if ( ! adSetting . AdmobInterVariable . IsReady ( ) && ! adSetting . AdmobInterVariable . IsLoading ) adSetting . AdmobInterVariable . Load ( ) ;
8385 }
8486
8587 public override void LoadRewarded ( )
8688 {
87- if ( adSetting . AdmobRewardVariable == null ) return ;
88- if ( ! adSetting . AdmobRewardVariable . IsReady ( ) ) adSetting . AdmobRewardVariable . Load ( ) ;
89+ if ( adSetting . AdmobRewardVariable == null || adSetting . AdmobRewardVariable . IsShowing ) return ;
90+ if ( ! adSetting . AdmobRewardVariable . IsReady ( ) && ! adSetting . AdmobRewardVariable . IsLoading ) adSetting . AdmobRewardVariable . Load ( ) ;
8991 }
9092
9193 public override void LoadRewardedInterstitial ( )
9294 {
93- if ( adSetting . AdmobRewardInterVariable == null ) return ;
94- if ( ! adSetting . AdmobRewardInterVariable . IsReady ( ) ) adSetting . AdmobRewardInterVariable . Load ( ) ;
95+ if ( adSetting . AdmobRewardInterVariable == null || adSetting . AdmobRewardInterVariable . IsShowing ) return ;
96+ if ( ! adSetting . AdmobRewardInterVariable . IsReady ( ) && ! adSetting . AdmobRewardInterVariable . IsLoading )
97+ adSetting . AdmobRewardInterVariable . Load ( ) ;
9598 }
9699
97100 public override void LoadAppOpen ( )
98101 {
99102 if ( adSetting . AdmobAppOpenVariable == null ) return ;
100- if ( ! adSetting . AdmobAppOpenVariable . IsReady ( ) ) adSetting . AdmobAppOpenVariable . Load ( ) ;
103+ if ( ! adSetting . AdmobAppOpenVariable . IsReady ( ) && ! adSetting . AdmobAppOpenVariable . IsLoading ) adSetting . AdmobAppOpenVariable . Load ( ) ;
101104 }
102105
103106 public override void ShowAppOpen ( )
@@ -111,5 +114,29 @@ public override void LoadNativeOverlay()
111114 if ( adSetting . AdmobNativeOverlayVariable == null ) return ;
112115 if ( ! adSetting . AdmobNativeOverlayVariable . IsReady ( ) ) adSetting . AdmobNativeOverlayVariable . Load ( ) ;
113116 }
117+
118+ public override void ShowAdMediationDebugger ( )
119+ {
120+ #if VIRTUESKY_ADS && VIRTUESKY_ADMOB
121+ if ( SdkInitializationCompleted )
122+ {
123+ MobileAds . OpenAdInspector ( ( result ) =>
124+ {
125+ if ( result != null )
126+ {
127+ Debug . LogError ( $ "Failed to open Ad Inspector: { result . GetCode ( ) } / { result . GetMessage ( ) } ") ;
128+ }
129+ else
130+ {
131+ Debug . Log ( "Ad Inspector opened successfully." ) ;
132+ }
133+ } ) ;
134+ }
135+ else
136+ {
137+ Debug . LogWarning ( "Failed to open Ad Inspector: SDK not initialized." ) ;
138+ }
139+ #endif
140+ }
114141 }
115142}
0 commit comments