Fix TapADN ad lifecycle callbacks

This commit is contained in:
2026-06-04 17:24:54 +08:00
parent a671b0d272
commit 0c9d38a0b2
4 changed files with 119 additions and 7 deletions

View File

@@ -7,6 +7,7 @@ public sealed class TapadnSplashPlayer : ADPlayer, IDirichletSplashAutoAdListene
{
private DirichletAdNative _adNative;
private DirichletSplashAd _loadedAd;
private bool _showSettled;
public override int MaxLoadAttempts => TapadnAdController.CurrentOptions?.SplashMaxLoadAttempts ?? base.MaxLoadAttempts;
public override float LoadRetryDelaySeconds => Math.Max(0f, (TapadnAdController.CurrentOptions?.SplashLoadRetryDelayMs ?? 500) / 1000f);
@@ -63,6 +64,7 @@ public sealed class TapadnSplashPlayer : ADPlayer, IDirichletSplashAutoAdListene
_loadedAd = ad;
_loadedAd.Shown += OnManualShown;
_loadedAd.Clicked += OnManualClicked;
_loadedAd.ShowFailed += OnManualShowFailed;
_loadedAd.Closed += OnManualClosed;
curState = 2;
Debug.Log($"[TapADN] Splash loaded. slot={Key}");
@@ -78,6 +80,7 @@ public sealed class TapadnSplashPlayer : ADPlayer, IDirichletSplashAutoAdListene
{
adListener.onClose = onClose;
adListener.onVideoComplete = onVideoComplete;
_showSettled = false;
curState = 0;
if (UseAutoLoad())
@@ -88,12 +91,18 @@ public sealed class TapadnSplashPlayer : ADPlayer, IDirichletSplashAutoAdListene
if (_loadedAd == null || !_loadedAd.Show())
{
adListener.OnShowError();
OnError(new DirichletError("show_failed", "ShowSplashAd returned false"));
}
}
public void OnError(DirichletError error)
{
if (_showSettled)
{
return;
}
_showSettled = true;
curState = 0;
Debug.LogError($"[TapADN] Splash show failed. code={error?.Code}, message={error?.Message}");
adListener.OnShowError();
@@ -106,6 +115,12 @@ public sealed class TapadnSplashPlayer : ADPlayer, IDirichletSplashAutoAdListene
public void OnAdClose()
{
if (_showSettled)
{
return;
}
_showSettled = true;
adListener.OnAdClose();
adListener.OnShowComplete();
}
@@ -128,6 +143,11 @@ public sealed class TapadnSplashPlayer : ADPlayer, IDirichletSplashAutoAdListene
{
}
private void OnManualShowFailed(DirichletError error)
{
OnError(error);
}
private void OnManualClosed()
{
_loadedAd?.Destroy();