修复播放完激励展示开屏/数据重复上报/退出后台发放奖励问题

This commit is contained in:
juncong lee 2025-09-03 19:58:43 +08:00
parent c844ffcf29
commit 33837645b5
10 changed files with 70 additions and 93 deletions

View File

@ -34,6 +34,7 @@ namespace WZ
private float _spStartLoadTime = 0;
public bool _splashLoaded = false;
public bool _initialized { get; private set; } = false;
private bool _receivedReward = false;
public void Initialize()
{
@ -46,11 +47,11 @@ namespace WZ
if (_interstitialAdUnits.Count > 0) LoadInterstitial();
if (_rewardedAdUnits.Count > 0) LoadRewarded();
if (_splashAdUnits.Count > 0) AdsSplashManager.Instance.InitSplash();
if (_nativeAdUnits.Count > 0)LoadNative();
if (_nativeAdUnits.Count > 0) LoadNative();
LoggerUtils.Debug("[Admob] init success");
});
}
public void RefreshAdsData()
@ -74,7 +75,7 @@ namespace WZ
OnRewardedAdShowed,
OnRewardedAdDismissed,
OnRewardedAdError,
OnRewardAdPaid,
OnRewardEarnReward,
OnRewardedAdClicked
);
_rvStartLoadTime = Time.realtimeSinceStartup;
@ -117,8 +118,9 @@ namespace WZ
private void OnRewardedAdDismissed(string adSource,string adUnitId,double revenue)
{
AdsActionEvents.TrackAdClosed(Platfrom,adSource,adUnitId,AdsType.Rewarded,_rvPos,revenue);
_rvCloseCallback?.Invoke(true,revenue);
_rvCloseCallback?.Invoke(_receivedReward,revenue);
_rvCloseCallback = null;
_receivedReward = false;
LoadRewarded();
}
@ -135,10 +137,9 @@ namespace WZ
AdsActionEvents.TrackAdClicked(Platfrom,adSource,adUnitId,AdsType.Rewarded,_rvPos,revenue);
}
private void OnRewardAdPaid(AdValue adValue)
private void OnRewardEarnReward(bool reward)
{
_receivedReward = reward;
}
#endregion
@ -412,8 +413,6 @@ namespace WZ
adValue.Value / 1000000f,
type == AdsType.Rewarded ? _rvPos : "",
AdPlayCountManager.GetAdPlayCount(type));
AdsActionEvents.TrackAdImpression(Platfrom,loadedAdapterResponseInfo.AdSourceName,placement,type,type == AdsType.Rewarded ? _rvPos : "",adValue.Value / 1000000f);
}
#endregion

View File

@ -16,12 +16,12 @@ namespace WZ
Action<string> onAdShowed = null,
Action<string,string,double> onAdDismissed = null,
Action<string, int, string> onAdError = null,
Action<AdValue> onAdPaid = null,
Action<bool> onEarnRewarded = null,
Action<string,string,double> onAdClicked = null)
{
foreach (var adUnitId in adUnitIds)
{
CreateRewardedAd(adUnitId, onAdLoaded, onAdLoadFailed, onAdShowed, onAdDismissed, onAdError,onAdPaid, onAdClicked);
CreateRewardedAd(adUnitId, onAdLoaded, onAdLoadFailed, onAdShowed, onAdDismissed, onAdError,onEarnRewarded, onAdClicked);
}
}
@ -31,7 +31,7 @@ namespace WZ
Action<string> onAdShowed,
Action<string,string,double> onAdDismissed,
Action<string, int, string> onAdError,
Action<AdValue> onAdPaid,
Action<bool> onEarnRewarded,
Action<string,string,double> onAdClicked)
{
if (_rewardedAds.ContainsKey(adUnitId))
@ -68,12 +68,12 @@ namespace WZ
adValue,
AdsType.Rewarded,
adUnitId);
onAdPaid?.Invoke(adValue);
};
ad.OnAdImpressionRecorded += () =>
{
LoggerUtils.Debug("[Admob] rewarded ad recorded an impression.");
onEarnRewarded?.Invoke(true);
};
ad.OnAdClicked += () =>
@ -148,7 +148,7 @@ namespace WZ
public string GetHighestPayingAdUnit()
{
string highestPayingAdUnit = null;
double highestRevenue = 0;
double highestRevenue = -1;
foreach (var kvp in _adRevenueCache)
{

View File

@ -69,12 +69,6 @@ namespace WZ
public void ShowRewardAd(string _adPos, Action<bool, double> _rewardCallback = null, Action _showFailedCallback = null)
{
LoggerUtils.Debug("ShowRewardAd _adPos:"+_adPos+" ready:"+IsRewardAdReady());
AdsActionEvents.TrackAdPosition(AdsType.Rewarded, _adPos);
if (!IsRewardAdReady())
{
_showFailedCallback?.Invoke();
return;
}
otherAdsOnShow = true;
PlatformType result = GetBestPlatformType(false);
BidPlatformManager.Instance.RecordBidSuccess(result, AdsType.Rewarded);
@ -120,13 +114,6 @@ namespace WZ
/// <param name="callback"></param>
public void ShowInterstitialAd(string _adPos, IvType _IvType = IvType.IV1, Action<double> _closeCallback = null)
{
AdsActionEvents.TrackAdPosition(AdsType.Interstitial, _adPos);
if (!IsInterstitialReady())
{
_closeCallback?.Invoke(0);
_closeCallback = null;
return;
}
AdsSDKManager.Instance.otherAdsOnShow = true;
PlatformType result = GetBestPlatformType(true);
BidPlatformManager.Instance.RecordBidSuccess(result, AdsType.Interstitial);
@ -170,13 +157,10 @@ namespace WZ
public void ShowBanner()
{
AdsActionEvents.TrackAdPosition(AdsType.Banner, "");
if (IsBannerAdReady())
{
AdmobAdsManager.Instance.DisplayBanner();
AdPlayCountManager.IncrementAdPlayCount(AdsType.Banner);
AdjustTrackEvent.Instance.TrackEventName("Banner_Show", new Dictionary<string, object>());
}
AdmobAdsManager.Instance.DisplayBanner();
AdPlayCountManager.IncrementAdPlayCount(AdsType.Banner);
AdjustTrackEvent.Instance.TrackEventName("Banner_Show", new Dictionary<string, object>());
}
public void HideBanner()
@ -194,13 +178,10 @@ namespace WZ
public void ShowNativeAd(string _adPos, string adUnitId, NativeAdPosition position)
{
AdsActionEvents.TrackAdPosition(AdsType.Native, "");
if (IsNativeAdReady(adUnitId))
{
AdmobAdsManager.Instance.DisplayNative(_adPos, adUnitId, position);
AdjustTrackEvent.Instance.TrackEventName("NA_Show", new Dictionary<string, object>());
AdPlayCountManager.IncrementAdPlayCount(AdsType.Native);
}
AdmobAdsManager.Instance.DisplayNative(_adPos, adUnitId, position);
AdjustTrackEvent.Instance.TrackEventName("NA_Show", new Dictionary<string, object>());
AdPlayCountManager.IncrementAdPlayCount(AdsType.Native);
}
public void RemoveNativeAd(string adUnitId)

View File

@ -82,7 +82,7 @@ namespace WZ
{
return;
}
AdsActionEvents.TrackAdPosition(AdsType.Splash,"");
if (!AdsSDKManager.Instance.IsSplashAvailable())
{
LoggerUtils.Debug(" [AppOpen] 热启动 广告是否准备好:");
@ -97,6 +97,7 @@ namespace WZ
{
// 冷启动
// 首次启动
AdsActionEvents.TrackAdPosition(AdsType.Splash,"");
var isNew = PlayerPrefsUtils.GetPlayerPrefsInt("Firstcold_Splash_Switch", 0) == 0;
// 首次冷启动开关
var isFirstShow = GetSplashConfigItem().firstcold_splash_switch == 1;

View File

@ -33,9 +33,10 @@ namespace WZ
BigoAdSdk.OnInitFinish += () =>
{
LoggerUtils.Debug($"[Bigo] sdk init success");
_initialized = true;
LoadRewarded();
LoadInterstitial();
_initialized = true;
};
var config = new BigoAdConfig.Builder()
@ -268,8 +269,6 @@ namespace WZ
type.ToString(),
revenue, type == AdsType.Rewarded ? _rvPos : "",
AdPlayCountManager.GetAdPlayCount(type));
AdsActionEvents.TrackAdImpression(Platfrom,ClientName,placement,type,type == AdsType.Rewarded ? _rvPos : "",revenue);
}
#endregion
}

View File

@ -119,23 +119,5 @@ namespace WZ
ShuShuEvent.Instance.Track(eventName, dic);
LoggerUtils.Debug("[actionevent] TrackAdPosition"+JsonMapper.ToJson(dic));
}
public static void TrackAdImpression(PlatformType adPlatform, string adSource, string adUnitName, AdsType adFormat, string posotion, double value)
{
var eventName = "ad_impression";
var dic = new Dictionary<string, object> {
{ "ad_platform", adPlatform.ToString()},
{ "ad_source", adSource},
{ "ad_unit_name", adUnitName},
{ "ad_format", adFormat.ToString()},
{ "position", posotion},
{ "value", value},
{ "currency","USD"},
{ "number",AdPlayCountManager.GetAdPlayCount(adFormat)}
};
FireBaseAnalyticsManager.Instance.LogEvent(eventName, dic);
ShuShuEvent.Instance.Track(eventName, dic);
LoggerUtils.Debug("[actionevent] TrackAdImpression"+JsonMapper.ToJson(dic));
}
}
}

View File

@ -193,13 +193,6 @@ namespace WZ
type == AdsType.Rewarded ? _rewardAdRevenue : _interstitiaAdRevenue,
type == AdsType.Rewarded ? _rvPos : "",
AdPlayCountManager.GetAdPlayCount(type));
AdsActionEvents.TrackAdImpression(Platfrom,
ClientName,
type == AdsType.Rewarded ? _rewardAdUnitId : _interstitialAdUnitId,
type,
type == AdsType.Rewarded ? _rvPos : "",
type == AdsType.Rewarded ? _rewardAdRevenue : _interstitiaAdRevenue);
}
#endregion

View File

@ -27,6 +27,7 @@ namespace WZ
private Action<double> _ivCloseCallback = null;
private Action _rvShowFailedCallback = null;
public bool _initialized { get; private set; } = false;
private bool _receivedReward = false;
public void Initialize()
{
@ -69,6 +70,7 @@ namespace WZ
MaxSdkCallbacks.Rewarded.OnAdClickedEvent += OnRewardedAdClickedEvent;
MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += OnRewardedAdHiddenEvent;
MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnRewardedRevenue;
MaxSdkCallbacks.Rewarded.OnAdReceivedRewardEvent += OnRewardedAdReceivedRewardEvent;
}
public void LoadRewarded()
@ -118,13 +120,15 @@ namespace WZ
AdsActionEvents.TrackAdLoaded(Platfrom, adInfo.NetworkName, adInfo.AdUnitIdentifier, AdsType.Rewarded, Time.realtimeSinceStartup - _rvStartLoadTime);
}
private void OnRewardedAdLoadFailedEvent(string adunit, MaxSdkBase.ErrorInfo errorInfo)
{
LoggerUtils.Debug("[Max] OnRewardedAdLoadFailedEvent errorInfo" + errorInfo.Message);
_rewardRetryAttempt++;
double retryDelay = Math.Pow(2, Math.Min(6, _rewardRetryAttempt));
TimerUtils.Instance.DelayExecute((float)retryDelay, LoadRewarded);
AdsActionEvents.TrackAdFailToLoad(Platfrom, "","",AdsType.Rewarded,Time.realtimeSinceStartup - _rvStartLoadTime,errorInfo.Message);
AdsActionEvents.TrackAdFailToLoad(Platfrom, "", "", AdsType.Rewarded, Time.realtimeSinceStartup - _rvStartLoadTime, errorInfo.Message);
}
@ -151,11 +155,22 @@ namespace WZ
private void OnRewardedAdHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
_rvCloseCallback?.Invoke(true,adInfo.Revenue);
_rvCloseCallback?.Invoke(_receivedReward,adInfo.Revenue);
_rvCloseCallback = null;
_receivedReward = false;
LoadRewarded();
LoggerUtils.Debug("[Max] OnRewardedAdHiddenEvent");
LoggerUtils.Debug("[Max] OnRewardedAdHiddenEvent "+_receivedReward);
AdsActionEvents.TrackAdClosed(Platfrom,adInfo.NetworkName,adInfo.AdUnitIdentifier,AdsType.Rewarded,_rvPos,adInfo.Revenue);
}
private void OnRewardedAdReceivedRewardEvent(string adUnitId, MaxSdk.Reward reward, MaxSdkBase.AdInfo arg3)
{
LoggerUtils.Debug("[Max] OnRewardedAdReceivedRewardEvent network: " + arg3.NetworkName + " revenue: " + arg3.Revenue + " NetworkPlacement: " + arg3.NetworkPlacement + " AdUnitIdentifier: " + arg3.AdUnitIdentifier + " Placement: " + arg3.Placement);
_receivedReward = true;
}
private void RewardCallback()
{
}
@ -324,13 +339,6 @@ namespace WZ
adInfo.Revenue,
type == AdsType.Rewarded ? _rvPos : "",
AdPlayCountManager.GetAdPlayCount(type));
AdsActionEvents.TrackAdImpression(Platfrom,
adInfo.NetworkName,
adInfo.AdUnitIdentifier,
type,
type == AdsType.Rewarded ? _rvPos : "",
adInfo.Revenue);
}
#endregion
}

