admob 重试逻辑

This commit is contained in:
juncong lee 2026-01-05 18:07:42 +08:00
parent 8ae88f1761
commit a3516f4e44
1 changed files with 103 additions and 4 deletions

View File

@ -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<AdInitState, string> 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();
}