148 lines
5.7 KiB
C#
148 lines
5.7 KiB
C#
using asap.core;
|
|
using GameCore;
|
|
using System;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace game
|
|
{
|
|
public class RewardAdHandler
|
|
{
|
|
private readonly string adUnitId;
|
|
private bool isLoadTriggered;
|
|
private int retryCount;
|
|
private AdvertPopupType currentType = AdvertPopupType.None;
|
|
|
|
public RewardAdHandler(string adUnitId)
|
|
{
|
|
this.adUnitId = adUnitId;
|
|
}
|
|
|
|
public void RegisterCallbacks()
|
|
{
|
|
MaxSdkCallbacks.Rewarded.OnAdLoadedEvent += OnAdLoaded;
|
|
MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnAdLoadFailed;
|
|
MaxSdkCallbacks.Rewarded.OnAdDisplayedEvent += OnAdDisplayed;
|
|
MaxSdkCallbacks.Rewarded.OnAdDisplayFailedEvent += OnAdDisplayFailed;
|
|
MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += OnAdHidden;
|
|
MaxSdkCallbacks.Rewarded.OnAdClickedEvent += OnAdClicked;
|
|
MaxSdkCallbacks.Rewarded.OnAdReceivedRewardEvent += OnAdReceivedReward;
|
|
MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnAdRevenuePaid;
|
|
}
|
|
|
|
public void UnregisterCallbacks()
|
|
{
|
|
MaxSdkCallbacks.Rewarded.OnAdLoadedEvent -= OnAdLoaded;
|
|
MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent -= OnAdLoadFailed;
|
|
MaxSdkCallbacks.Rewarded.OnAdDisplayedEvent -= OnAdDisplayed;
|
|
MaxSdkCallbacks.Rewarded.OnAdDisplayFailedEvent -= OnAdDisplayFailed;
|
|
MaxSdkCallbacks.Rewarded.OnAdHiddenEvent -= OnAdHidden;
|
|
MaxSdkCallbacks.Rewarded.OnAdClickedEvent -= OnAdClicked;
|
|
MaxSdkCallbacks.Rewarded.OnAdReceivedRewardEvent -= OnAdReceivedReward;
|
|
MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent -= OnAdRevenuePaid;
|
|
}
|
|
|
|
public void TryLoad(string triggerSource)
|
|
{
|
|
if (isLoadTriggered || MaxSdk.IsRewardedAdReady(adUnitId))
|
|
return;
|
|
|
|
isLoadTriggered = true;
|
|
AdsEventLogger.LogLoadStart("reward", adUnitId, triggerSource);
|
|
AdsEventLogger.SetCrashFlag("reward", "load");
|
|
MaxSdk.LoadRewardedAd(adUnitId);
|
|
}
|
|
|
|
public void Show(AdvertPopupType advertPopupType)
|
|
{
|
|
if (advertPopupType == AdvertPopupType.None) return;
|
|
|
|
currentType = advertPopupType;
|
|
|
|
using (var e = GEvent.GameEvent("ads_reward_click"))
|
|
{
|
|
e.AddContent("ad_unit_id", adUnitId);
|
|
e.AddContent("placement", advertPopupType.ToString());
|
|
}
|
|
|
|
if (MaxSdk.IsRewardedAdReady(adUnitId))
|
|
{
|
|
MaxSdk.ShowRewardedAd(adUnitId, advertPopupType.ToString());
|
|
}
|
|
else
|
|
{
|
|
GContext.Publish(new AdsResult() { Result = 1, Type = advertPopupType });
|
|
AdsEventLogger.LogNotReady("reward", advertPopupType.ToString());
|
|
ToastPanel.Show(LocalizationMgr.GetText("UI_ToastPanel_27"));
|
|
}
|
|
}
|
|
|
|
private void OnAdLoaded(string adUnitId, MaxSdkBase.AdInfo adInfo)
|
|
{
|
|
retryCount = 0;
|
|
AdsEventLogger.ClearCrashFlag();
|
|
AdsEventLogger.LogLoadSuccess("reward", adUnitId, adInfo.Placement);
|
|
}
|
|
|
|
private async void OnAdLoadFailed(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
|
|
{
|
|
retryCount++;
|
|
if(retryCount > 5)
|
|
{
|
|
AdsEventLogger.ClearCrashFlag();
|
|
}
|
|
int retryDelay = Math.Min(6, retryCount) * 2000;
|
|
UnityEngine.Debug.LogWarning($"[RewardAdHandler] Load failed, retry {retryDelay}ms, attempt {retryCount}, {errorInfo}");
|
|
AdsEventLogger.LogLoadFail("reward", adUnitId, retryCount, errorInfo.Code.ToString(), errorInfo.Message);
|
|
await Task.Delay(retryDelay);
|
|
MaxSdk.LoadRewardedAd(adUnitId);
|
|
}
|
|
|
|
private void OnAdDisplayed(string adUnitId, MaxSdkBase.AdInfo adInfo)
|
|
{
|
|
AdsEventLogger.ClearCrashFlag();
|
|
AdsEventLogger.SetCrashFlag("reward", "display");
|
|
AdsEventLogger.LogDisplay("reward", adUnitId, adInfo.Placement);
|
|
}
|
|
|
|
private void OnAdDisplayFailed(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
|
|
{
|
|
AdsEventLogger.ClearCrashFlag();
|
|
AdvertPopupType type = GetAdvertPopupType(adInfo);
|
|
GContext.Publish(new AdsResult() { Result = 1, Type = type });
|
|
AdsEventLogger.LogDisplayFail("reward", adUnitId, adInfo.Placement, errorInfo.Code.ToString(), errorInfo.Message);
|
|
MaxSdk.LoadRewardedAd(adUnitId);
|
|
}
|
|
|
|
private void OnAdHidden(string adUnitId, MaxSdkBase.AdInfo adInfo)
|
|
{
|
|
AdsEventLogger.ClearCrashFlag();
|
|
AdsEventLogger.LogHidden("reward", adUnitId, adInfo.Placement);
|
|
MaxSdk.LoadRewardedAd(adUnitId);
|
|
}
|
|
|
|
private void OnAdClicked(string adUnitId, MaxSdkBase.AdInfo adInfo)
|
|
{
|
|
AdsEventLogger.LogClick("reward", adUnitId, adInfo.Placement);
|
|
}
|
|
|
|
private void OnAdReceivedReward(string adUnitId, MaxSdk.Reward reward, MaxSdkBase.AdInfo adInfo)
|
|
{
|
|
AdvertPopupType type = GetAdvertPopupType(adInfo);
|
|
GContext.Publish(new AdsResult() { Result = 0, Type = type });
|
|
AdsEventLogger.LogRewarded(adUnitId, adInfo.Placement);
|
|
}
|
|
|
|
private void OnAdRevenuePaid(string adUnitId, MaxSdkBase.AdInfo adInfo)
|
|
{
|
|
GEvent.ADRevenueEvent(adUnitId, adInfo);
|
|
}
|
|
|
|
private AdvertPopupType GetAdvertPopupType(MaxSdkBase.AdInfo adInfo)
|
|
{
|
|
if (adInfo != null && Enum.TryParse(adInfo.Placement, out AdvertPopupType type))
|
|
return type;
|
|
return currentType;
|
|
}
|
|
}
|
|
}
|