admob 重试逻辑
This commit is contained in:
parent
8ae88f1761
commit
a3516f4e44
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue