com.guru.unity.sdk.core/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.Ads.cs

416 lines
17 KiB
C#

namespace Guru.Debugger
{
using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using Consts=AdStatusConsts;
public partial class AdStatusPresenter
{
private Queue<AdStatusInfo> _bannerInfos;
private Queue<AdStatusInfo> _interInfos;
private Queue<AdStatusInfo> _rewardInfos;
private AdStatusInfo _curBadsInfo;
private AdStatusInfo _curIadsInfo;
private AdStatusInfo _curRadsInfo;
#region InfoContainer
/// <summary>
/// 添加对应的 Info
/// </summary>
/// <param name="info"></param>
private void AddBannerInfo(AdStatusInfo info)
{
if (_bannerInfos.Count >= AdStatusConsts.MaxInfoCount)
{
_bannerInfos.Dequeue();
}
Debug.Log(info.ToLogString());
_bannerInfos.Enqueue(info);
_curBadsInfo = info;
OnStatueChanged(info);
}
private void AddInterInfo(AdStatusInfo info)
{
if (_interInfos.Count >= AdStatusConsts.MaxInfoCount)
{
_interInfos.Dequeue();
}
_interInfos.Enqueue(info);
_curIadsInfo = info;
OnStatueChanged(info);
}
private void AddRewardInfo(AdStatusInfo info)
{
if (_rewardInfos.Count >= AdStatusConsts.MaxInfoCount)
{
_rewardInfos.Dequeue();
}
_rewardInfos.Enqueue(info);
_curRadsInfo = info;
OnStatueChanged(info);
}
private void OnStatueChanged(AdStatusInfo info)
{
_model.monitorInfo = CreateMonitorInfo();
if (info != null)
{
int code = 0;
if (info.status == AdStatusType.LoadFailed || info.status == AdStatusType.DisplayFailed)
{
code = -1;
}
else if (info.status == AdStatusType.Loaded)
{
code = 1;
}
switch (info.adType)
{
case AdType.Banner:
if(code == 1) _model.AddBannerCount(true);
else if(code == -1) _model.AddBannerCount(false);
break;
case AdType.Interstitial:
if(code == 1) _model.AddInterCount(true);
else if(code == -1) _model.AddInterCount(false);
break;
case AdType.Rewarded:
if(code == 1) _model.AddRewardCount(true);
else if(code == -1) _model.AddRewardCount(false);
break;
}
}
UpdateView(); // 刷新视图
}
private string CreateMonitorInfo()
{
string msg = "";
bool loaded = false;
StringBuilder sb = new StringBuilder();
if (GuruSDK.IsAdsReady)
{
msg = ColoredText("AdService not initialized...", Consts.ColorRed);
return msg;
}
if (_curBadsInfo == null)
{
msg = $"BADS: {ColoredText("not ready", Consts.ColorRed)}\n";
}
else
{
switch (_curBadsInfo.status)
{
case AdStatusType.Loaded:
msg = $"BADS: {ColoredText("loaded", Consts.ColorGreen)}\n\tnetwork: {_curBadsInfo.network}\n\twaterfall: {_curBadsInfo.waterfall}\n";
break;
case AdStatusType.LoadFailed:
msg = $"BADS: {ColoredText("loading failed", Consts.ColorRed)}\n\tmessage: {_curBadsInfo.info}\n";
break;
case AdStatusType.DisplayFailed:
msg = $"BADS: {ColoredText("display failed", Consts.ColorRed)}\n\tmessage: {_curBadsInfo.info}\n";
break;
case AdStatusType.Loading:
msg = $"BADS: {ColoredText("loading...", Consts.ColorYellow)}\n\tformat: {_curBadsInfo.format}\n";
break;
case AdStatusType.Paid:
msg = $"BADS: {ColoredText("display", Consts.ColorGreen)}\n\tnetwork: {_curIadsInfo.network}\n\trevenue: {_curBadsInfo.revenue}\n";
break;
case AdStatusType.NotReady:
msg = $"BADS: {ColoredText("not ready", Consts.ColorGray)}\n\t{ColoredText("---", Consts.ColorGray)}\n";
break;
default:
msg = $"BADS: {ColoredText("other", Consts.ColorGray)}\n\tstatus: {ColoredText($"{_curBadsInfo.status}", Consts.ColorYellow)}\n";
break;
}
}
sb.Append(msg);
if (_curIadsInfo == null)
{
msg = $"IADS: {ColoredText("not ready", Consts.ColorRed)}\n";
}
else
{
switch (_curIadsInfo.status)
{
case AdStatusType.Loaded:
msg = $"IADS: {ColoredText("loaded", Consts.ColorGreen)}\n\tnetwork: {_curIadsInfo.network}\n\twaterfall: {_curBadsInfo.waterfall}\n";
break;
case AdStatusType.LoadFailed:
msg = $"IADS: {ColoredText("loading failed", Consts.ColorRed)}\n\tmessage: {_curIadsInfo.info}\n";
break;
case AdStatusType.DisplayFailed:
msg = $"IADS: {ColoredText("display failed", Consts.ColorRed)}\n\tmessage: {_curIadsInfo.info}\n";
break;
case AdStatusType.Loading:
msg = $"IADS: {ColoredText("loading...", Consts.ColorYellow)}\n\tformat: {_curIadsInfo.format}\n";
break;
case AdStatusType.Paid:
msg = $"IADS: {ColoredText("get revenue", Consts.ColorGreen)}\n\trevenue: {_curIadsInfo.revenue}\n";
break;
case AdStatusType.NotReady:
msg = $"IADS: {ColoredText("not ready", Consts.ColorGray)}\n\t{ColoredText("---", Consts.ColorGray)}\n";
break;
default:
msg = $"IADS: {ColoredText("other", Consts.ColorGray)}\n\tstatus: {ColoredText($"{_curIadsInfo.status}", Consts.ColorYellow)}\n";
break;
}
}
sb.Append(msg);
if (_curRadsInfo == null)
{
msg = $"RADS: {ColoredText("not ready", Consts.ColorRed)}\n";
}
else
{
switch (_curRadsInfo.status)
{
case AdStatusType.Loaded:
msg = $"RADS: {ColoredText("loaded", Consts.ColorGreen)}\n\tnetwork: {_curRadsInfo.network}\n\twaterfall: {_curRadsInfo.waterfall}\n";
break;
case AdStatusType.LoadFailed:
msg = $"RADS: {ColoredText("loading failed", Consts.ColorRed)}\n\tmessage: {_curRadsInfo.info}\n";
break;
case AdStatusType.DisplayFailed:
msg = $"RADS: {ColoredText("display failed", Consts.ColorRed)}\n\tmessage: {_curRadsInfo.info}\n";
break;
case AdStatusType.Loading:
msg = $"RADS: {ColoredText("loading...", Consts.ColorYellow)}\n\tformat: {_curRadsInfo.format}\n";
break;
case AdStatusType.Paid:
msg = $"RADS: {ColoredText("get revenue", Consts.ColorGreen)}\n\trevenue: {_curRadsInfo.revenue}\n";
break;
case AdStatusType.NotReady:
msg = $"RADS: {ColoredText("not ready", Consts.ColorGray)}\n\t{ColoredText("---", Consts.ColorGray)}\n";
break;
default:
msg = $"RADS: {ColoredText("other", Consts.ColorGray)}\n\tstatus: {ColoredText($"{_curRadsInfo.status}", Consts.ColorYellow)}\n";
break;
}
}
sb.Append(msg);
return sb.ToString();
}
private string ColoredText(string content, string hexColor = "000000")
{
return $"<color=#{hexColor}>{content}</color>";
}
#endregion
#region AppLovin
private void InitAdsCallbacks()
{
AddCallbacks();
_bannerInfos = new Queue<AdStatusInfo>(AdStatusConsts.MaxInfoCount);
_interInfos = new Queue<AdStatusInfo>(AdStatusConsts.MaxInfoCount);
_rewardInfos = new Queue<AdStatusInfo>(AdStatusConsts.MaxInfoCount);
}
private void AddCallbacks()
{
//----------------- Banner -----------------
GuruSDK.Callbacks.Ads.OnBannerADStartLoad += OnBannerAdLoadEvent;
MaxSdkCallbacks.Banner.OnAdLoadedEvent += OnBannerAdLoadedEvent;
MaxSdkCallbacks.Banner.OnAdLoadFailedEvent += OnBannerAdLoadFailEvent;
MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnBannerAdRevenuePaidEvent;
MaxSdkCallbacks.Banner.OnAdClickedEvent += OnBannerAdClickedEvent;
//----------------- Interstitials -----------------
GuruSDK.Callbacks.Ads.OnInterstitialADStartLoad += OnInterAdLoadEvent;
MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnInterAdLoadedEvent;
MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnInterAdLoadFailEvent;
MaxSdkCallbacks.Interstitial.OnAdDisplayFailedEvent += OnInterAdDisplayFailEvent;
MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnInterAdRevenuePaidEvent;
MaxSdkCallbacks.Interstitial.OnAdClickedEvent += OnInterAdClickedEvent;
MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += OnInterAdHiddenEvent;
//----------------- Reward -----------------
Guru.GuruSDK.Callbacks.Ads.OnRewardedADStartLoad += OnRewardedStartLoad;
MaxSdkCallbacks.Rewarded.OnAdLoadedEvent += OnRewardAdLoadedEvent;
MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnRewardAdLoadFailEvent;
MaxSdkCallbacks.Rewarded.OnAdDisplayFailedEvent += OnRewardAdDisplayFailEvent;
MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnRewardAdRevenuePaidEvent;
MaxSdkCallbacks.Rewarded.OnAdClickedEvent += OnRewardAdClickedEvent;
MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += OnRewardAdHiddenEvent;
}
//-------------- Banner ------------------
private void OnBannerAdLoadEvent(string adUnitId)
{
AddBannerInfo(CreateLoadingInfo(adUnitId, AdType.Banner));
}
private void OnBannerAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
var waterfall = adInfo.WaterfallInfo?.Name ?? "";
AddBannerInfo(CreateLoadedInfo(adUnitId, AdType.Banner, adInfo.NetworkName, adInfo.AdFormat, waterfall));
}
private void OnBannerAdLoadFailEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
{
var waterfall = errorInfo.WaterfallInfo?.Name ?? "";
var format = "BADS";
var msg = $"[{errorInfo.MediatedNetworkErrorCode}] {errorInfo.MediatedNetworkErrorMessage}";
var network = "error";
AddBannerInfo(CreateFailInfo(adUnitId, AdType.Banner, network, format, waterfall, msg));
}
private void OnBannerAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
var waterfall = adInfo.WaterfallInfo?.Name ?? "";
AddBannerInfo(CreateClosedInfo(adUnitId, AdType.Banner, adInfo.NetworkName, adInfo.AdFormat, waterfall));
}
private void OnBannerAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
var waterfall = adInfo.WaterfallInfo?.Name ?? "";
AddBannerInfo(CreatePaidInfo(adUnitId, AdType.Banner, adInfo.Revenue, adInfo.NetworkName, adInfo.AdFormat, waterfall));
}
//----------------- Interstitial -----------------
private void OnInterAdLoadEvent(string adUnitId)
{
AddInterInfo(CreateLoadingInfo(adUnitId, AdType.Interstitial));
}
private void OnInterAdHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
var waterfall = adInfo.WaterfallInfo?.Name ?? "";
AddInterInfo(CreateClosedInfo(adUnitId, AdType.Interstitial, adInfo.NetworkName, adInfo.AdFormat, waterfall));
}
private void OnInterAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
var waterfall = adInfo.WaterfallInfo?.Name ?? "";
AddInterInfo(CreateClickedInfo(adUnitId, AdType.Interstitial, adInfo.NetworkName, adInfo.AdFormat, waterfall));
}
private void OnInterAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
var waterfall = adInfo.WaterfallInfo?.Name ?? "";
AddInterInfo(CreatePaidInfo(adUnitId, AdType.Interstitial, adInfo.Revenue, adInfo.NetworkName, adInfo.AdFormat, waterfall));
}
private void OnInterAdLoadFailEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
{
var waterfall = errorInfo.WaterfallInfo?.Name ?? "";
var format = "IADS";
var msg = $"[{errorInfo.MediatedNetworkErrorCode}] {errorInfo.MediatedNetworkErrorMessage}";
var network = "error";
AddInterInfo(CreateFailInfo(adUnitId, AdType.Interstitial, network, format, waterfall, msg));
}
private void OnInterAdDisplayFailEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
{
var waterfall = errorInfo.WaterfallInfo?.Name ?? "";
var format = adInfo.AdFormat;
var msg = $"[{errorInfo.MediatedNetworkErrorCode}] {errorInfo.MediatedNetworkErrorMessage}";
var network = adInfo.NetworkName;
AddInterInfo(CreateFailInfo(adUnitId, AdType.Interstitial, network, format, waterfall, msg, true));
}
private void OnInterAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
var waterfall = adInfo.WaterfallInfo?.Name ?? "";
AddInterInfo(CreateLoadedInfo(adUnitId, AdType.Interstitial, adInfo.NetworkName, adInfo.AdFormat, waterfall));
}
//----------------- Reward -----------------
private void OnRewardedStartLoad(string adUnitId)
{
AddRewardInfo(CreateLoadingInfo(adUnitId, AdType.Rewarded));
}
private void OnRewardAdHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
var waterfall = adInfo.WaterfallInfo?.Name ?? "";
AddRewardInfo(CreateClosedInfo(adUnitId, AdType.Rewarded, adInfo.NetworkName, adInfo.AdFormat, waterfall));
}
private void OnRewardAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
var waterfall = adInfo.WaterfallInfo?.Name ?? "";
AddRewardInfo(CreateClickedInfo(adUnitId, AdType.Rewarded, adInfo.NetworkName, adInfo.AdFormat, waterfall));
}
private void OnRewardAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
var waterfall = adInfo.WaterfallInfo?.Name ?? "";
AddRewardInfo(CreatePaidInfo(adUnitId, AdType.Rewarded, adInfo.Revenue, adInfo.NetworkName, adInfo.AdFormat, waterfall));
}
private void OnRewardAdLoadFailEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
{
var waterfall = errorInfo.WaterfallInfo?.Name ?? "";
var format = "IADS";
var msg = $"[{errorInfo.MediatedNetworkErrorCode}] {errorInfo.MediatedNetworkErrorMessage}";
var network = "error";
AddRewardInfo(CreateFailInfo(adUnitId, AdType.Rewarded, network, format, waterfall, msg));
}
private void OnRewardAdDisplayFailEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
{
var waterfall = errorInfo.WaterfallInfo?.Name ?? "";
var format = adInfo.AdFormat;
var msg = $"[{errorInfo.MediatedNetworkErrorCode}] {errorInfo.MediatedNetworkErrorMessage}";
var network = adInfo.NetworkName;
AddRewardInfo(CreateFailInfo(adUnitId, AdType.Rewarded, network, format, waterfall, msg, true));
}
private void OnRewardAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
var waterfall = adInfo.WaterfallInfo?.Name ?? "";
AddRewardInfo(CreateLoadedInfo(adUnitId, AdType.Rewarded, adInfo.NetworkName, adInfo.AdFormat, waterfall));
}
#endregion
}
}