From 96750cc3d8811af947d87ce7e3befda708590a0e Mon Sep 17 00:00:00 2001 From: huyufei Date: Wed, 31 Jul 2024 13:47:20 +0800 Subject: [PATCH] =?UTF-8?q?update:=20=E3=80=90=E4=B8=AD=E5=8F=B0=E3=80=91?= =?UTF-8?q?=E3=80=90=E5=B9=BF=E5=91=8A=E3=80=91=E6=96=B0=E5=A2=9E=E5=B9=BF?= =?UTF-8?q?=E5=91=8A=E6=89=93=E7=82=B9=E5=8F=82=E6=95=B0=EF=BC=8C=E6=9C=AA?= =?UTF-8?q?=E5=8A=A0=E5=85=A5=20review=5Fcreative=5Fid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --story=1020787 --user=yufei.hu 【中台】【广告】新增广告打点参数,未加入 review_creative_id https://www.tapd.cn/33527076/s/1160827 Signed-off-by: huyufei --- Runtime/GuruCore/Runtime/Ads/ADService.cs | 2 +- Runtime/GuruCore/Runtime/Ads/ADServiceBase.cs | 430 ++++++++---------- .../Runtime/Ads/Channels/Max/AdChanelMax.cs | 6 +- .../Runtime/Ads/Data/AdImpressionData.cs | 185 -------- .../Runtime/Ads/Data/AdImpressionData.cs.meta | 3 - .../Runtime/Ads/Data/AdImpressionDriver.cs | 251 ---------- .../Ads/Data/AdImpressionDriver.cs.meta | 3 - Runtime/GuruCore/Runtime/Ads/Data/AdParams.cs | 254 +++++++++++ .../Runtime/Ads/Data/AdParams.cs.meta | 3 + .../Runtime/Analytics/Analytics.Ads.cs | 247 ++-------- .../Analytics/Analytics.TemplateDefine.cs | 41 +- .../AdsStatus/MVP/AdStatusPresenter.Ads.cs | 71 ++- 12 files changed, 560 insertions(+), 936 deletions(-) delete mode 100644 Runtime/GuruCore/Runtime/Ads/Data/AdImpressionData.cs delete mode 100644 Runtime/GuruCore/Runtime/Ads/Data/AdImpressionData.cs.meta delete mode 100644 Runtime/GuruCore/Runtime/Ads/Data/AdImpressionDriver.cs delete mode 100644 Runtime/GuruCore/Runtime/Ads/Data/AdImpressionDriver.cs.meta create mode 100644 Runtime/GuruCore/Runtime/Ads/Data/AdParams.cs create mode 100644 Runtime/GuruCore/Runtime/Ads/Data/AdParams.cs.meta diff --git a/Runtime/GuruCore/Runtime/Ads/ADService.cs b/Runtime/GuruCore/Runtime/Ads/ADService.cs index ed3fa09..e2fad8c 100644 --- a/Runtime/GuruCore/Runtime/Ads/ADService.cs +++ b/Runtime/GuruCore/Runtime/Ads/ADService.cs @@ -116,7 +116,7 @@ namespace Guru private void OnLoadMaxBanner() { - _badsloadStartTime = DateTime.UtcNow; + _badsLoadStartTime = DateTime.UtcNow; _chanelMax.LoadBannerAD(); OnBannerStartLoad?.Invoke(_chanelMax.MaxBADSSlotID); } diff --git a/Runtime/GuruCore/Runtime/Ads/ADServiceBase.cs b/Runtime/GuruCore/Runtime/Ads/ADServiceBase.cs index 536d0be..9a2c344 100644 --- a/Runtime/GuruCore/Runtime/Ads/ADServiceBase.cs +++ b/Runtime/GuruCore/Runtime/Ads/ADServiceBase.cs @@ -1,12 +1,11 @@ -using System.Linq; namespace Guru { using System; using UnityEngine; using System.Collections.Generic; - using Guru.Ads; + //TODO: 将 BADS,IADS,RADS 分别放到不同的类中,方便维护 public abstract class ADServiceBase : IADService where T : new() { // 单利定义 @@ -21,9 +20,9 @@ namespace Guru } } - protected static readonly string Tag = "[SDK][ADS]"; + private const string Tag = "[SDK][ADS]"; public bool IsInitialized => MaxSdk.IsInitialized() || _isServiceStarted; - protected bool IsNetworkEnabled => Application.internetReachability != NetworkReachability.NotReachable; + private static bool IsNetworkEnabled => Application.internetReachability != NetworkReachability.NotReachable; private const int MAX_ADS_RELOAD_INTERVAL = 6; // 广告加载最高时间为 2 的 6 次方 = 64秒 @@ -31,28 +30,23 @@ namespace Guru protected Action _onSdkInitReady; - public static Action OnBannerStartLoad; - public static Action OnBannerLoaded; + public Action OnBannerStartLoad; + public Action OnBannerLoaded; - public static Action OnInterstitialStartLoad; - public static Action OnInterstitialLoaded; - public static Action OnInterstitialFailed; - public static Action OnInterstitialClosed; + public Action OnInterstitialStartLoad; + public Action OnInterstitialLoaded; + public Action OnInterstitialFailed; + public Action OnInterstitialClosed; - public static Action OnRewardedStartLoad; - public static Action OnRewardLoaded; - public static Action OnRewardFailed; - public static Action OnRewardClosed; + public Action OnRewardedStartLoad; + public Action OnRewardLoaded; + public Action OnRewardFailed; + public Action OnRewardClosed; - private Dictionary _reviewCreativeIds = new Dictionary(10); // Creative ID 缓存: Cid : RCid - private Dictionary> _impressionCache = new Dictionary>(10); - - protected AdsModel _model; + private AdsModel _model; protected AdsInitSpec _initSpec = null; - private AdImpressionDriver _impressionDriver; - - public AdsModel Model + private AdsModel Model { get { @@ -67,8 +61,7 @@ namespace Guru /// 启动广告服务 /// /// 广告初始化回调 - /// 自动启动广告加载 - /// debug模式 + /// 初始化配置参数 public virtual void StartService(Action callback = null, AdsInitSpec initSpec = null) { if (IsInitialized) return; // 已经初始化后, 无需再次初始化 @@ -82,9 +75,6 @@ namespace Guru if(_model == null) _model = AdsModel.Create(); this.Log("AD SDK Start Init"); - _impressionDriver = new AdImpressionDriver(); - _impressionDriver.Init(ReportAdsRevenue); // 初始化 Impression 驱动器 - InitMaxCallbacks(); // 初始化 MAX 广告 InitService(); // 内部继承接口 } @@ -99,13 +89,14 @@ namespace Guru //--------------- MRec 回调 ----------------- // MaxSdkCallbacks.MRec.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent; - + //--------------- Banner 回调 ----------------- MaxSdkCallbacks.Banner.OnAdLoadedEvent += OnBannerLoadedEvent; MaxSdkCallbacks.Banner.OnAdLoadFailedEvent += OnBannerFailedEvent; MaxSdkCallbacks.Banner.OnAdClickedEvent += OnBannerClickedEvent; + // MaxSdkCallbacks.Banner.OnAdReviewCreativeIdGeneratedEvent += OnAdReviewCreativeIdGeneratedEvent; MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnBannerRevenuePaidEvent; - MaxSdkCallbacks.Banner.OnAdReviewCreativeIdGeneratedEvent += OnAdReviewCreativeIdGeneratedEvent; + //--------------- IV 回调 ----------------- MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnInterstitialLoadedEvent; MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnInterstitialFailedEvent; @@ -114,7 +105,7 @@ namespace Guru MaxSdkCallbacks.Interstitial.OnAdDisplayedEvent += OnInterstitialDisplayEvent; MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += OnInterstitialDismissedEvent; MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnInterstitialPaidEvent; - MaxSdkCallbacks.Interstitial.OnAdReviewCreativeIdGeneratedEvent += OnAdReviewCreativeIdGeneratedEvent; + // MaxSdkCallbacks.Interstitial.OnAdReviewCreativeIdGeneratedEvent += OnAdReviewCreativeIdGeneratedEvent; //--------------- RV 回调 ----------------- MaxSdkCallbacks.Rewarded.OnAdLoadedEvent += OnRewardedAdLoadedEvent; MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnRewardedAdFailedEvent; @@ -122,20 +113,15 @@ namespace Guru MaxSdkCallbacks.Rewarded.OnAdDisplayedEvent += OnRewardedAdDisplayedEvent; MaxSdkCallbacks.Rewarded.OnAdClickedEvent += OnRewardedAdClickedEvent; MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += OnRewardedAdDismissedEvent; - MaxSdkCallbacks.Rewarded.OnAdReceivedRewardEvent += OnRewardedAdReceivedRewardEvent; MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnRewardedAdPaidEvent; - MaxSdkCallbacks.Rewarded.OnAdReviewCreativeIdGeneratedEvent += OnAdReviewCreativeIdGeneratedEvent; - - //--------------- Creative 回调 ----------------- - + MaxSdkCallbacks.Rewarded.OnAdReceivedRewardEvent += OnRewardedAdReceivedRewardEvent; + // MaxSdkCallbacks.Rewarded.OnAdReviewCreativeIdGeneratedEvent += OnAdReviewCreativeIdGeneratedEvent; //-------------- SDK 初始化 ------------------- MaxSdk.SetExtraParameter("enable_black_screen_fixes", "true"); // 修复黑屏 } - - protected virtual void InitService() { } @@ -163,7 +149,7 @@ namespace Guru /// 可加载广告 /// /// - public virtual bool CanLoadAds() + private bool CanLoadAds() { return IsInitialized && IsNetworkEnabled; } @@ -214,26 +200,21 @@ namespace Guru /// /// 上报广告收益 /// - /// - /// - private void ReportAdsRevenue(AdImpressionData data) + /// + private void ReportAdsRevenue(AdParams data) { // #1 ad_impression - Analytics.ADImpression(data); + Analytics.ADImpression(data.ToAdImpressionData()); - // #2 tch_001 和 tch_02 + // #2 tch_001 double revenue = data.value; CalcTch001Value(revenue); CalcTch02Value(revenue); // #3 adjust_ad_revenue - AdjustService.TrackADRevenue(data.value, data.currency, data.ad_source, data.ad_unit_name, data.ad_placement); + AdjustService.TrackADRevenue(data.value, data.currency, data.adSource, data.adUnitId, data.networkPlacement); } - - - - /// /// 计算太极001收益 /// @@ -242,10 +223,10 @@ namespace Guru { TchAD001RevValue += revenue; double revenueValue = TchAD001RevValue; - Debug.Log($"[TaichConfig] get totally: {revenueValue}"); + // Debug.Log($"{Tag} --- [Tch] get totally: {revenueValue}"); if (revenueValue >= Analytics.Tch001TargetValue) { - Debug.Log($"[TaichConfig] call with value: {revenueValue}"); + Debug.Log($"{Tag} --- [Tch] call with value: {revenueValue}"); Analytics.Tch001ADRev(revenueValue); TchAD001RevValue = 0.0; } @@ -274,15 +255,15 @@ namespace Guru #region Banner Ads - private string _backColorStr = "#50A436"; private Color _backColor = new Color(0, 0, 0, 0); private string _badsCategory; - protected DateTime _badsloadStartTime; + protected DateTime _badsLoadStartTime; private bool _bannerVisible = false; public bool IsBannerVisible => _bannerVisible; - private int _badsloadedNum = 0; + private int _badsLoadedNum = 0; private int _badsLoadFailNum = 0; + /// /// 获取动作间隔之间的毫秒数 /// @@ -309,32 +290,32 @@ namespace Guru /// /// Banner MAX 加载方式 /// - protected void LoadMaxBannerAd() + private void LoadMaxBannerAd() { OnLoadBads(); // Banners are automatically sized to 320x50 on phones and 728x90 on tablets // You may use the utility method `MaxSdkUtils.isTablet()` to help with view sizing adjustments - var id = GetBannerID(); - MaxSdk.CreateBanner(id, MaxSdkBase.BannerPosition.BottomCenter); - MaxSdk.SetBannerExtraParameter(id, "adaptive_banner", "false"); + var adUnitId = GetBannerID(); + MaxSdk.CreateBanner(adUnitId, MaxSdkBase.BannerPosition.BottomCenter); + MaxSdk.SetBannerExtraParameter(adUnitId, "adaptive_banner", "false"); // Set background or background color for banners to be fully functional - MaxSdk.SetBannerBackgroundColor(id, _backColor); + MaxSdk.SetBannerBackgroundColor(adUnitId, _backColor); // Analytics.ADBadsLoad(GetBannerID()); - Analytics.ADBadsLoad(AdParams.Build(id)); + Analytics.TrackAdBadsLoad(AdParams.Build(adUnitId:adUnitId).ToAdLoadedData()); } - public void OnLoadBads() + private void OnLoadBads() { - _badsloadStartTime = DateTime.UtcNow; + _badsLoadStartTime = DateTime.UtcNow; } - protected virtual void OnBadsLoaded() + private void OnBadsLoaded() { - _badsloadStartTime = DateTime.UtcNow; + _badsLoadStartTime = DateTime.UtcNow; OnBannerLoaded?.Invoke(); } - public virtual void SetBannerAutoRefresh(bool value = true, string adUnitId = "") + public void SetBannerAutoRefresh(bool value = true, string adUnitId = "") { if(string.IsNullOrEmpty(adUnitId)) adUnitId = GetBannerID(); if (value) @@ -360,9 +341,10 @@ namespace Guru SetBannerAutoRefresh(true, adUnitId); if (!_bannerVisible) { + // 从隐藏状态到显示,累计的加载次数和失败次数清零 _bannerVisible = true; OnBannerImpEvent(adUnitId); - _badsloadedNum = 0; + _badsLoadedNum = 0; _badsLoadFailNum = 0; } } @@ -370,7 +352,7 @@ namespace Guru /// /// 隐藏 Banner /// - public virtual void HideBanner() + public void HideBanner() { string adUnitId = GetBannerID(); MaxSdk.HideBanner(adUnitId); @@ -386,47 +368,44 @@ namespace Guru /// 设置 Banner 背景颜色 /// /// - public virtual void SetBannerBackgroundColor(Color color) + public void SetBannerBackgroundColor(Color color) { _backColor = color; } private void OnBannerLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { - _badsloadedNum++; - // --- fixed by Yufei 2024-5-29 为 don't report bads_loaded any more. --- - // Analytics.ADBadsLoaded(AdParams.Build(adUnitId, adInfo, - // duration: GetAdsLoadDuration(ref _badsloadStartTime), category: _badsCategory)); + _badsLoadedNum++; // 记录加载次数 Debug.Log( $"[SDK][Ads][Loaded] --- adUnitId:{adUnitId} Revenue:{adInfo.Revenue} Type:{adInfo.AdFormat} CreativeId:{adInfo.CreativeIdentifier}"); OnBadsLoaded(); + // BADSLoaded 事件已经不做上报处理了 + // --- fixed by YuFei 2024-5-29 为 don't report bads_loaded any more. --- + // Analytics.ADBadsLoaded(AdParams.Build(adUnitId, adInfo, + // duration: GetAdsLoadDuration(ref _badsLoadStartTime), category: _badsCategory)); } private void OnBannerFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo) { - _badsLoadFailNum ++; - // Analytics.ADBadsFailed(adUnitId, (int)errorInfo.Code, GetAdsLoadDuration(ref _badsloadStartTime), _badsCategory); - Analytics.ADBadsFailed(AdParams.Build(adUnitId, - duration: GetActionDuration(_badsloadStartTime), category: _badsCategory, - errorCode: (int)errorInfo.Code, - waterfallName: errorInfo?.WaterfallInfo?.Name ?? "")); + _badsLoadFailNum++; // 记录加载失败次数 + Analytics.TrackAdBadsFailed(BuildBadsFailedData(adUnitId, errorInfo)); } private void OnBannerClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { // Analytics.ADBadsClick(adUnitId, _badsCategory); - Analytics.ADBadsClick(AdParams.Build(adUnitId, adInfo, _badsCategory)); + Analytics.TrackAdBadsClick(BuildBadsClickData(adInfo, adUnitId)); } private void OnBannerImpEvent(string adUnitId) { // Analytics.ADBadsClick(adUnitId, _badsCategory); - Analytics.ADBadsImp(AdParams.Build(adUnitId, category: _badsCategory)); + Analytics.TrackAdBadsImp(BuildBadsImpData(adUnitId)); } private void OnBannerHideEvent() { - Analytics.ADBadsHide(_badsloadedNum, _badsLoadFailNum); + Analytics.TrackAdBadsHide(_badsLoadedNum, _badsLoadFailNum); } /// @@ -438,8 +417,7 @@ namespace Guru { if (_bannerVisible) { - // Banner 只有显示时才上报收益值 - AppendImpressionData(adInfo, eventName:Analytics.EventBadsPaid, itemCategory:_badsCategory); + ReportAdsRevenue(AdParams.Build(adInfo, adUnitId)); } } @@ -450,7 +428,7 @@ namespace Guru private string _iadsCategory = "main"; private int _interstitialRetryAttempt; private Action _interCloseAction; - protected bool _isIadsLoading = false; + private bool _isIadsLoading = false; protected DateTime _iadsLoadStartTime; private DateTime _iadsDisplayStartTime; @@ -468,15 +446,15 @@ namespace Guru } - protected void LoadMaxInterstitial() + private void LoadMaxInterstitial() { OnLoadIads(); - var id = GetInterstitialID(); - Analytics.ADIadsLoad(AdParams.Build(id)); - MaxSdk.LoadInterstitial(id); + var adUnitId = GetInterstitialID(); + Analytics.TrackAdIadsLoad(AdParams.Build(adUnitId:adUnitId).ToAdLoadedData()); + MaxSdk.LoadInterstitial(adUnitId); } - public void OnLoadIads() + private void OnLoadIads() { _iadsLoadStartTime = DateTime.UtcNow; } @@ -491,8 +469,7 @@ namespace Guru /// /// 显示插屏广告 /// - /// 广告奖励回调 - /// 广告失败回调 + /// 广告奖励回调 /// 广告界面关闭回调 public virtual void ShowInterstitialAD(string category, Action dismissAction = null) { @@ -513,7 +490,6 @@ namespace Guru MaxSdk.ShowInterstitial(GetInterstitialID()); _iadsDisplayStartTime = DateTime.UtcNow; - // RequestInterstitialAD(); // 直接加载下一个广告 } protected virtual void OnInterstitialLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) @@ -522,12 +498,9 @@ namespace Guru // Interstitial ad is ready to be shown. MaxSdk.IsInterstitialReady(interstitialAdUnitId) will now return 'true' // Reset retry attempt // Analytics.ADIadsLoaded(adUnitId, GetAdsLoadDuration(ref _iadsLoadStartTime), _iadsCategory); - Analytics.ADIadsLoaded(AdParams.Build(adUnitId, - duration: GetActionDuration(_iadsLoadStartTime), category: _iadsCategory)); + Analytics.TrackAdIadsLoaded(BuildIadsLoadedData(adInfo, adUnitId)); _interstitialRetryAttempt = 0; - Debug.Log( $"[SDK][Ads][Loaded] --- adUnitId:{adUnitId} Revenue:{adInfo.Revenue} Type:{adInfo.AdFormat} CreativeId:{adInfo.CreativeIdentifier}"); - OnInterstitialLoaded?.Invoke(); } @@ -542,11 +515,7 @@ namespace Guru float retryDelay = GetRetryDelaySeconds(_interstitialRetryAttempt); DelayCall(retryDelay, RequestInterstitialAD); // Analytics.ADIadsFailed(adUnitId, (int)errorInfo.Code, GetAdsLoadDuration(ref _iadsLoadStartTime), _iadsCategory); - if(string.IsNullOrEmpty(_iadsCategory)) _iadsCategory = "not_set"; - Analytics.ADIadsFailed(AdParams.Build(adUnitId, - duration: GetActionDuration(_iadsLoadStartTime), category: _iadsCategory, - errorCode: (int)errorInfo.Code, - waterfallName: errorInfo?.WaterfallInfo?.Name ?? "")); + Analytics.TrackAdIadsFailed(BuildIadsFailedData(adUnitId, errorInfo)); OnInterstitialFailed?.Invoke(); } @@ -558,10 +527,7 @@ namespace Guru this.LogError( $"InterstitialFailedToDisplayEvent AdLoadFailureInfo:{errorInfo.AdLoadFailureInfo}, Message: {errorInfo.Message}"); // Analytics.ADIadsFailed(adUnitId, (int)errorInfo.Code, GetAdsLoadDuration(ref _iadsLoadStartTime), _iadsCategory); - Analytics.ADIadsFailed(AdParams.Build(adUnitId, - duration: GetActionDuration(_iadsDisplayStartTime), category: _iadsCategory, - errorCode: (int)errorInfo.Code, - waterfallName: errorInfo.WaterfallInfo?.Name ?? "")); + Analytics.TrackAdIadsFailed(BuildIadsFailedData(adUnitId, errorInfo)); DelayCall(2.0f, RequestInterstitialAD); } @@ -569,16 +535,13 @@ namespace Guru protected virtual void OnInterstitialDisplayEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { // Analytics.ADIadsImp(adUnitId, _iadsCategory); - AppendImpressionData(adInfo, eventName:Analytics.EventIadsImp, itemCategory:_iadsCategory); + Analytics.TrackAdIadsImp(BuildIadsImpData(adInfo, adUnitId)); } protected virtual void OnInterstitialClickEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { // Analytics.ADIadsClick(adUnitId, _iadsCategory); - if(string.IsNullOrEmpty(_iadsCategory)) _iadsCategory = "not_set"; - AppendImpressionData(adInfo, - eventName:Analytics.EventIadsClick, - itemCategory:_iadsCategory); + Analytics.TrackAdIadsClick(BuildIadsClickData(adInfo, adUnitId)); } // Close @@ -588,13 +551,7 @@ namespace Guru _interCloseAction?.Invoke(); OnInterstitialClosed?.Invoke(); // Analytics.ADIadsClose(adUnitId, _iadsCategory); - Analytics.ADIadsClose(new Dictionary() - { - [Analytics.ParameterItemCategory] = _iadsCategory, - [Analytics.ParameterDuration] = GetActionDuration(_iadsDisplayStartTime), - }); - - _impressionDriver.CleanCreativeId(adInfo.CreativeIdentifier); + Analytics.TrackAdIadsClose(BuildIadsCloseData(adInfo, adUnitId)); //延时加载下一个广告 DelayCall(2.0f, RequestInterstitialAD); @@ -602,7 +559,9 @@ namespace Guru private void OnInterstitialPaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { - AppendImpressionData(adInfo, eventName:Analytics.EventIadsPaid, itemCategory: _iadsCategory); + var p = AdParams.Build(adInfo, adUnitId, category:_iadsCategory); + Analytics.TrackAdIadsPaid(p.ToAdPaidData()); + ReportAdsRevenue(p); } @@ -610,14 +569,14 @@ namespace Guru #region Rewarded Ads - private string _rewardCategory = "main"; + private string _radsCategory = "main"; private int _rewardRetryAttempt; protected DateTime _radsLoadStartTime; - protected DateTime _radsShowStartTime; + private DateTime _radsDisplayStartTime; private Action _rvRewardAction; private Action _rvFailAction; private Action _rvDismissAction; - protected bool _isRadsLoading = false; + private bool _isRadsLoading = false; public bool IsRadsLoading => _isRadsLoading; public virtual void RequestRewardedAD() @@ -634,17 +593,17 @@ namespace Guru /// /// 默认加载 MAX 广告逻辑 /// - protected void LoadMaxRewardAd(string unitId = "") + private void LoadMaxRewardAd() { if (IsRadsLoading) return; OnLoadRads(); - var id = GetRewardedID(); - Analytics.ADRadsLoad(AdParams.Build(id)); // 上报打点 - MaxSdk.LoadRewardedAd(id); + var adUnitId = GetRewardedID(); + Analytics.TrackAdRadsLoad(AdParams.Build(adUnitId:adUnitId).ToAdLoadData()); // 上报打点 + MaxSdk.LoadRewardedAd(adUnitId); } - public void OnLoadRads() + private void OnLoadRads() { _radsLoadStartTime = DateTime.UtcNow; } @@ -661,7 +620,8 @@ namespace Guru /// /// 显示激励视频广告 /// - /// 广告奖励回调 + /// 广告奖励回调 + /// 广告失败回调 /// 广告失败回调 /// 广告界面关闭回调 public virtual void ShowRewardedAD(string category, Action rewardAction = null, @@ -679,13 +639,13 @@ namespace Guru return; } - _rewardCategory = category; + _radsCategory = category; _rvRewardAction = rewardAction; _rvFailAction = failAction; _rvDismissAction = dismissAction; MaxSdk.ShowRewardedAd(GetRewardedID()); - _radsShowStartTime = DateTime.UtcNow; + _radsDisplayStartTime = DateTime.UtcNow; // RequestRewardedAD(); } @@ -698,8 +658,7 @@ namespace Guru // Reset retry attempt // this.Log("OnRewardedAdLoadedEvent"); // Analytics.ADRadsLoaded(adUnitId, GetAdsLoadDuration(ref _radsLoadStartTime), _rewardCategory); - Analytics.ADRadsLoaded(AdParams.Build(adUnitId, - duration: GetActionDuration(_radsLoadStartTime), category: _iadsCategory)); + Analytics.TrackAdRadsLoaded(BuildRadsLoadedData(adInfo, adUnitId)); _rewardRetryAttempt = 0; Debug.Log( $"[SDK][Ads][Loaded] --- adUnitId:{adUnitId} Revenue:{adInfo.Revenue} Type:{adInfo.AdFormat} CreativeId:{adInfo.CreativeIdentifier}"); @@ -716,10 +675,7 @@ namespace Guru this.LogError( $"OnRewardedAdFailedEvent AdLoadFailureInfo:{errorInfo.AdLoadFailureInfo}, Message: {errorInfo.Message}"); // Analytics.ADRadsFailed(adUnitId, (int)errorInfo.Code, GetAdsLoadDuration(ref _radsLoadStartTime), _rewardCategory); - Analytics.ADRadsFailed(AdParams.Build(adUnitId, - duration: GetActionDuration(_radsLoadStartTime), category: _rewardCategory, - errorCode: (int)errorInfo.Code, - waterfallName: errorInfo?.WaterfallInfo?.Name ?? "")); + Analytics.TrackAdRadsFailed(BuildRadsFailedData(adUnitId, errorInfo)); _rewardRetryAttempt++; float retryDelay = GetRetryDelaySeconds(_rewardRetryAttempt); DelayCall(retryDelay, RequestRewardedAD); @@ -734,10 +690,7 @@ namespace Guru this.LogError( $"OnRewardedAdFailedToDisplayEvent AdLoadFailureInfo:{errorInfo.AdLoadFailureInfo}, Message: {errorInfo.Message}"); // Analytics.ADRadsFailed(adUnitId, (int)errorInfo.Code, GetAdsLoadDuration(ref _radsLoadStartTime), _rewardCategory); - Analytics.ADRadsFailed(AdParams.Build(adUnitId, - duration: GetActionDuration(_radsShowStartTime), category: _rewardCategory, - errorCode: (int)errorInfo.Code, - waterfallName: errorInfo?.WaterfallInfo?.Name ?? "")); + Analytics.TrackAdRadsFailed(BuildRadsFailedData(adUnitId, errorInfo)); _rvFailAction?.Invoke("OnRewardedAdFailedToDisplayEvent"); DelayCall(2.0f, RequestRewardedAD); @@ -748,16 +701,17 @@ namespace Guru { this.Log("OnRewardedAdDisplayedEvent"); // Analytics.ADRadsImp(adUnitId, _rewardCategory); - AppendImpressionData(adInfo, eventName:Analytics.EventRadsImp, itemCategory: _rewardCategory); + Analytics.TrackAdRadsImp(BuildRadsImpData(adInfo, adUnitId)); } protected virtual void OnRewardedAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { this.Log("OnRewardedAdClickedEvent"); // Analytics.ADRadsClick(adUnitId, _rewardCategory); - AppendImpressionData(adInfo, eventName:Analytics.EventRadsClick, itemCategory: _rewardCategory); + Analytics.TrackAdRadsClick(BuildRadsClickData(adInfo, adUnitId)); } + // rads_close protected virtual void OnRewardedAdDismissedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { @@ -767,13 +721,7 @@ namespace Guru OnRewardClosed?.Invoke(); // Analytics.ADRadsClose(adUnitId, _rewardCategory); - Analytics.ADRadsClose(new Dictionary() - { - [Analytics.ParameterItemCategory] = _rewardCategory, - [Analytics.ParameterDuration] = GetActionDuration(_radsShowStartTime), - }); - - _impressionDriver.CleanCreativeId(adInfo.CreativeIdentifier); + Analytics.TrackAdRadsClose(BuildRadsCloseData(adInfo, adUnitId)); //延时加载下一个广告 DelayCall(2.0f, RequestRewardedAD); @@ -784,19 +732,18 @@ namespace Guru MaxSdkBase.AdInfo adInfo) { this.Log("OnRewardedAdReceivedRewardEvent"); - // Analytics.ADRadsRewarded(adUnitId, _rewardCategory); - AppendImpressionData(adInfo, eventName:Analytics.EventRadsRewarded, itemCategory: _rewardCategory); + Analytics.TrackAdRadsRewarded(BuildRadsRewardedData(adInfo, adUnitId)); + // Rewarded ad was displayed and user should receive the reward _rvRewardAction?.Invoke(); } // rads_paid private void OnRewardedAdPaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { - this.Log("OnRewardedAdReceivedRewardEvent"); - AppendImpressionData(adInfo, eventName:Analytics.EventRadsPaid, itemCategory: _rewardCategory); + var p = AdParams.Build(adInfo, adUnitId, category:_iadsCategory); + Analytics.TrackAdRadsPaid(p.ToAdPaidData()); + ReportAdsRevenue(p); } - - #endregion #region Ad Settings @@ -822,8 +769,8 @@ namespace Guru public void ShowMaxDebugPanel() { - if (!IsInitialized) return; #if !UNITY_EDITOR + if (!IsInitialized) return; MaxSdk.ShowMediationDebugger(); #endif } @@ -839,86 +786,107 @@ namespace Guru #endregion - #region ImpressionData - - const int MAX_BADS_CID_NUMBER = 6; - private List _badsCreativeIds = new List(MAX_BADS_CID_NUMBER); - - /// - /// 构建 Impression 数据 - /// - /// - /// - /// - /// - /// - /// - /// - private AdImpressionData CreateImpressionData(MaxSdkBase.AdInfo adInfo, - string reviewCreativeId = "", string platform = "", - string eventName = "", string itemCategory = "", int duration = 0) - { - var impression = AdImpressionDriver.Build(adInfo.Revenue, Analytics.USD, platform, - adInfo.NetworkName, - adInfo.AdFormat, - adInfo.AdUnitIdentifier, - adInfo.NetworkPlacement, - adInfo.CreativeIdentifier, reviewCreativeId, - eventName, itemCategory, duration); - - return impression; - } - - /// - /// 添加一条ImpressionData 数据 - /// - /// - /// - /// - /// - /// - /// - /// - private void AppendImpressionData(MaxSdkBase.AdInfo adInfo, string reviewCreativeId = "", string platform = "", string eventName = "", string itemCategory = "", int duration = 0) - { - var data = CreateImpressionData(adInfo, reviewCreativeId, platform, eventName, itemCategory, duration); - _impressionDriver.Append(data); - } - - /// - /// 获取 AdReviewCreativeId 后的回调 - /// - /// - /// - /// - private void OnAdReviewCreativeIdGeneratedEvent(string adUnitId, string reviewCreativeId, MaxSdkBase.AdInfo adInfo) - { - Debug.Log($"{Tag} --- ReviewCreativeId:{reviewCreativeId} adUnitId: {adUnitId} Type:{adInfo?.AdFormat ?? "NULL"} CreativeId: {adInfo?.CreativeIdentifier ?? "NULL"} Revenue:{adInfo.Revenue}"); - if (string.IsNullOrEmpty(adInfo.CreativeIdentifier)) - { - Debug.LogError($"{Tag} --- Get ReviewCreativeId:{reviewCreativeId} but CreativeIdentifier is null"); - return; - } + #region Build AdParams - _impressionDriver.SetReviewCreativeId(adInfo.CreativeIdentifier, reviewCreativeId); // 缓存 ReviewCreateId - - if (adUnitId == GetBannerID() || adInfo.AdFormat.ToUpper().Contains("BANNER")) - { - // 清理 BADS CID 缓存 - _badsCreativeIds.Add(adInfo.CreativeIdentifier); - if (_badsCreativeIds.Count > MAX_BADS_CID_NUMBER) - { - var cid = _badsCreativeIds[0]; - _badsCreativeIds.Remove(cid); - _impressionDriver.CleanCreativeId(cid); - } - } + //---------- BADS Params -------------- + private Dictionary BuildBadsImpData(string adUnitId) + { + var p = AdParams.Build(adUnitId:adUnitId, category:_badsCategory); + return p.ToBadsImpData(); } + + private Dictionary BuildBadsFailedData(string adUnitId, MaxSdkBase.ErrorInfo errorInfo) + { + int duration = GetActionDuration(_badsLoadStartTime); + int errorCode = (int)errorInfo.Code; + var p = AdParams.Build(adUnitId:adUnitId, errorCode:errorCode, duration:duration); + return p.ToAdFailedData(); + } + + private Dictionary BuildBadsClickData(MaxSdk.AdInfo adInfo, string adUnitId) + { + var p = AdParams.Build(adInfo, adUnitId, _badsCategory); + return p.ToAdClickData(); + } + + + //---------- IADS Params -------------- + private Dictionary BuildIadsLoadedData(MaxSdk.AdInfo adInfo, string adUnitId) + { + int duration = GetActionDuration(_iadsLoadStartTime); + var p = AdParams.Build(adInfo, adUnitId, duration:duration); + return p.ToAdLoadedData(); + } + + private Dictionary BuildIadsFailedData(string adUnitId, MaxSdkBase.ErrorInfo errorInfo) + { + int duration = GetActionDuration(_iadsLoadStartTime); + int errorCode = (int)errorInfo.Code; + var p = AdParams.Build(adUnitId:adUnitId, errorCode:errorCode, duration:duration); + return p.ToAdFailedData(); + } + + private Dictionary BuildIadsImpData(MaxSdk.AdInfo adInfo, string adUnitId) + { + var p = AdParams.Build(adInfo, adUnitId:adUnitId, category:_iadsCategory); + return p.ToAdImpData(); + } + + private Dictionary BuildIadsClickData(MaxSdk.AdInfo adInfo, string adUnitId) + { + var p = AdParams.Build(adInfo, adUnitId, category:_iadsCategory); + return p.ToAdClickData(); + } + + private Dictionary BuildIadsCloseData(MaxSdk.AdInfo adInfo, string adUnitId) + { + int duration = GetActionDuration(_iadsDisplayStartTime); + var p = AdParams.Build(adInfo, adUnitId, category:_iadsCategory, duration:duration); + return p.ToAdCloseData(); + } + + //---------- RADS Params -------------- + private Dictionary BuildRadsLoadedData(MaxSdk.AdInfo adInfo, string adUnitId) + { + int duration = GetActionDuration(_radsLoadStartTime); + var p = AdParams.Build(adInfo, adUnitId, duration:duration); + return p.ToAdLoadedData(); + } + + private Dictionary BuildRadsFailedData(string adUnitId, MaxSdkBase.ErrorInfo errorInfo) + { + int duration = GetActionDuration(_radsLoadStartTime); + int errorCode = (int)errorInfo.Code; + var p = AdParams.Build(adUnitId:adUnitId, errorCode:errorCode, duration:duration); + return p.ToAdFailedData(); + } + + private Dictionary BuildRadsImpData(MaxSdk.AdInfo adInfo, string adUnitId) + { + var p = AdParams.Build(adInfo, adUnitId:adUnitId, category:_radsCategory); + return p.ToAdLoadedData(); + } + + private Dictionary BuildRadsClickData(MaxSdk.AdInfo adInfo, string adUnitId) + { + var p = AdParams.Build(adInfo, adUnitId, category:_radsCategory); + return p.ToAdClickData(); + } + + private Dictionary BuildRadsCloseData(MaxSdk.AdInfo adInfo, string adUnitId) + { + int duration = GetActionDuration(_radsDisplayStartTime); + var p = AdParams.Build(adInfo, adUnitId, category:_iadsCategory, duration:duration); + return p.ToAdCloseData(); + } + + private Dictionary BuildRadsRewardedData(MaxSdk.AdInfo adInfo, string adUnitId) + { + var p = AdParams.Build(adInfo, adUnitId, category:_iadsCategory); + return p.ToAdRewardedData(); + } + + #endregion } - - - - - } \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Ads/Channels/Max/AdChanelMax.cs b/Runtime/GuruCore/Runtime/Ads/Channels/Max/AdChanelMax.cs index e675a24..7b429ef 100644 --- a/Runtime/GuruCore/Runtime/Ads/Channels/Max/AdChanelMax.cs +++ b/Runtime/GuruCore/Runtime/Ads/Channels/Max/AdChanelMax.cs @@ -53,7 +53,7 @@ namespace Guru MaxSdk.SetBannerExtraParameter(MaxBADSSlotID, "adaptive_banner", "false"); // Set background or background color for banners to be fully functional MaxSdk.SetBannerBackgroundColor(MaxBADSSlotID, _backColor); - Analytics.ADBadsLoad(AdParams.Build(MaxBADSSlotID)); + Analytics.TrackAdBadsLoad(AdParams.Build(adUnitId:MaxBADSSlotID).ToAdLoadData()); } public void SetBannerBackColor(string hex) @@ -69,7 +69,7 @@ namespace Guru public bool IsInterstitialRequestOver => true; public void LoadInterstitialAD() { - Analytics.ADIadsLoad(AdParams.Build(MaxIADSSlotID)); // 上报打点 + Analytics.TrackAdIadsLoad(AdParams.Build(adUnitId:MaxIADSSlotID).ToAdLoadData()); // 上报打点 MaxSdk.LoadInterstitial(MaxIADSSlotID); } @@ -80,7 +80,7 @@ namespace Guru public bool IsRewardRequestOver => true; public void LoadRewardAD() { - Analytics.ADRadsLoad(AdParams.Build(MaxRADSSlotID)); // 上报打点 + Analytics.TrackAdRadsLoad(AdParams.Build(adUnitId:MaxRADSSlotID).ToAdLoadData()); // 上报打点 MaxSdk.LoadRewardedAd(MaxRADSSlotID); } diff --git a/Runtime/GuruCore/Runtime/Ads/Data/AdImpressionData.cs b/Runtime/GuruCore/Runtime/Ads/Data/AdImpressionData.cs deleted file mode 100644 index 8c4b137..0000000 --- a/Runtime/GuruCore/Runtime/Ads/Data/AdImpressionData.cs +++ /dev/null @@ -1,185 +0,0 @@ - - - -namespace Guru.Ads -{ - using System; - using System.Collections.Generic; - - - /// - /// AdImpression 对象 - /// - public class AdImpressionData - { - private const int MAX_VALUE_LENGTH = 96; - - public double value; - public string currency = "USD"; - public string ad_platform = "MAX"; - public string ad_source; - public string ad_format; - public string ad_unit_name; - public string ad_placement; - public string ad_creative_id; - public string review_creative_id; - public string event_name; - public DateTime createTime; - public string item_category; - public int duration; - - public AdImpressionData() - { - createTime = DateTime.UtcNow; - } - - public override string ToString() - { - return $"[AdImpressionData] ad_unit_name:{ad_unit_name} value:{value} currency:{currency} ad_platform:{ad_platform} ad_source:{ad_source} ad_format:{ad_format} ad_placement:{ad_placement} ad_creative_id:{ad_creative_id} review_creative_id:{review_creative_id} event_name:{event_name} duration:{duration} item_category:{item_category}"; - } - - - public bool EqualsCreativeId(string cid) - { - if (string.IsNullOrEmpty(cid)) return false; - return ad_creative_id.Equals(cid); - } - - public bool EqualsReviewCreativeId(string rcid) - { - if (string.IsNullOrEmpty(rcid)) return false; - return review_creative_id.Equals(rcid); - } - - /// - /// 设置 CreativeId - /// - /// - public void SetCreativeId(string creativeId) - { - ad_creative_id = FixStringLength(creativeId); - } - - /// - /// 设置 ReviewCreativeId - /// - /// - public void SetReviewCreativeId(string reviewCreativeId) - { - if (string.IsNullOrEmpty(reviewCreativeId)) return; - review_creative_id = FixStringLength(reviewCreativeId); - } - - /// - /// 限制字符串长度为 96 - /// - /// - /// - private string FixStringLength(string source) - { - return source.Length <= MAX_VALUE_LENGTH ? source : source.Substring(0, MAX_VALUE_LENGTH); - } - - /// - /// 获取自创建开始经过的秒数 - /// - /// - public double GetPassedSecond() - { - return (DateTime.UtcNow - createTime).TotalSeconds; - } - - - public Dictionary BuildEventData() - { - var data = new Dictionary() - { - { "value", value }, - { "currency", currency }, - { "ad_platform", ad_platform }, - { "ad_format", ad_format }, - { "ad_source", ad_source }, - { "ad_unit_name", ad_unit_name }, - { "ad_placement", ad_placement }, - { "ad_creative_id", ad_creative_id }, - { "review_creative_id", review_creative_id }, - }; - - return data; - } - - - public Dictionary BuildEventAdImpData() - { - var data = new Dictionary() - { - { "ad_platform", ad_platform }, - { "ad_source", ad_source }, - { "ad_unit_name", ad_unit_name }, - { "ad_placement", ad_placement }, - { "ad_creative_id", ad_creative_id }, - { "review_creative_id", review_creative_id }, - { "item_category", item_category} - }; - - return data; - } - - public Dictionary BuildEventAdClickData() - { - var data = new Dictionary() - { - { "value", value }, - { "currency", currency }, - { "ad_platform", ad_platform }, - { "ad_source", ad_source }, - { "ad_unit_name", ad_unit_name }, - { "ad_placement", ad_placement }, - { "ad_creative_id", ad_creative_id }, - { "review_creative_id", review_creative_id }, - { "item_category", item_category} - }; - - return data; - } - - public Dictionary BuildEventAdPaidData() - { - var data = new Dictionary() - { - { "value", value }, - { "currency", currency }, - { "ad_platform", ad_platform }, - { "ad_source", ad_source }, - { "ad_unit_name", ad_unit_name }, - { "ad_placement", ad_placement }, - { "ad_creative_id", ad_creative_id }, - { "review_creative_id", review_creative_id }, - { "item_category", item_category} - }; - - return data; - } - - public Dictionary BuildEventAdRewardedData() - { - var data = new Dictionary() - { - { "value", value }, - { "currency", currency }, - { "ad_platform", ad_platform }, - { "ad_source", ad_source }, - { "ad_unit_name", ad_unit_name }, - { "ad_placement", ad_placement }, - { "ad_creative_id", ad_creative_id }, - { "review_creative_id", review_creative_id }, - { "item_category", item_category} - }; - - return data; - } - - - - } -} \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Ads/Data/AdImpressionData.cs.meta b/Runtime/GuruCore/Runtime/Ads/Data/AdImpressionData.cs.meta deleted file mode 100644 index aa0e087..0000000 --- a/Runtime/GuruCore/Runtime/Ads/Data/AdImpressionData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 1aca2a4507b94dfe9f88040125708edb -timeCreated: 1721883318 \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Ads/Data/AdImpressionDriver.cs b/Runtime/GuruCore/Runtime/Ads/Data/AdImpressionDriver.cs deleted file mode 100644 index 7578a41..0000000 --- a/Runtime/GuruCore/Runtime/Ads/Data/AdImpressionDriver.cs +++ /dev/null @@ -1,251 +0,0 @@ - - -namespace Guru.Ads -{ - // using System.Collections.Concurrent; - using System; - using System.Collections.Generic; - using UnityEngine; - - - public class AdImpressionDriver - { - private const string Tag = "[SDK][ADS]"; - private const double NEED_FLUSH_TIME = 40.0; // 单条 Impression data 存在的最大间隔时间(秒) - private List _impressionData; // 所有缓存待上报的 impression data - private Dictionary _savedReviewCreativeIds; - - private Action _onReportAdsRevenue; - - - public static AdImpressionData Build(double value, string currency, - string adPlatform, string adSource, string adFormat, - string adUnitName, string adPlacement, string adCreativeID, string reviewCreativeID, - string eventName = "", string itemCategory = "", int duration = 0) - { - if (string.IsNullOrEmpty(adPlatform)) adPlatform = Analytics.AdMAX; - if (string.IsNullOrEmpty(itemCategory)) itemCategory = "not_set"; - if (string.IsNullOrEmpty(eventName)) eventName = Analytics.EventAdImpression; - - var data = new AdImpressionData() - { - value = value, - currency = currency, - ad_platform = adPlatform, - ad_source = adSource, - ad_format = adFormat, - ad_unit_name = adUnitName, - ad_placement = adPlacement, - ad_creative_id = adCreativeID, - event_name = eventName, - item_category = itemCategory, - duration = duration, - }; - - data.SetCreativeId(adCreativeID); - data.SetReviewCreativeId(reviewCreativeID); - - return data; - } - - - public void Init(Action onReportRevenue) - { - _impressionData = new List(20); - _savedReviewCreativeIds = new Dictionary(100); - - _onReportAdsRevenue = onReportRevenue; - } - - - public bool IsCreativeIdExists(string creativeId) => _savedReviewCreativeIds.ContainsKey(creativeId); - - public void SetReviewCreativeId(string creativeId, string reviewCreativeId) - { - bool isCidExists = IsCreativeIdExists(creativeId); - _savedReviewCreativeIds[creativeId] = reviewCreativeId; - - if (isCidExists && !string.IsNullOrEmpty(reviewCreativeId)) - { - FlushAllImpressionData(creativeId, reviewCreativeId); - } - } - - /// - /// 强制发送相关的数据 - /// - /// - public void CleanCreativeId(string creativeId) - { - if (string.IsNullOrEmpty(creativeId)) return; - - if (IsCreativeIdExists(creativeId)) - { - FlushAllImpressionData(creativeId, "", true); - } - RemoveCreativeId(creativeId); //清理对应的 createId - } - - - private string GetReviewCreativeId(string creativeId) - { - if(string.IsNullOrEmpty(creativeId)) return ""; - return _savedReviewCreativeIds.GetValueOrDefault(creativeId, ""); - } - - - public void RemoveCreativeId(string creativeId) - { - if (IsCreativeIdExists(creativeId)) - { - _savedReviewCreativeIds.Remove(creativeId); - } - } - - /// - /// 添加一条Impression数据 - /// - /// - public void Append(AdImpressionData data) - { - if (CanFlushData(data)) - { - // 立即触发数据 - FlushImpressionData(data); - } - else - { - if (!IsCreativeIdExists(data.ad_creative_id)) - { - SetReviewCreativeId(data.ad_creative_id, ""); - } - - // 缓存数据 - PushImpressionData(data); - } - } - - - private void PushImpressionData(AdImpressionData data) - { - _impressionData.Add(data); - } - - - private bool CanFlushData(AdImpressionData data) - { - // #1 如果超时, 强制上报 - if (data.GetPassedSecond() > NEED_FLUSH_TIME) return true; - // #2 如果 cid 和 rcid 都赋值了 则上报 - if (!string.IsNullOrEmpty(data.review_creative_id)) return true; - // #3 如果 rcid 为空, 但是可以找到,也上报 - var rcid = GetReviewCreativeId(data.ad_creative_id); - if (!string.IsNullOrEmpty(rcid)) - { - data.SetReviewCreativeId(rcid); - return true; - } - - return false; - } - - - /// - /// 触发所有相关的 cid 和 reviewCreateId - /// - /// - /// - /// 强制触发 - private void FlushAllImpressionData(string creativeId, string reviewCreativeId = "", bool force = false) - { - List tmp = new List(_impressionData.Count); - - if(string.IsNullOrEmpty(reviewCreativeId)) reviewCreativeId = GetReviewCreativeId(creativeId); //获取 reviewCreativeId - - foreach(var data in _impressionData) - { - if (data.EqualsCreativeId(creativeId)) - { - data.SetReviewCreativeId(reviewCreativeId); - if (CanFlushData(data) || force) - { - FlushImpressionData(data); - } - else - { - tmp.Add(data); - } - } - else if (CanFlushData(data)) - { - FlushImpressionData(data); - } - else - { - tmp.Add(data); - } - } - - _impressionData = tmp; - } - - - /// - /// 输出一个 Impression 事件 - /// - /// - private void FlushImpressionData(AdImpressionData data) - { - Debug.Log($"{Tag} --- FlushImpressionData: {data}"); - switch (data.event_name) - { - case Analytics.EventBadsPaid: - // BADS 收入事件 - // BADS 尚未统计 bads_paid 打点 - _onReportAdsRevenue?.Invoke(data); - break; - - case Analytics.EventIadsImp: - Analytics.ADIadsImp(data.BuildEventAdImpData()); - break; - - case Analytics.EventIadsClick: - Analytics.ADIadsClick(data.BuildEventAdClickData()); - break; - - case Analytics.EventIadsPaid: - // IADS 收入事件 - Analytics.ADIadsPaid(data.BuildEventAdPaidData()); - _onReportAdsRevenue?.Invoke(data); - break; - - case Analytics.EventRadsImp: - Analytics.ADRadsImp(data.BuildEventAdImpData()); - break; - - case Analytics.EventRadsClick: - Analytics.ADRadsClick(data.BuildEventAdClickData()); - break; - - case Analytics.EventRadsRewarded: - Analytics.ADRadsRewarded(data.BuildEventAdRewardedData()); - break; - - case Analytics.EventRadsPaid: - // RADS 收入事件 - Analytics.ADRadsPaid(data.BuildEventAdPaidData()); - _onReportAdsRevenue?.Invoke(data); - break; - - } - } - - - - - - - - - } -} \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Ads/Data/AdImpressionDriver.cs.meta b/Runtime/GuruCore/Runtime/Ads/Data/AdImpressionDriver.cs.meta deleted file mode 100644 index d7a2088..0000000 --- a/Runtime/GuruCore/Runtime/Ads/Data/AdImpressionDriver.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 7194cdd8ed1447508011264371e2c23d -timeCreated: 1722313472 \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Ads/Data/AdParams.cs b/Runtime/GuruCore/Runtime/Ads/Data/AdParams.cs new file mode 100644 index 0000000..30bfdec --- /dev/null +++ b/Runtime/GuruCore/Runtime/Ads/Data/AdParams.cs @@ -0,0 +1,254 @@ +using System.Collections.Generic; + +namespace Guru +{ + /// + /// 广告打点上报参数 + /// + public class AdParams + { + public double value; + public string currency; + public string category; + public string networkPlacement; + public string adPlatform; + public string adSource; + public string adFormat; + public string adUnitId; + public int errorCode = 0; + public int duration = 0; + public string creativeId; + public string reviewCreativeId; + + /// + /// 构造AD参数 + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static AdParams Build(MaxSdkBase.AdInfo adInfo = null, string adUnitId = "", string category = "", + int duration = 0, int errorCode = 0, string reviewCreativeId = "", string adPlatform = "", string currency = "") + { + if (string.IsNullOrEmpty(adUnitId) && adInfo != null) adUnitId = adInfo.AdUnitIdentifier; + var networkPlacement = ""; + var creativeId = ""; + var adSource = ""; + var adFormart = ""; + double value = 0; + string waterfallName = ""; + + if (adInfo != null) + { + value = adInfo.Revenue; + networkPlacement = adInfo.NetworkPlacement; + creativeId = adInfo.CreativeIdentifier; + adSource = adInfo.NetworkName; + adFormart = adInfo.AdFormat; + } + + if (string.IsNullOrEmpty(adPlatform)) adPlatform = Analytics.AdMAX; + if (string.IsNullOrEmpty(category)) category = "not_set"; + if (string.IsNullOrEmpty(currency)) currency = Analytics.USD; + + var p = new AdParams() + { + value = value, + currency = currency, + adUnitId = adUnitId, + adPlatform = adPlatform, + adSource = adSource, + adFormat = adFormart, + duration = duration, + networkPlacement = networkPlacement, + category = category, + errorCode = errorCode, + creativeId = creativeId, + reviewCreativeId = reviewCreativeId, + }; + return p; + } + + + /// + /// 转化为 AdImpression 事件数据 + /// + /// + public Dictionary ToAdImpressionData() + { + var data = new Dictionary() + { + [Analytics.ParameterValue] = value, + [Analytics.ParameterCurrency] = currency, + [Analytics.ParameterAdPlatform] = adPlatform, + [Analytics.ParameterAdSource] = adSource, + [Analytics.ParameterAdFormat] = adFormat, + [Analytics.ParameterAdUnitName] = adUnitId, + [Analytics.ParameterAdPlacement] = networkPlacement, + [Analytics.ParameterAdCreativeId] = creativeId, + }; + + if (!string.IsNullOrEmpty(reviewCreativeId)) + data[Analytics.ParameterReviewCreativeId] = reviewCreativeId; + return data; + } + + + /// + /// 转化为 ads_imp 事件数据 + /// + /// + public Dictionary ToAdImpData() + { + var data = new Dictionary() + { + [Analytics.ParameterAdPlatform] = adPlatform, + [Analytics.ParameterAdSource] = adSource, + [Analytics.ParameterAdUnitName] = adUnitId, + [Analytics.ParameterAdPlacement] = networkPlacement, + [Analytics.ParameterAdCreativeId] = creativeId, + [Analytics.ParameterItemCategory] = category, + }; + + if (!string.IsNullOrEmpty(reviewCreativeId)) + data[Analytics.ParameterReviewCreativeId] = reviewCreativeId; + return data; + } + + /// + /// 转化为 ads_paid 通用事件数据 + /// + /// + public Dictionary ToAdPaidData() + { + var data = new Dictionary() + { + [Analytics.ParameterValue] = value, + [Analytics.ParameterCurrency] = currency, + [Analytics.ParameterAdPlatform] = adPlatform, + [Analytics.ParameterAdSource] = adSource, + [Analytics.ParameterAdUnitName] = adUnitId, + [Analytics.ParameterAdPlacement] = networkPlacement, + [Analytics.ParameterAdCreativeId] = creativeId, + [Analytics.ParameterItemCategory] = category, + }; + + if (!string.IsNullOrEmpty(reviewCreativeId)) + data[Analytics.ParameterReviewCreativeId] = reviewCreativeId; + return data; + } + + /// + /// 转化为 ads_paid 通用事件数据 + /// + /// + public Dictionary ToAdRewardedData() + { + var data = new Dictionary() + { + [Analytics.ParameterValue] = value, + [Analytics.ParameterCurrency] = currency, + [Analytics.ParameterAdPlatform] = adPlatform, + [Analytics.ParameterAdSource] = adSource, + [Analytics.ParameterAdUnitName] = adUnitId, + [Analytics.ParameterAdPlacement] = networkPlacement, + [Analytics.ParameterAdCreativeId] = creativeId, + [Analytics.ParameterItemCategory] = category, + }; + + if (!string.IsNullOrEmpty(reviewCreativeId)) + data[Analytics.ParameterReviewCreativeId] = reviewCreativeId; + return data; + } + + public Dictionary ToAdClickData() + { + var data = new Dictionary() + { + [Analytics.ParameterValue] = value, + [Analytics.ParameterCurrency] = currency, + [Analytics.ParameterAdPlatform] = adPlatform, + [Analytics.ParameterAdSource] = adSource, + [Analytics.ParameterAdUnitName] = adUnitId, + [Analytics.ParameterAdPlacement] = networkPlacement, + [Analytics.ParameterAdCreativeId] = creativeId, + [Analytics.ParameterItemCategory] = category, + }; + + if (!string.IsNullOrEmpty(reviewCreativeId)) + data[Analytics.ParameterReviewCreativeId] = reviewCreativeId; + return data; + } + + public Dictionary ToAdCloseData() + { + var data = new Dictionary() + { + [Analytics.ParameterItemCategory] = category, + [Analytics.ParameterDuration] = duration, + }; + return data; + } + + /// + /// 广告失败事件数据 + /// + /// + public Dictionary ToAdFailedData() + { + var data = new Dictionary() + { + [Analytics.ParameterItemCategory] = category, + [Analytics.ParameterItemName] = adUnitId, + [Analytics.ParameterErrorCode] = errorCode, + [Analytics.ParameterDuration] = duration, + }; + return data; + } + + /// + /// 广告加载成功事件数据 + /// + /// + public Dictionary ToAdLoadData() + { + var data = new Dictionary() + { + [Analytics.ParameterItemCategory] = category, + [Analytics.ParameterItemName] = adUnitId, + }; + return data; + } + + /// + /// 广告加载成功事件数据 + /// + /// + public Dictionary ToAdLoadedData() + { + var data = new Dictionary() + { + [Analytics.ParameterItemCategory] = category, + [Analytics.ParameterItemName] = adUnitId, + [Analytics.ParameterDuration] = duration, + }; + return data; + } + + + public Dictionary ToBadsImpData() + { + var data = new Dictionary() + { + [Analytics.ParameterItemCategory] = category, + [Analytics.ParameterItemName] = adUnitId, + }; + return data; + } + } +} \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Ads/Data/AdParams.cs.meta b/Runtime/GuruCore/Runtime/Ads/Data/AdParams.cs.meta new file mode 100644 index 0000000..bbe849a --- /dev/null +++ b/Runtime/GuruCore/Runtime/Ads/Data/AdParams.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0341a8c153f04535a4193ce32086315a +timeCreated: 1722396384 \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Analytics/Analytics.Ads.cs b/Runtime/GuruCore/Runtime/Analytics/Analytics.Ads.cs index 1b855dc..87917ea 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Analytics.Ads.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Analytics.Ads.cs @@ -1,17 +1,13 @@ -using System.Collections.Generic; -using UnityEngine; + namespace Guru { + using System.Collections.Generic; + using UnityEngine; + public static partial class Analytics { #region 广告属性 - - //------ 广告额外的参数 -------- - private static readonly string ParameterNetworkName = "network_name"; //NetworkName - private static readonly string ParameterNetworkPlacement = "network_placement"; //NetworkPlacement - private static readonly string ParameterWaterfall = "waterfall"; //Waterfall - //------ 默认值 ------- public const string DefaultCategory = "not_set"; public const string DefaultWaterfall = "unknown"; @@ -21,89 +17,32 @@ namespace Guru #region Ads - private static Dictionary BuildAdEventData(AdParams adParams, Dictionary extra = null) - { - if (string.IsNullOrEmpty(adParams.category)) - adParams.category = DefaultCategory; - if (string.IsNullOrEmpty(adParams.waterfallName)) - adParams.waterfallName = DefaultWaterfall; - - var data = new Dictionary() - { - { ParameterItemCategory, adParams.category }, - { ParameterItemName, adParams.adUnitId }, - }; - - if (adParams.duration > 0) - data[ParameterDuration] = adParams.duration; - - if (adParams.errorCode != 0) - data[ParameterErrorCode] = adParams.errorCode; - - if (!string.IsNullOrEmpty(adParams.networkName)) - data[ParameterNetworkName] = adParams.networkName; - - if (!string.IsNullOrEmpty(adParams.networkPlacement)) - { - data[ParameterNetworkPlacement] = adParams.networkPlacement; - data[ParameterAdPlacement] = adParams.networkPlacement; - } - - if (!string.IsNullOrEmpty(adParams.waterfallName)) - data[ParameterWaterfall] = adParams.waterfallName; - - if (!string.IsNullOrEmpty(adParams.creativeId)) - data[ParameterAdCreativeId] = adParams.creativeId; - - if (!string.IsNullOrEmpty(adParams.reviewCreativeId)) - data[ParameterReviewCreativeId] = adParams.reviewCreativeId; - - if (!string.IsNullOrEmpty(adParams.adPlatform)) - data[ParameterAdPlatform] = adParams.adPlatform; - - if (!string.IsNullOrEmpty(adParams.adSource)) - data[ParameterAdSource] = adParams.adSource; - - if (!string.IsNullOrEmpty(adParams.adFormat)) - data[ParameterAdFormat] = adParams.adFormat; - - if (extra != null && extra.Count > 0) - { - foreach (var k in extra.Keys) - { - data[k] = extra[k]; - } - } - - return data; - } - //---------------------- BANNER ------------------------- - public static void ADBadsLoad(AdParams adParams) + public static void TrackAdBadsLoad(Dictionary data) { - TrackEvent(EventBadsLoad, BuildAdEventData(adParams)); + TrackEvent(EventBadsLoad, data); } - public static void ADBadsLoaded(AdParams adParams) + public static void TrackAdBadsLoaded(Dictionary data) { - TrackEvent(EventBadsLoaded, BuildAdEventData(adParams)); + TrackEvent(EventBadsLoaded, data); } - public static void ADBadsFailed(AdParams adParams) + public static void TrackAdBadsFailed(Dictionary data) { - TrackEvent(EventBadsFailed, BuildAdEventData(adParams)); + TrackEvent(EventBadsFailed, data); } /// /// 广告点击 /// - public static void ADBadsClick(AdParams adParams) + public static void TrackAdBadsClick(Dictionary data) { - TrackEvent(EventBadsClick, BuildAdEventData(adParams)); + TrackEvent(EventBadsClick, data); } - public static void ADBadsImp(AdParams adParams) + public static void TrackAdBadsImp(Dictionary data) { - TrackEvent(EventBadsImp, BuildAdEventData(adParams)); + TrackEvent(EventBadsImp, data); } - public static void ADBadsHide( int loadedTimes, int failTimes) + public static void TrackAdBadsHide( int loadedTimes, int failTimes) { var dict = new Dictionary() { @@ -116,36 +55,31 @@ namespace Guru /// /// 广告拉取 /// - public static void ADIadsLoad(AdParams adParams) + public static void TrackAdIadsLoad(Dictionary data) { - TrackEvent(EventIadsLoad, BuildAdEventData(adParams)); + TrackEvent(EventIadsLoad, data); } /// /// 广告拉取成功 /// - public static void ADIadsLoaded(AdParams adParams) + public static void TrackAdIadsLoaded(Dictionary data) { - TrackEvent(EventIadsLoaded, BuildAdEventData(adParams)); + TrackEvent(EventIadsLoaded, data); } /// /// 广告拉取失败 /// - public static void ADIadsFailed(AdParams adParams) + public static void TrackAdIadsFailed(Dictionary data) { - TrackEvent(EventIadsFailed, BuildAdEventData(adParams)); + TrackEvent(EventIadsFailed, data); } /// /// 广告展示 /// - public static void ADIadsImp(AdParams adParams) - { - ADIadsImp(BuildAdEventData(adParams)); - } - - public static void ADIadsImp(Dictionary data) + public static void TrackAdIadsImp(Dictionary data) { TrackEvent(EventIadsImp, data); } @@ -153,12 +87,7 @@ namespace Guru /// /// 广告点击 /// - public static void ADIadsClick(AdParams adParams) - { - ADIadsClick(BuildAdEventData(adParams)); - } - - public static void ADIadsClick(Dictionary data) + public static void TrackAdIadsClick(Dictionary data) { TrackEvent(EventIadsClick, data); } @@ -166,12 +95,7 @@ namespace Guru /// /// 用户关闭广告 /// - public static void ADIadsClose(AdParams adParams) - { - ADIadsClose(BuildAdEventData(adParams)); - } - - public static void ADIadsClose(Dictionary data) + public static void TrackAdIadsClose(Dictionary data) { TrackEvent(EventIadsClose, data); } @@ -180,7 +104,7 @@ namespace Guru /// 插屏广告收到奖励 /// /// - public static void ADIadsPaid(Dictionary data) + public static void TrackAdIadsPaid(Dictionary data) { TrackEvent(EventIadsPaid, data); } @@ -189,33 +113,28 @@ namespace Guru /// /// 广告开始加载 /// - public static void ADRadsLoad(AdParams adParams) + public static void TrackAdRadsLoad(Dictionary data) { - TrackEvent(EventRadsLoad, BuildAdEventData(adParams)); + TrackEvent(EventRadsLoad, data); } /// /// 广告拉取成功 /// - public static void ADRadsLoaded(AdParams adParams) + public static void TrackAdRadsLoaded(Dictionary data) { - TrackEvent(EventRadsLoaded, BuildAdEventData(adParams)); + TrackEvent(EventRadsLoaded, data); } /// /// 广告拉取失败 /// - public static void ADRadsFailed(AdParams adParams) + public static void TrackAdRadsFailed(Dictionary data) { - TrackEvent(EventRadsFailed, BuildAdEventData(adParams)); + TrackEvent(EventRadsFailed, data); } /// /// 广告展示 /// - public static void ADRadsImp(AdParams adParams) - { - ADRadsImp(BuildAdEventData(adParams)); - } - - public static void ADRadsImp(Dictionary data) + public static void TrackAdRadsImp(Dictionary data) { TrackEvent(EventRadsImp, data); } @@ -225,19 +144,14 @@ namespace Guru /// /// 广告完成观看发奖励 /// - public static void ADRadsRewarded(AdParams adParams) - { - ADRadsRewarded(BuildAdEventData(adParams)); - } - - public static void ADRadsRewarded(Dictionary data) + public static void TrackAdRadsRewarded(Dictionary data) { TrackEvent(EventRadsRewarded, data); if (RadsRewardCount == 0) { RadsRewardCount = 1; - ADRadsFirstRewarded(data); + TrackAdRadsFirstRewarded(data); } } @@ -245,12 +159,11 @@ namespace Guru /// 插屏广告收到奖励 /// /// - public static void ADRadsPaid(Dictionary data) + public static void TrackAdRadsPaid(Dictionary data) { TrackEvent(EventRadsPaid, data); } - private static int RadsRewardCount { get => PlayerPrefs.GetInt(nameof(RadsRewardCount), 0); @@ -260,7 +173,7 @@ namespace Guru /// /// 用户首次完成观看 /// - public static void ADRadsFirstRewarded(Dictionary data) + private static void TrackAdRadsFirstRewarded(Dictionary data) { TrackEvent(EventFirstRadsRewarded, data); } @@ -268,12 +181,7 @@ namespace Guru /// /// 广告点击 /// - public static void ADRadsClick(AdParams adParams) - { - ADRadsClick(BuildAdEventData(adParams)); - } - - public static void ADRadsClick(Dictionary data) + public static void TrackAdRadsClick(Dictionary data) { TrackEvent(EventRadsClick, data); } @@ -281,12 +189,7 @@ namespace Guru /// /// 用户关闭广告 /// - public static void ADRadsClose(AdParams adParams) - { - ADRadsClose( BuildAdEventData(adParams)); - } - - public static void ADRadsClose(Dictionary data) + public static void TrackAdRadsClose(Dictionary data) { TrackEvent(EventRadsClose, data); } @@ -329,78 +232,6 @@ namespace Guru #endregion } - /// - /// 广告打点上报参数 - /// - public class AdParams - { - public string category; - public string networkName; - public string networkPlacement; - public string adPlatform; - public string adSource; - public string adFormat; - public string waterfallName; - public string adUnitId; - public int errorCode = 0; - public int duration = 0; - public string creativeId; - public string reviewCreativeId; - - - /// - /// 构造AD参数 - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - public static AdParams Build(string adUnitId, MaxSdkBase.AdInfo adInfo = null, string category = "", - int duration = 0, int errorCode = 0, string waterfallName = "", string reviewCreativeId = "", string adPlatform = "") - { - if (string.IsNullOrEmpty(adUnitId) && adInfo != null) adUnitId = adInfo.AdUnitIdentifier; - var networkName = ""; - var networkPlacement = ""; - var creativeId = ""; - var adSource = ""; - var adFormart = ""; - - if (string.IsNullOrEmpty(adPlatform)) adPlatform = Analytics.AdMAX; - if (adInfo != null) - { - networkName = adInfo.NetworkName; - networkPlacement = adInfo.NetworkPlacement; - creativeId = adInfo.CreativeIdentifier; - adSource = adInfo.NetworkName; - adFormart = adInfo.AdFormat; - - if (string.IsNullOrEmpty(waterfallName)) - waterfallName = adInfo.WaterfallInfo?.Name ?? ""; - - } - - var p = new AdParams() - { - adUnitId = adUnitId, - adPlatform = adPlatform, - adSource = adSource, - adFormat = adFormart, - duration = duration, - networkName = networkName, - networkPlacement = networkPlacement, - waterfallName = waterfallName, - category = category, - errorCode = errorCode, - creativeId = creativeId, - reviewCreativeId = reviewCreativeId, - }; - return p; - } - } + } \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Analytics/Analytics.TemplateDefine.cs b/Runtime/GuruCore/Runtime/Analytics/Analytics.TemplateDefine.cs index 57b3b93..f1736a6 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Analytics.TemplateDefine.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Analytics.TemplateDefine.cs @@ -6,7 +6,6 @@ namespace Guru using System.Collections.Generic; using Facebook.Unity; using UnityEngine; - using Guru.Ads; //游戏通用模版打点定义 public static partial class Analytics @@ -412,11 +411,20 @@ namespace Guru public static void FBPurchase(double revenue, string currency, string type, string platfrom) => FBPurchase((float)revenue, currency, type, platfrom); - + /// /// Google ARO买量点 /// /// 广告收入数据 + /// + /// + /// + /// + /// + /// + /// + /// + /// /// ///
  • /// value double eg:0.002 @@ -427,21 +435,28 @@ namespace Guru /// ad_unit_name string 广告位名称 /// ad_creative_id string 广告素材id ///
  • - public static void ADImpression(AdImpressionData impressionData) + public static void ADImpression(double value, string currency = "USD", string adPlatform = "", + string adSource = "", string adFormat = "", string adUnitId = "", string adPlacement= "", + string creativeId = "", string reviewCreativeId = "") { - TrackEvent(EventAdImpression, new Dictionary() + ADImpression(new Dictionary() { - [ParameterValue] = impressionData.value, - [ParameterCurrency] = impressionData.currency, - [ParameterAdPlatform] = impressionData.ad_platform, - [ParameterAdSource] = impressionData.ad_source, - [ParameterAdFormat] = impressionData.ad_format, - [ParameterAdUnitName] = impressionData.ad_unit_name, - [ParameterAdPlacement] = impressionData.ad_placement, - [ParameterAdCreativeId] = impressionData.ad_creative_id, - [ParameterReviewCreativeId] = impressionData.review_creative_id, + [ParameterValue] = value, + [ParameterCurrency] = currency, + [ParameterAdPlatform] = adPlatform, + [ParameterAdSource] = adSource, + [ParameterAdFormat] = adFormat, + [ParameterAdUnitName] = adUnitId, + [ParameterAdPlacement] = adPlacement, + [ParameterAdCreativeId] = creativeId, + [ParameterReviewCreativeId] = reviewCreativeId, }); } + + public static void ADImpression(Dictionary data) + { + TrackEvent(EventAdImpression, data); + } public static void TchAdAbnormalEvent(double value) { diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.Ads.cs b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.Ads.cs index 2ecafe9..bc176be 100644 --- a/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.Ads.cs +++ b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.Ads.cs @@ -2,13 +2,10 @@ namespace Guru { - using System; using System.Collections.Generic; using System.Text; using UnityEngine; - using Consts=AdStatusConsts; - - + using Const=AdStatusConsts; public partial class AdStatusPresenter { @@ -104,12 +101,10 @@ namespace Guru private StringBuilder _infoBuff; private string CreateMonitorInfo() { - string msg = ""; - bool loaded = false; - + string msg; if (ADService.Instance == null || !ADService.Instance.IsInitialized) { - msg = ColoredText("AdService not initialized...", Consts.ColorRed); + msg = ColoredText("AdService not initialized...", Const.ColorRed); return msg; } @@ -118,7 +113,7 @@ namespace Guru if (_curBadsInfo == null) { - msg = $"BADS: {ColoredText("not ready", Consts.ColorRed)}\n"; + msg = $"BADS: {ColoredText("not ready", Const.ColorRed)}\n"; } else { @@ -126,25 +121,25 @@ namespace Guru switch (_curBadsInfo.status) { case AdStatusType.Loaded: - msg = $"BADS: {ColoredText("loaded", Consts.ColorGreen)}\n\tnetwork: {_curBadsInfo.network}\n\twaterfall: {_curBadsInfo.waterfall}\n"; + msg = $"BADS: {ColoredText("loaded", Const.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"; + msg = $"BADS: {ColoredText("loading failed", Const.ColorRed)}\n\tmessage: {_curBadsInfo.info}\n"; break; case AdStatusType.DisplayFailed: - msg = $"BADS: {ColoredText("display failed", Consts.ColorRed)}\n\tmessage: {_curBadsInfo.info}\n"; + msg = $"BADS: {ColoredText("display failed", Const.ColorRed)}\n\tmessage: {_curBadsInfo.info}\n"; break; case AdStatusType.Loading: - msg = $"BADS: {ColoredText("loading...", Consts.ColorYellow)}\n\tformat: {_curBadsInfo.format}\n"; + msg = $"BADS: {ColoredText("loading...", Const.ColorYellow)}\n\tformat: {_curBadsInfo.format}\n"; break; case AdStatusType.Paid: - msg = $"BADS: {ColoredText("display", Consts.ColorGreen)}\n\tnetwork: {_curBadsInfo.network}\n\trevenue: {_curBadsInfo.revenue}\n"; + msg = $"BADS: {ColoredText("display", Const.ColorGreen)}\n\tnetwork: {_curBadsInfo.network}\n\trevenue: {_curBadsInfo.revenue}\n"; break; case AdStatusType.NotReady: - msg = $"BADS: {ColoredText("not ready", Consts.ColorGray)}\n\t{ColoredText("---", Consts.ColorGray)}\n"; + msg = $"BADS: {ColoredText("not ready", Const.ColorGray)}\n\t{ColoredText("---", Const.ColorGray)}\n"; break; default: - msg = $"BADS: {ColoredText("other", Consts.ColorGray)}\n\tstatus: {ColoredText($"{_curBadsInfo.status}", Consts.ColorYellow)}\n"; + msg = $"BADS: {ColoredText("other", Const.ColorGray)}\n\tstatus: {ColoredText($"{_curBadsInfo.status}", Const.ColorYellow)}\n"; break; } } @@ -153,32 +148,32 @@ namespace Guru if (_curIadsInfo == null) { - msg = $"IADS: {ColoredText("not ready", Consts.ColorRed)}\n"; + msg = $"IADS: {ColoredText("not ready", Const.ColorRed)}\n"; } else { switch (_curIadsInfo.status) { case AdStatusType.Loaded: - msg = $"IADS: {ColoredText("loaded", Consts.ColorGreen)}\n\tnetwork: {_curIadsInfo.network}\n\twaterfall: {_curIadsInfo.waterfall}\n"; + msg = $"IADS: {ColoredText("loaded", Const.ColorGreen)}\n\tnetwork: {_curIadsInfo.network}\n\twaterfall: {_curIadsInfo.waterfall}\n"; break; case AdStatusType.LoadFailed: - msg = $"IADS: {ColoredText("loading failed", Consts.ColorRed)}\n\tmessage: {_curIadsInfo.info}\n"; + msg = $"IADS: {ColoredText("loading failed", Const.ColorRed)}\n\tmessage: {_curIadsInfo.info}\n"; break; case AdStatusType.DisplayFailed: - msg = $"IADS: {ColoredText("display failed", Consts.ColorRed)}\n\tmessage: {_curIadsInfo.info}\n"; + msg = $"IADS: {ColoredText("display failed", Const.ColorRed)}\n\tmessage: {_curIadsInfo.info}\n"; break; case AdStatusType.Loading: - msg = $"IADS: {ColoredText("loading...", Consts.ColorYellow)}\n\tformat: {_curIadsInfo.format}\n"; + msg = $"IADS: {ColoredText("loading...", Const.ColorYellow)}\n\tformat: {_curIadsInfo.format}\n"; break; case AdStatusType.Paid: - msg = $"IADS: {ColoredText("get revenue", Consts.ColorGreen)}\n\trevenue: {_curIadsInfo.revenue}\n"; + msg = $"IADS: {ColoredText("get revenue", Const.ColorGreen)}\n\trevenue: {_curIadsInfo.revenue}\n"; break; case AdStatusType.NotReady: - msg = $"IADS: {ColoredText("not ready", Consts.ColorGray)}\n\t{ColoredText("---", Consts.ColorGray)}\n"; + msg = $"IADS: {ColoredText("not ready", Const.ColorGray)}\n\t{ColoredText("---", Const.ColorGray)}\n"; break; default: - msg = $"IADS: {ColoredText("other", Consts.ColorGray)}\n\tstatus: {ColoredText($"{_curIadsInfo.status}", Consts.ColorYellow)}\n"; + msg = $"IADS: {ColoredText("other", Const.ColorGray)}\n\tstatus: {ColoredText($"{_curIadsInfo.status}", Const.ColorYellow)}\n"; break; } } @@ -187,32 +182,32 @@ namespace Guru if (_curRadsInfo == null) { - msg = $"RADS: {ColoredText("not ready", Consts.ColorRed)}\n"; + msg = $"RADS: {ColoredText("not ready", Const.ColorRed)}\n"; } else { switch (_curRadsInfo.status) { case AdStatusType.Loaded: - msg = $"RADS: {ColoredText("loaded", Consts.ColorGreen)}\n\tnetwork: {_curRadsInfo.network}\n\twaterfall: {_curRadsInfo.waterfall}\n"; + msg = $"RADS: {ColoredText("loaded", Const.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"; + msg = $"RADS: {ColoredText("loading failed", Const.ColorRed)}\n\tmessage: {_curRadsInfo.info}\n"; break; case AdStatusType.DisplayFailed: - msg = $"RADS: {ColoredText("display failed", Consts.ColorRed)}\n\tmessage: {_curRadsInfo.info}\n"; + msg = $"RADS: {ColoredText("display failed", Const.ColorRed)}\n\tmessage: {_curRadsInfo.info}\n"; break; case AdStatusType.Loading: - msg = $"RADS: {ColoredText("loading...", Consts.ColorYellow)}\n\tformat: {_curRadsInfo.format}\n"; + msg = $"RADS: {ColoredText("loading...", Const.ColorYellow)}\n\tformat: {_curRadsInfo.format}\n"; break; case AdStatusType.Paid: - msg = $"RADS: {ColoredText("get revenue", Consts.ColorGreen)}\n\trevenue: {_curRadsInfo.revenue}\n"; + msg = $"RADS: {ColoredText("get revenue", Const.ColorGreen)}\n\trevenue: {_curRadsInfo.revenue}\n"; break; case AdStatusType.NotReady: - msg = $"RADS: {ColoredText("not ready", Consts.ColorGray)}\n\t{ColoredText("---", Consts.ColorGray)}\n"; + msg = $"RADS: {ColoredText("not ready", Const.ColorGray)}\n\t{ColoredText("---", Const.ColorGray)}\n"; break; default: - msg = $"RADS: {ColoredText("other", Consts.ColorGray)}\n\tstatus: {ColoredText($"{_curRadsInfo.status}", Consts.ColorYellow)}\n"; + msg = $"RADS: {ColoredText("other", Const.ColorGray)}\n\tstatus: {ColoredText($"{_curRadsInfo.status}", Const.ColorYellow)}\n"; break; } } @@ -247,13 +242,13 @@ namespace Guru private void AddCallbacks() { //----------------- Banner ----------------- - ADService.OnBannerStartLoad += OnBannerStartLoadEvent; + ADService.Instance.OnBannerStartLoad += OnBannerStartLoadEvent; MaxSdkCallbacks.Banner.OnAdLoadedEvent += OnBannerAdLoadedEvent; MaxSdkCallbacks.Banner.OnAdLoadFailedEvent += OnBannerAdLoadFailEvent; MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnBannerAdRevenuePaidEvent; MaxSdkCallbacks.Banner.OnAdClickedEvent += OnBannerAdClickedEvent; //----------------- Interstitials ----------------- - ADService.OnInterstitialStartLoad += OnInterStartLoadEvent; + ADService.Instance.OnInterstitialStartLoad += OnInterStartLoadEvent; MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnInterAdLoadedEvent; MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnInterAdLoadFailEvent; MaxSdkCallbacks.Interstitial.OnAdDisplayFailedEvent += OnInterAdDisplayFailEvent; @@ -261,7 +256,7 @@ namespace Guru MaxSdkCallbacks.Interstitial.OnAdClickedEvent += OnInterAdClickedEvent; MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += OnInterAdHiddenEvent; //----------------- Reward ----------------- - ADService.OnRewardedStartLoad += OnRewardedStartLoad; + ADService.Instance.OnRewardedStartLoad += OnRewardedStartLoad; MaxSdkCallbacks.Rewarded.OnAdLoadedEvent += OnRewardAdLoadedEvent; MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnRewardAdLoadFailEvent; MaxSdkCallbacks.Rewarded.OnAdDisplayFailedEvent += OnRewardAdDisplayFailEvent; @@ -273,13 +268,13 @@ namespace Guru private void RemoveCallbacks() { //----------------- Banner ----------------- - ADService.OnBannerStartLoad -= OnBannerStartLoadEvent; + ADService.Instance.OnBannerStartLoad -= OnBannerStartLoadEvent; MaxSdkCallbacks.Banner.OnAdLoadedEvent -= OnBannerAdLoadedEvent; MaxSdkCallbacks.Banner.OnAdLoadFailedEvent -= OnBannerAdLoadFailEvent; MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent -= OnBannerAdRevenuePaidEvent; MaxSdkCallbacks.Banner.OnAdClickedEvent -= OnBannerAdClickedEvent; //----------------- Interstitials ----------------- - ADService.OnInterstitialStartLoad -= OnInterStartLoadEvent; + ADService.Instance.OnInterstitialStartLoad -= OnInterStartLoadEvent; MaxSdkCallbacks.Interstitial.OnAdLoadedEvent -= OnInterAdLoadedEvent; MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent -= OnInterAdLoadFailEvent; MaxSdkCallbacks.Interstitial.OnAdDisplayFailedEvent -= OnInterAdDisplayFailEvent; @@ -287,7 +282,7 @@ namespace Guru MaxSdkCallbacks.Interstitial.OnAdClickedEvent -= OnInterAdClickedEvent; MaxSdkCallbacks.Interstitial.OnAdHiddenEvent -= OnInterAdHiddenEvent; //----------------- Reward ----------------- - ADService.OnRewardedStartLoad -= OnRewardedStartLoad; + ADService.Instance.OnRewardedStartLoad -= OnRewardedStartLoad; MaxSdkCallbacks.Rewarded.OnAdLoadedEvent -= OnRewardAdLoadedEvent; MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent -= OnRewardAdLoadFailEvent; MaxSdkCallbacks.Rewarded.OnAdDisplayFailedEvent -= OnRewardAdDisplayFailEvent;