diff --git a/Assets/Script/SDKManager/TransferManager/TransferManager.cs b/Assets/Script/SDKManager/TransferManager/TransferManager.cs index b4ecc23..0445a0c 100644 --- a/Assets/Script/SDKManager/TransferManager/TransferManager.cs +++ b/Assets/Script/SDKManager/TransferManager/TransferManager.cs @@ -10,9 +10,13 @@ namespace WZ { private AdInitState currentState = AdInitState.Idle; private bool isFirebaseActivated = false; - private bool hasReceivedAdjustCallback = false; private Coroutine waitingCoroutine = null; - public event Action OnAdInitStateChanged; + + private int admobRetryCount = 0; + private const int MAX_ADMOB_RETRY_COUNT = 5; + private const float ADMOB_RETRY_INTERVAL = 30f; + private Coroutine admobRetryCoroutine = null; + private bool isRetryingAdMob = false; // 状态枚举 public enum AdInitState @@ -28,13 +32,18 @@ namespace WZ InitializingAdMob, // 初始化AdMob InitializingTopOn, // 初始化TopOn Completed, // 完成 - Failed // 失败 + Failed, // 失败 + RetryingAdMobCheck + } + + public void Init() + { + } public void OnAdjustCallbackReceived() { Debug.Log("收到Adjust回调,开始处理广告初始化"); - hasReceivedAdjustCallback = true; // 开始广告初始化流程 StartAdInitialization(); } @@ -178,6 +187,13 @@ namespace WZ Debug.Log($"AdMob不可用: {message},初始化TopOn广告"); ChangeState(AdInitState.InitializingTopOn, "初始化TopOn广告"); InitializeTopOnAds(); + + if (TransferData.HasReqVpnPermission && TransferData.HasVpnPermission) + { + Debug.Log("权限引导流程已完成且AdMob检查失败,启动重试机制"); + StartAdMobRetry(); + } + } } @@ -225,12 +241,95 @@ namespace WZ Debug.Log("VPN权限被拒绝,初始化TopOn广告"); ChangeState(AdInitState.InitializingTopOn, "初始化TopOn广告"); InitializeTopOnAds(); + } } + private void StartAdMobRetry() + { + if (isRetryingAdMob) + { + Debug.Log("AdMob重试已在运行中"); + return; + } + + if (admobRetryCount >= MAX_ADMOB_RETRY_COUNT) + { + Debug.Log($"已达到最大重试次数({MAX_ADMOB_RETRY_COUNT}),停止重试"); + return; + } + + Debug.Log("启动AdMob重试机制"); + isRetryingAdMob = true; + admobRetryCoroutine = StartCoroutine(AdMobRetryCoroutine()); + } + + private IEnumerator AdMobRetryCoroutine() + { + // 第一次立即检查 + admobRetryCount = 0; + + while (isRetryingAdMob && admobRetryCount < MAX_ADMOB_RETRY_COUNT) + { + Debug.Log($"第{admobRetryCount + 1}次AdMob检查"); + ChangeState(AdInitState.RetryingAdMobCheck, $"第{admobRetryCount + 1}次检查AdMob"); + + bool checkCompleted = false; + bool isAdMobAllowed = false; + string message = ""; + + TransferAndroidClass.IsAllowAdMob((res, msg) => + { + isAdMobAllowed = res; + message = msg; + checkCompleted = true; + }); + + // 等待检查完成 + yield return new WaitUntil(() => checkCompleted); + + if (isAdMobAllowed) + { + Debug.Log($"第{admobRetryCount + 1}次AdMob检查成功: {message}"); + StopAdMobRetry(); + + InitializeAdMobAds(); + break; + } + else + { + Debug.Log($"第{admobRetryCount + 1}次AdMob检查失败: {message}"); + admobRetryCount++; + + // 达到最大重试次数 + if (admobRetryCount >= MAX_ADMOB_RETRY_COUNT) + { + Debug.Log($"达到最大重试次数({MAX_ADMOB_RETRY_COUNT}),停止重试"); + StopAdMobRetry(); + break; + } + + // 等待30秒后再次尝试 + Debug.Log($"等待{ADMOB_RETRY_INTERVAL}秒后重试AdMob检查"); + yield return new WaitForSeconds(ADMOB_RETRY_INTERVAL); + } + } + } + + private void StopAdMobRetry() + { + isRetryingAdMob = false; + + if (admobRetryCoroutine != null) + { + StopCoroutine(admobRetryCoroutine); + admobRetryCoroutine = null; + } + } private void InitializeAdMobAds() { + StopAdMobRetry(); AdmobAdsManager.Instance.Initialize(); }