View File

@ -23,18 +23,20 @@ namespace WZ
private Action<double> _ivCloseCallback = null;
private Action _rvShowFailedCallback = null;
public bool _initialized { get; private set; } = false;
private bool _receivedReward = false;
public void Initialize()
{
LoggerUtils.Debug("[Tpn] 初始化 Tpn 广告 SDK appid:" + _topon_app_id + " appkey:" + _topon_app_key + " ivId:" + _topon_interstitial_units + " rvId:" + _topon_rewarded_units);
if(_initialized )return;
if (_initialized) return;
if (!string.IsNullOrEmpty(_topon_app_id) && !string.IsNullOrEmpty(_topon_app_key))
{
ATSDKAPI.initSDK(_topon_app_id, _topon_app_key);
_initialized = true;
ATSDKAPI.setLogDebug(false);
InitRewarded();
InitInterstitial();
_initialized = true;
}
}
@ -55,6 +57,7 @@ namespace WZ
ATRewardedAutoVideo.Instance.client.onAdVideoStartEvent += OnAdVideoStartEvent;
ATRewardedAutoVideo.Instance.client.onAdVideoFailureEvent += OnAdVideoFailureEvent;
ATRewardedAutoVideo.Instance.client.onAdClickEvent += OnAdVideoClickedEvent;
ATRewardedAutoVideo.Instance.client.onRewardEvent += OnAdRewardEvent;
ATRewardedAutoVideo.Instance.addAutoLoadAdPlacementID(new string[] { _topon_rewarded_units });
AdsActionEvents.TrackAdStartLoad(Platfrom, "", "", AdsType.Rewarded);
@ -183,7 +186,11 @@ namespace WZ
}, "");
}
private void OnAdRewardEvent(object sender, ATAdEventArgs erg)
{
LoggerUtils.Debug("[Tpn] 广告奖励");
_receivedReward = true;
}
private void OnAdVideoClosedEvent(object sender, ATAdEventArgs erg)
{
LoggerUtils.Debug("[Tpn] 广告关闭了:" + JsonMapper.ToJson(erg.callbackInfo.toDictionary()));
@ -199,8 +206,9 @@ namespace WZ
{
if (erg.placementId.Equals(_topon_rewarded_units))
{
_rvCloseCallback?.Invoke(true,erg.callbackInfo.publisher_revenue);
_rvCloseCallback?.Invoke(_receivedReward, erg.callbackInfo.publisher_revenue);
_rvCloseCallback = null;
_receivedReward = false;
}
else if (erg.placementId.Equals(_topon_interstitial_units))
{
@ -304,13 +312,6 @@ namespace WZ
erg.callbackInfo.publisher_revenue,
erg.placementId.Equals(_topon_rewarded_units) ? _rvPos : "",
AdPlayCountManager.GetAdPlayCount(erg.placementId.Equals(_topon_rewarded_units) ? AdsType.Rewarded : AdsType.Interstitial));
AdsActionEvents.TrackAdImpression(Platfrom,
ClientName + "_" + erg.callbackInfo.network_firm_id,
erg.callbackInfo.adunit_id,
erg.placementId.Equals(_topon_rewarded_units) ? AdsType.Rewarded : AdsType.Interstitial,
erg.placementId.Equals(_topon_rewarded_units) ? _rvPos : "",
erg.callbackInfo.publisher_revenue);
}
#endregion
}

View File

@ -54,11 +54,13 @@ public class AppSDKManager : D_MonoSingleton<AppSDKManager>
/// <param name="callback"></param>
public void ShowRewardAd(string position, Action<bool,double> callback = null)
{
AdsActionEvents.TrackAdPosition(AdsType.Rewarded, position);
bool isRewardAdReady = AdsSDKManager.Instance.IsRewardAdReady();
if (isRewardAdReady)
{
AdsSDKManager.Instance.ShowRewardAd(position, (isReward, revenue) =>
{
AdsSplashManager.Instance.backgroundTime = Time.realtimeSinceStartup;
if (isReward)
{
AdsSDKManager.Instance.ClearIvRules();
@ -92,6 +94,7 @@ public class AppSDKManager : D_MonoSingleton<AppSDKManager>
/// <param name="callback"></param>
public void ShowInterstitial(string position, IvType ivadType = IvType.IV1, Action<double> callback = null)
{
AdsActionEvents.TrackAdPosition(AdsType.Interstitial, position);
//插屏展示逻辑
bool ivRulesShow = AdsSDKManager.Instance.IvRulesShow(ivadType);
if (ivRulesShow)
@ -105,6 +108,7 @@ public class AppSDKManager : D_MonoSingleton<AppSDKManager>
//展示完一个插屏之后调用
IvRulesConst.OverLevels[ivadType.ToString()] = 0;
IvRulesConst.Intervals[ivadType.ToString()] = TimeUtils.GetLocalTimestamp();
AdsSplashManager.Instance.backgroundTime = Time.realtimeSinceStartup;
callback?.Invoke(revenue);
});
}
@ -121,7 +125,12 @@ public class AppSDKManager : D_MonoSingleton<AppSDKManager>
public void ShowBanner()
{
AdsSDKManager.Instance.ShowBanner();
AdsActionEvents.TrackAdPosition(AdsType.Banner, "");
if (AdsSDKManager.Instance.IsBannerAdReady())
{
AdsSDKManager.Instance.ShowBanner();
}
}
public void HideBanner()
@ -137,6 +146,7 @@ public class AppSDKManager : D_MonoSingleton<AppSDKManager>
public void ShowFullNative(RectTransform rectTransform, Camera pCom = null, string position = "")
{
AdsActionEvents.TrackAdPosition(AdsType.Native, position);
if (!IsNativeFullReady())
{
return;
@ -166,6 +176,7 @@ public class AppSDKManager : D_MonoSingleton<AppSDKManager>
public void ShowNative(RectTransform rectTransform, Camera pCom = null, string position = "")
{
AdsActionEvents.TrackAdPosition(AdsType.Native, position);
if (!IsNativeReady())
{
return;
@ -195,6 +206,7 @@ public class AppSDKManager : D_MonoSingleton<AppSDKManager>
public void ShowSmallNative(RectTransform rectTransform, Camera pCom = null, string position = "")
{
AdsActionEvents.TrackAdPosition(AdsType.Native, position);
if (!IsSmallNativeReady())
{
return;
@ -224,6 +236,7 @@ public class AppSDKManager : D_MonoSingleton<AppSDKManager>
public void ShowMinddleNative(RectTransform rectTransform, Camera pCom = null, string position = "")
{
AdsActionEvents.TrackAdPosition(AdsType.Native, position);
if (!IsSmallNativeReady())
{
return;