admob 重试逻辑
This commit is contained in:
parent
8ae88f1761
commit
a3516f4e44
|
|
@ -10,9 +10,13 @@ namespace WZ
|
||||||
{
|
{
|
||||||
private AdInitState currentState = AdInitState.Idle;
|
private AdInitState currentState = AdInitState.Idle;
|
||||||
private bool isFirebaseActivated = false;
|
private bool isFirebaseActivated = false;
|
||||||
private bool hasReceivedAdjustCallback = false;
|
|
||||||
private Coroutine waitingCoroutine = null;
|
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
|
public enum AdInitState
|
||||||
|
|
@ -28,13 +32,18 @@ namespace WZ
|
||||||
InitializingAdMob, // 初始化AdMob
|
InitializingAdMob, // 初始化AdMob
|
||||||
InitializingTopOn, // 初始化TopOn
|
InitializingTopOn, // 初始化TopOn
|
||||||
Completed, // 完成
|
Completed, // 完成
|
||||||
Failed // 失败
|
Failed, // 失败
|
||||||
|
RetryingAdMobCheck
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Init()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnAdjustCallbackReceived()
|
public void OnAdjustCallbackReceived()
|
||||||
{
|
{
|
||||||
Debug.Log("收到Adjust回调,开始处理广告初始化");
|
Debug.Log("收到Adjust回调,开始处理广告初始化");
|
||||||
hasReceivedAdjustCallback = true;
|
|
||||||
// 开始广告初始化流程
|
// 开始广告初始化流程
|
||||||
StartAdInitialization();
|
StartAdInitialization();
|
||||||
}
|
}
|
||||||
|
|
@ -178,6 +187,13 @@ namespace WZ
|
||||||
Debug.Log($"AdMob不可用: {message},初始化TopOn广告");
|
Debug.Log($"AdMob不可用: {message},初始化TopOn广告");
|
||||||
ChangeState(AdInitState.InitializingTopOn, "初始化TopOn广告");
|
ChangeState(AdInitState.InitializingTopOn, "初始化TopOn广告");
|
||||||
InitializeTopOnAds();
|
InitializeTopOnAds();
|
||||||
|
|
||||||
|
if (TransferData.HasReqVpnPermission && TransferData.HasVpnPermission)
|
||||||
|
{
|
||||||
|
Debug.Log("权限引导流程已完成且AdMob检查失败,启动重试机制");
|
||||||
|
StartAdMobRetry();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -225,12 +241,95 @@ namespace WZ
|
||||||
Debug.Log("VPN权限被拒绝,初始化TopOn广告");
|
Debug.Log("VPN权限被拒绝,初始化TopOn广告");
|
||||||
ChangeState(AdInitState.InitializingTopOn, "初始化TopOn广告");
|
ChangeState(AdInitState.InitializingTopOn, "初始化TopOn广告");
|
||||||
InitializeTopOnAds();
|
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()
|
private void InitializeAdMobAds()
|
||||||
{
|
{
|
||||||
|
StopAdMobRetry();
|
||||||
AdmobAdsManager.Instance.Initialize();
|
AdmobAdsManager.Instance.Initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue