From 65e5cec021c52867106893456a507df2363eeb51 Mon Sep 17 00:00:00 2001 From: juncong lee Date: Mon, 15 Sep 2025 18:37:40 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=9A=90=E7=A7=81?= =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E9=93=BE=E6=8E=A5=E3=80=81=E4=B9=B0=E9=87=8F?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SDKManager/AdjustManager/AdjustManager.cs | 14 ++- .../SDKManager/AdjustManager/AdjustNetwork.cs | 8 +- Assets/Script/SDKManager/RushSDKManager.cs | 111 +++++++++++------- 3 files changed, 83 insertions(+), 50 deletions(-) diff --git a/Assets/Script/SDKManager/AdjustManager/AdjustManager.cs b/Assets/Script/SDKManager/AdjustManager/AdjustManager.cs index 76400ab..533b9df 100644 --- a/Assets/Script/SDKManager/AdjustManager/AdjustManager.cs +++ b/Assets/Script/SDKManager/AdjustManager/AdjustManager.cs @@ -41,11 +41,17 @@ public class AdjustManager : D_MonoSingleton ShuShuEvent.Instance.Track("adjust_init"); FireBaseAnalyticsManager.Instance.LogEvent("adjust_init"); - Adjust.GetAdid((id)=> + Adjust.GetAdid((id) => { ShuShuEvent.Instance.SetSuperProperties(new Dictionary() { { "adid", id } }); ShuShuEvent.Instance.UserSet(new Dictionary() { { "adid", id } }); }); + + var network = AdjustNetwork.GetNetwork(); + if (!string.IsNullOrEmpty(network)) + { + RushSDKManager.Instance.OnUserSourceListener?.Invoke(IsOrganic(network), network); + } } @@ -128,7 +134,7 @@ public class AdjustManager : D_MonoSingleton campaign = attribution.Campaign; adgroup = attribution.Adgroup; creative = attribution.Creative; - + if (!string.IsNullOrEmpty(attribution.Network)) { network = attribution.Network; @@ -139,7 +145,7 @@ public class AdjustManager : D_MonoSingleton } } else - { + { network = "Organic"; } @@ -160,6 +166,8 @@ public class AdjustManager : D_MonoSingleton { "adgroup", adgroup ?? "" }, { "creative", creative ?? "" }, }); + + RushSDKManager.Instance.OnUserSourceListener?.Invoke(IsOrganic(network), network); } diff --git a/Assets/Script/SDKManager/AdjustManager/AdjustNetwork.cs b/Assets/Script/SDKManager/AdjustManager/AdjustNetwork.cs index d2d7130..ff9e633 100644 --- a/Assets/Script/SDKManager/AdjustManager/AdjustNetwork.cs +++ b/Assets/Script/SDKManager/AdjustManager/AdjustNetwork.cs @@ -29,10 +29,14 @@ public class AdjustNetwork : D_MonoSingleton } } + public static string GetNetwork() + { + return PlayerPrefs.GetString(KEY_USER_NETWORK); + } /// /// 是否是自然量用户 - /// 默认买量用户 + /// 默认自然量用户 /// /// public bool InOrganic() @@ -42,7 +46,7 @@ public class AdjustNetwork : D_MonoSingleton { return true; } - + if (network.ToLower().Replace(" ", "") == "Organic".ToLower().Replace(" ", "")) { return true; diff --git a/Assets/Script/SDKManager/RushSDKManager.cs b/Assets/Script/SDKManager/RushSDKManager.cs index bf881f6..5fdd404 100644 --- a/Assets/Script/SDKManager/RushSDKManager.cs +++ b/Assets/Script/SDKManager/RushSDKManager.cs @@ -30,7 +30,23 @@ public class RushSDKManager : D_MonoSingleton AdsSDKManager.Instance.InitSDK(action); EFSdkManager.Instance.Init(); } + + #region 买量用户回调 + public Action OnUserSourceListener; + + /// Adjust归因回调 + /// + /// 是否为买量用户 + /// adjust 返回的network字段 + /// + public void SetUserSourceListener(Action _action) + { + OnUserSourceListener = _action; + } + + #endregion + #region ad @@ -49,15 +65,15 @@ public class RushSDKManager : D_MonoSingleton /// public bool IsRewardedAdReady() { - return AdsSDKManager.Instance.IsRewardAdReady();; - } - + return AdsSDKManager.Instance.IsRewardAdReady(); ; + } + /// /// 展示激励广告 /// /// /// - public void ShowRewardAd(string position, Action callback = null) + public void ShowRewardAd(string position, Action callback = null) { AdsActionEvents.TrackAdPosition(AdsType.Rewarded, position); bool isRewardAdReady = AdsSDKManager.Instance.IsRewardAdReady(); @@ -83,8 +99,8 @@ public class RushSDKManager : D_MonoSingleton callback?.Invoke(false, 0); } } - - + + /// /// 是否已缓存插屏 @@ -93,7 +109,7 @@ public class RushSDKManager : D_MonoSingleton { return AdsSDKManager.Instance.IsInterstitialReady(); } - + /// /// 展示插屏广告 /// @@ -122,7 +138,7 @@ public class RushSDKManager : D_MonoSingleton }); } else - { + { AdsActionEvents.TrackAdFailToShow(AdsType.Interstitial, position, AdsShowFailType.NoFill); callback?.Invoke(-1); } @@ -143,7 +159,7 @@ public class RushSDKManager : D_MonoSingleton }); } else - { + { AdsActionEvents.TrackAdFailToShow(AdsType.Interstitial, position, AdsShowFailType.NoFill); callback?.Invoke(-1); } @@ -154,7 +170,7 @@ public class RushSDKManager : D_MonoSingleton callback?.Invoke(-1); } } - + public void ShowBanner() { AdsActionEvents.TrackAdPosition(AdsType.Banner, ""); @@ -163,12 +179,12 @@ public class RushSDKManager : D_MonoSingleton AdsSDKManager.Instance.ShowBanner(); } else - { + { AdsActionEvents.TrackAdFailToShow(AdsType.Banner, "", AdsShowFailType.NoFill); } - + } - + public void HideBanner() { AdsSDKManager.Instance.HideBanner(); @@ -179,7 +195,7 @@ public class RushSDKManager : D_MonoSingleton var adUnitId = StaticValue.AdmobFullNativeId; return AdsSDKManager.Instance.IsNativeAdReady(adUnitId); } - + public void ShowFullNative(RectTransform rectTransform, Camera pCom = null, string position = "") { AdsActionEvents.TrackAdPosition(AdsType.Native, position); @@ -188,18 +204,18 @@ public class RushSDKManager : D_MonoSingleton AdsActionEvents.TrackAdFailToShow(AdsType.Native, position, AdsShowFailType.NoFill); return; } - + var adUnitId = StaticValue.AdmobFullNativeId; var nativeAdPosition = NativeAdPosition.Create(new NativeTemplateStyle { TemplateId = NativeTemplateId.Medium, MainBackgroundColor = Color.white }, rectTransform, pCom); - + AdsSDKManager.Instance.ShowNativeAd(position, adUnitId, nativeAdPosition); } - - + + /// /// 获取全屏Native广告价值 /// @@ -234,14 +250,14 @@ public class RushSDKManager : D_MonoSingleton AdsActionEvents.TrackAdFailToShow(AdsType.Native, position, AdsShowFailType.NoFill); return; } - + var adUnitId = StaticValue.AdmobNativeId; var nativeAdPosition = NativeAdPosition.Create(new NativeTemplateStyle { TemplateId = NativeTemplateId.Small, MainBackgroundColor = Color.white }, rectTransform, pCom); - + AdsSDKManager.Instance.ShowNativeAd(position, adUnitId, nativeAdPosition); } @@ -250,7 +266,7 @@ public class RushSDKManager : D_MonoSingleton var adUnitId = StaticValue.AdmobNativeId; AdsSDKManager.Instance.RemoveNativeAd(adUnitId); } - + public bool IsSmallNativeReady() { var adUnitId = StaticValue.AdmobSmallNativeId; @@ -265,14 +281,14 @@ public class RushSDKManager : D_MonoSingleton AdsActionEvents.TrackAdFailToShow(AdsType.Native, position, AdsShowFailType.NoFill); return; } - + var adUnitId = StaticValue.AdmobSmallNativeId; var nativeAdPosition = NativeAdPosition.Create(new NativeTemplateStyle { TemplateId = NativeTemplateId.Small, MainBackgroundColor = Color.white }, rectTransform, pCom); - + AdsSDKManager.Instance.ShowNativeAd(position, adUnitId, nativeAdPosition); } @@ -281,7 +297,7 @@ public class RushSDKManager : D_MonoSingleton var adUnitId = StaticValue.AdmobSmallNativeId; AdsSDKManager.Instance.RemoveNativeAd(adUnitId); } - + public bool IsMinddleNativeReady() { var adUnitId = StaticValue.AdmobMinddleNativeId; @@ -296,14 +312,14 @@ public class RushSDKManager : D_MonoSingleton AdsActionEvents.TrackAdFailToShow(AdsType.Native, position, AdsShowFailType.NoFill); return; } - + var adUnitId = StaticValue.AdmobMinddleNativeId; var nativeAdPosition = NativeAdPosition.Create(new NativeTemplateStyle { TemplateId = NativeTemplateId.Small, MainBackgroundColor = Color.white }, rectTransform, pCom); - + AdsSDKManager.Instance.ShowNativeAd(position, adUnitId, nativeAdPosition); } @@ -332,7 +348,7 @@ public class RushSDKManager : D_MonoSingleton { [key1] = value1 }); - + } public void LogEvent(string eventName, Dictionary extraInfo) @@ -341,7 +357,7 @@ public class RushSDKManager : D_MonoSingleton FireBaseAnalyticsManager.Instance.LogEvent(eventName, extraInfo); AdjustTrackEvent.Instance.TrackEventName(eventName, extraInfo); } - + /// /// 公共事件属性 /// @@ -351,7 +367,7 @@ public class RushSDKManager : D_MonoSingleton ShuShuEvent.Instance.SetSuperProperties(args); FireBaseAnalyticsManager.Instance.SetSuperProperties(args); } - + /// /// 用户属性 /// @@ -363,7 +379,7 @@ public class RushSDKManager : D_MonoSingleton } #endregion - + #region 在线参数 public bool GetRemoteConfigBool(string key, bool defaultValue = false) @@ -374,7 +390,7 @@ public class RushSDKManager : D_MonoSingleton } return FireBaseRemoteConfigManager.Instance.GetRemoteConfigBool(key, defaultValue); } - + public int GetRemoteConfigInt(string key, int defaultValue = 0) { if (Application.isEditor) @@ -383,7 +399,7 @@ public class RushSDKManager : D_MonoSingleton } return FireBaseRemoteConfigManager.Instance.GetRemoteConfigInt(key, defaultValue); } - + public string GetRemoteConfigStr(string key, string defaultValue = "") { if (Application.isEditor) @@ -392,7 +408,7 @@ public class RushSDKManager : D_MonoSingleton } return FireBaseRemoteConfigManager.Instance.GetRemoteConfigString(key, defaultValue); } - + public float GetRemoteConfigFloat(string key, float defaultValue = 0) { if (Application.isEditor) @@ -455,7 +471,7 @@ public class RushSDKManager : D_MonoSingleton public void CanGoback(Action canGobackAction) { - EFSdk.get().CanGoback(canGobackAction); + EFSdk.get().CanGoback(canGobackAction); } /// @@ -476,8 +492,8 @@ public class RushSDKManager : D_MonoSingleton } }); } - - + + /// /// 设置推送开关, SDK默认关闭通知 /// @@ -588,7 +604,7 @@ public class RushSDKManager : D_MonoSingleton } int pageId = EFSdk.get().GetJumpPage(); return pageId; - + } /// @@ -614,7 +630,7 @@ public class RushSDKManager : D_MonoSingleton return; } // 如果没有通知权限就尝试申请通知权限 - if(!HasNotifyPermission()) + if (!HasNotifyPermission()) { EFSdk.get().ReqNotifyPermission(isgGranted => { @@ -654,7 +670,7 @@ public class RushSDKManager : D_MonoSingleton } EFSdk.get().UnSubscribeUnclaimed01(); } - + /// // 满足条件: 在排队中 且 当日R$1 未领取 的买量用户, 调用这个方法 /// @@ -703,7 +719,7 @@ public class RushSDKManager : D_MonoSingleton } EFSdk.get().UnSubscribeToTopic(topic); } - + /// /// 可覆盖广告的Toast /// @@ -722,9 +738,9 @@ public class RushSDKManager : D_MonoSingleton /// public void AutoLocalPush(bool isOpen) { - + } - + /// /// Webview展示成功后回调 /// @@ -733,7 +749,7 @@ public class RushSDKManager : D_MonoSingleton { EFSdkManager.Instance.SetWebviewShowSuccessAction(action); } - + #endregion /// @@ -745,7 +761,7 @@ public class RushSDKManager : D_MonoSingleton return AdjustNetwork.Instance.InOrganic(); } - public string GetGaid() + public string GetGaid() { if (Application.isEditor) { @@ -829,7 +845,7 @@ public class RushSDKManager : D_MonoSingleton { return "GetSSDistinctId"; } - LoggerUtils.Debug("GetSSDistinctId:"+TDAnalytics.GetDistinctId()); + LoggerUtils.Debug("GetSSDistinctId:" + TDAnalytics.GetDistinctId()); return TDAnalytics.GetDistinctId(); } @@ -844,4 +860,9 @@ public class RushSDKManager : D_MonoSingleton LoggerUtils.Debug("GetSSDistinctId:" + JsonMapper.ToJson(superProperties)); return superProperties == null ? "" : superProperties.ToString(); } + + public void OpenPrivacy() + { + Application.OpenURL(StaticValue.PrivacyUrl); + } } From 3549e7719386bcc73894cd902dfdf4bb4910f242 Mon Sep 17 00:00:00 2001 From: juncong lee Date: Mon, 15 Sep 2025 18:41:43 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E7=94=9F=E6=88=90RequestId=EF=BC=8C?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E6=AC=A1=E6=95=B0=EF=BC=8C=E6=AF=8F=E4=B8=AA?= =?UTF-8?q?unit=E8=AF=B7=E6=B1=82=E6=AC=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Data/KwaiAdsConfigParser.cs | 2 +- .../KwaiAdsManager/KwaiFloorIvManager.cs | 77 ++++++++++++++++++- .../KwaiAdsManager/KwaiFloorRvManager.cs | 75 +++++++++++++++++- Assets/Script/Test.cs | 5 ++ 4 files changed, 152 insertions(+), 7 deletions(-) diff --git a/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/Data/KwaiAdsConfigParser.cs b/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/Data/KwaiAdsConfigParser.cs index 816d094..1a9641c 100644 --- a/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/Data/KwaiAdsConfigParser.cs +++ b/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/Data/KwaiAdsConfigParser.cs @@ -107,7 +107,7 @@ namespace WZ { public string id; public string unite_id; - public int price; + public float price; } [System.Serializable] diff --git a/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorIvManager.cs b/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorIvManager.cs index 4ddd5a2..5e266ee 100644 --- a/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorIvManager.cs +++ b/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorIvManager.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Linq; using GoogleMobileAds.Common; using JetBrains.Annotations; +using KwaiAds.Scripts.Api; using KwaiAds.Scripts.Api.Interstitial; using KwaiAds.Scripts.Api.Reward; using UnityEngine; @@ -21,8 +22,11 @@ namespace WZ private bool _isRequestingFloors = false; private List _currentRequestBatch = new List(); private FloorConfig _successfulFloor = null; - public float _ivStartLoadTime = 0; + private int _waterfallRequestCount = 0; // waterfall请求次数 + private Dictionary _uniteIdRequestCounts = new Dictionary(); // 每个unite_id的请求次数 + private string _currentRequestId; // 当前waterfall请求的ID + public void InitializeWithFloors() { @@ -52,6 +56,9 @@ namespace WZ _successfulFloor = null; _isRequestingFloors = true; + // 增加waterfall请求计数 + _waterfallRequestCount++; + // 清理之前的广告控制器 foreach (var controller in _ivFloorAdControllers.Values) { @@ -97,10 +104,24 @@ namespace WZ private void RequestFloorAd(FloorConfig floor) { - IInterstitialAdController controller = KwaiAds.Scripts.Api.KwaiAdsSdk.SDK.getInterstitialAdController();; + // 更新unite_id请求计数 + if (!_uniteIdRequestCounts.ContainsKey(floor.unite_id)) + { + _uniteIdRequestCounts[floor.unite_id] = 0; + } + _uniteIdRequestCounts[floor.unite_id]++; + + // 获取当前楼层在排序列表中的位置 + int floorIndex = GetFloorIndex(floor.id); + _currentRequestId = GenerateRequestId(); + LoggerUtils.Debug($"[kwai] floor inter Requesting floor {floor.id} (index: {floorIndex}), unite_id {floor.unite_id} has been requested {_uniteIdRequestCounts[floor.unite_id]} times, request id: {_currentRequestId}"); + + IInterstitialAdController controller = KwaiAds.Scripts.Api.KwaiAdsSdk.SDK.getInterstitialAdController(); ; _ivFloorAdControllers[floor.id] = controller; KwaiInterstitialAdRequest kwaiInterstitialAdRequest = new KwaiInterstitialAdRequest(floor.unite_id); + kwaiInterstitialAdRequest.ExtParams[Constants.Request.BID_FLOOR_PRICE] = floor.price.ToString(); + controller.Load(kwaiInterstitialAdRequest, new FloorInterAdListener(this, floor), new FloorInterAdLoadListener(this, floor)); @@ -111,7 +132,10 @@ namespace WZ { if (!_isRequestingFloors || _successfulFloor != null) return; - LoggerUtils.Debug($"[kwai] floor inter Floor ad loaded: {floor.id} with price: {floor.price}"); + // 获取当前楼层在排序列表中的位置 + int floorIndex = GetFloorIndex(floor.id); + LoggerUtils.Debug($"[kwai] floor reward Floor ad loaded: {floor.id} (index: {floorIndex}) with price: {floor.price}, unite_id {floor.unite_id} has been requested {_uniteIdRequestCounts[floor.unite_id]} times"); + // 暂停其他并行请求 _successfulFloor = floor; @@ -177,6 +201,53 @@ namespace WZ _action?.Invoke(); } } + + /// + /// 获取当前waterfall请求次数 + /// + public int GetWaterfallRequestCount() + { + return _waterfallRequestCount; + } + + /// + /// 获取当前waterfall请求次数 + /// + public int GetUniteIdRequestCount(string unitId) + { + return _uniteIdRequestCounts.TryGetValue(unitId, out var time) ? time : 0; + } + + /// + /// 根据floor.id获取其在排序后的楼层列表中的索引位置 + /// + public int GetFloorIndex(string floorId) + { + for (int i = 0; i < _sortedFloors.Count; i++) + { + if (_sortedFloors[i].id == floorId) + { + return i; + } + } + return -1; // 未找到 + } + + /// + /// 获取当前Request ID + /// + public string GetCurrentRequestId() + { + return _currentRequestId; + } + + /// + /// 生成唯一的Request ID + /// + private string GenerateRequestId() + { + return Guid.NewGuid().ToString("N"); + } } } diff --git a/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorRvManager.cs b/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorRvManager.cs index 338750b..c72dfcc 100644 --- a/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorRvManager.cs +++ b/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorRvManager.cs @@ -3,6 +3,7 @@ using System.Collections; using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; +using KwaiAds.Scripts.Api; using KwaiAds.Scripts.Api.Reward; using UnityEngine; using static WZ.KwaiAdsConfigParser; @@ -19,8 +20,10 @@ namespace WZ private bool _isRequestingFloors = false; private List _currentRequestBatch = new List(); private FloorConfig _successfulFloor = null; - public float _rvStartLoadTime = 0; + private int _waterfallRequestCount = 0; // waterfall请求次数 + private Dictionary _uniteIdRequestCounts = new Dictionary(); // 每个unite_id的请求次数 + private string _currentRequestId; // 当前waterfall请求的ID public void InitializeWithFloors() { @@ -52,6 +55,9 @@ namespace WZ _successfulFloor = null; _isRequestingFloors = true; + + // 增加waterfall请求计数 + _waterfallRequestCount++; // 清理之前的广告控制器 foreach (var controller in _rvFloorAdControllers.Values) { @@ -97,10 +103,24 @@ namespace WZ private void RequestFloorAd(FloorConfig floor) { + // 更新unite_id请求计数 + if (!_uniteIdRequestCounts.ContainsKey(floor.unite_id)) + { + _uniteIdRequestCounts[floor.unite_id] = 0; + } + _uniteIdRequestCounts[floor.unite_id]++; + + // 获取当前楼层在排序列表中的位置 + int floorIndex = GetFloorIndex(floor.id); + _currentRequestId = GenerateRequestId(); + LoggerUtils.Debug($"[kwai] floor reward Requesting floor {floor.id} (index: {floorIndex}), unite_id {floor.unite_id} has been requested {_uniteIdRequestCounts[floor.unite_id]} times, request id: {_currentRequestId}"); + IRewardAdController controller = KwaiAds.Scripts.Api.KwaiAdsSdk.SDK.getRewardAdController(); _rvFloorAdControllers[floor.id] = controller; KwaiRewardAdRequest kwaiRewardAdRequest = new KwaiRewardAdRequest(floor.unite_id); + kwaiRewardAdRequest.ExtParams[Constants.Request.BID_FLOOR_PRICE] = floor.price.ToString(); + controller.Load(kwaiRewardAdRequest, new FloorRewardAdListener(this, floor), new FloorRewardAdLoadListener(this, floor)); @@ -111,7 +131,9 @@ namespace WZ { if (!_isRequestingFloors || _successfulFloor != null) return; - LoggerUtils.Debug($"[kwai] floor reward ad loaded: {floor.id} with price: {floor.price}"); + // 获取当前楼层在排序列表中的位置 + int floorIndex = GetFloorIndex(floor.id); + LoggerUtils.Debug($"[kwai] floor reward Floor ad loaded: {floor.id} (index: {floorIndex}) with price: {floor.price}, unite_id {floor.unite_id} has been requested {_uniteIdRequestCounts[floor.unite_id]} times"); // 暂停其他并行请求 _successfulFloor = floor; @@ -165,7 +187,7 @@ namespace WZ } public void ShowRewarded(Action _action) - { + { if (_successfulFloor != null && _rvFloorAdControllers.ContainsKey(_successfulFloor.id) && _rvFloorAdControllers[_successfulFloor.id] != null) @@ -177,6 +199,53 @@ namespace WZ _action?.Invoke(); } } + + /// + /// 获取当前waterfall请求次数 + /// + public int GetWaterfallRequestCount() + { + return _waterfallRequestCount; + } + + /// + /// 获取当前waterfall请求次数 + /// + public int GetUniteIdRequestCount(string unitId) + { + return _uniteIdRequestCounts.TryGetValue(unitId, out var time) ? time : 0; + } + + /// + /// 根据floor.id获取其在排序后的楼层列表中的索引位置 + /// + public int GetFloorIndex(string floorId) + { + for (int i = 0; i < _sortedFloors.Count; i++) + { + if (_sortedFloors[i].id == floorId) + { + return i; + } + } + return -1; // 未找到 + } + + /// + /// 获取当前Request ID + /// + public string GetCurrentRequestId() + { + return _currentRequestId; + } + + /// + /// 生成唯一的Request ID + /// + private string GenerateRequestId() + { + return Guid.NewGuid().ToString("N"); + } } } diff --git a/Assets/Script/Test.cs b/Assets/Script/Test.cs index cf17a3d..2499730 100644 --- a/Assets/Script/Test.cs +++ b/Assets/Script/Test.cs @@ -17,7 +17,12 @@ public class Test : MonoBehaviour { small = gameObject.transform.Find("NativeAd-small").GetComponent(); medium = gameObject.transform.Find("NativeAd-medium").GetComponent(); + RushSDKManager.Instance.SetUserSourceListener((bool success, string source) => + { + LoggerUtils.Debug("adjust callback: "+success+" adnetwork:"+source); + }); RushSDKManager.Instance.InitializeSdk(null, true); + } public void OnShowAd() From 08be1d5f2f51875d5783fcd5d367e50069de8df0 Mon Sep 17 00:00:00 2001 From: juncong lee Date: Mon, 15 Sep 2025 19:06:55 +0800 Subject: [PATCH 3/4] =?UTF-8?q?kwai=E5=B9=BF=E5=91=8A=E8=A1=8C=E4=B8=BA?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E4=B8=8A=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Events/AdsEvents/AdsActionEvents.cs | 2 +- .../KwaiAdsManager/KwaiFloorIvManager.cs | 39 ++++++++++++++----- .../KwaiAdsManager/KwaiFloorRvManager.cs | 38 +++++++++++++----- .../Inter/Floor/FloorInterAdLoadListener.cs | 2 +- .../Reward/Floor/FloorRewardAdLoadListener.cs | 2 +- 5 files changed, 61 insertions(+), 22 deletions(-) diff --git a/Assets/Script/SDKManager/AdsSDKManager/Events/AdsEvents/AdsActionEvents.cs b/Assets/Script/SDKManager/AdsSDKManager/Events/AdsEvents/AdsActionEvents.cs index 1816c57..7633f1d 100644 --- a/Assets/Script/SDKManager/AdsSDKManager/Events/AdsEvents/AdsActionEvents.cs +++ b/Assets/Script/SDKManager/AdsSDKManager/Events/AdsEvents/AdsActionEvents.cs @@ -44,7 +44,7 @@ namespace WZ } public static void TrackKwiWaterfallFill(AdsType adsType, string requestId, string unitId, - float floorPrice, int waterfallRequestNumber, int unitRequestNumber, int floorNumber,float value) + float floorPrice, int waterfallRequestNumber, int unitRequestNumber, int floorNumber,double value) { var eventName = "kwai_waterfall_fill"; var dic = new Dictionary { diff --git a/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorIvManager.cs b/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorIvManager.cs index 5e266ee..ceaee85 100644 --- a/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorIvManager.cs +++ b/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorIvManager.cs @@ -24,7 +24,7 @@ namespace WZ private FloorConfig _successfulFloor = null; public float _ivStartLoadTime = 0; private int _waterfallRequestCount = 0; // waterfall请求次数 - private Dictionary _uniteIdRequestCounts = new Dictionary(); // 每个unite_id的请求次数 + private Dictionary _unitIdRequestCounts = new Dictionary(); // 每个unite_id的请求次数 private string _currentRequestId; // 当前waterfall请求的ID @@ -55,6 +55,7 @@ namespace WZ _currentFloorIndex = 0; _successfulFloor = null; _isRequestingFloors = true; + _currentRequestId = GenerateRequestId(); // 增加waterfall请求计数 _waterfallRequestCount++; @@ -100,21 +101,24 @@ namespace WZ { RequestFloorAd(floor); } + AdsActionEvents.TrackKwaiWaterfallRequest(AdsType.Interstitial, + _currentRequestId, + _waterfallRequestCount, + _ivParallelRequests); } private void RequestFloorAd(FloorConfig floor) { // 更新unite_id请求计数 - if (!_uniteIdRequestCounts.ContainsKey(floor.unite_id)) + if (!_unitIdRequestCounts.ContainsKey(floor.unite_id)) { - _uniteIdRequestCounts[floor.unite_id] = 0; + _unitIdRequestCounts[floor.unite_id] = 0; } - _uniteIdRequestCounts[floor.unite_id]++; + _unitIdRequestCounts[floor.unite_id]++; // 获取当前楼层在排序列表中的位置 int floorIndex = GetFloorIndex(floor.id); - _currentRequestId = GenerateRequestId(); - LoggerUtils.Debug($"[kwai] floor inter Requesting floor {floor.id} (index: {floorIndex}), unite_id {floor.unite_id} has been requested {_uniteIdRequestCounts[floor.unite_id]} times, request id: {_currentRequestId}"); + LoggerUtils.Debug($"[kwai] floor inter Requesting floor {floor.id} (index: {floorIndex}), unite_id {floor.unite_id} has been requested {_unitIdRequestCounts[floor.unite_id]} times, request id: {GetUniteIdRequestCount(floor.unite_id)}"); IInterstitialAdController controller = KwaiAds.Scripts.Api.KwaiAdsSdk.SDK.getInterstitialAdController(); ; _ivFloorAdControllers[floor.id] = controller; @@ -125,16 +129,25 @@ namespace WZ controller.Load(kwaiInterstitialAdRequest, new FloorInterAdListener(this, floor), new FloorInterAdLoadListener(this, floor)); + + AdsActionEvents.TrackKwaiAdunitRequest(AdsType.Interstitial, + _currentRequestId, + floor.unite_id, + floor.price, + GetWaterfallRequestCount(), + GetUniteIdRequestCount(floor.unite_id), + floorIndex); + } // 处理楼层广告加载成功 - public void OnFloorAdLoaded(FloorConfig floor, IInterstitialAdController controller) + public void OnFloorAdLoaded(FloorConfig floor, IInterstitialAdController controller,double revenue) { if (!_isRequestingFloors || _successfulFloor != null) return; // 获取当前楼层在排序列表中的位置 int floorIndex = GetFloorIndex(floor.id); - LoggerUtils.Debug($"[kwai] floor reward Floor ad loaded: {floor.id} (index: {floorIndex}) with price: {floor.price}, unite_id {floor.unite_id} has been requested {_uniteIdRequestCounts[floor.unite_id]} times"); + LoggerUtils.Debug($"[kwai] floor inter ad loaded: {floor.id} (index: {floorIndex}) with price: {floor.price}, unite_id {floor.unite_id} has been requested {GetUniteIdRequestCount(floor.unite_id)} times, revenue: {revenue}, request id: {_currentRequestId}"); // 暂停其他并行请求 @@ -149,6 +162,14 @@ namespace WZ kvp.Value.Destroy(); } } + AdsActionEvents.TrackKwiWaterfallFill(AdsType.Interstitial, + _currentRequestId, + floor.unite_id, + floor.price, + GetWaterfallRequestCount(), + GetUniteIdRequestCount(floor.unite_id), + floorIndex, + revenue); } // 处理楼层广告加载失败 @@ -215,7 +236,7 @@ namespace WZ /// public int GetUniteIdRequestCount(string unitId) { - return _uniteIdRequestCounts.TryGetValue(unitId, out var time) ? time : 0; + return _unitIdRequestCounts.TryGetValue(unitId, out var time) ? time : 0; } /// diff --git a/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorRvManager.cs b/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorRvManager.cs index c72dfcc..1f58ce2 100644 --- a/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorRvManager.cs +++ b/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorRvManager.cs @@ -22,7 +22,7 @@ namespace WZ private FloorConfig _successfulFloor = null; public float _rvStartLoadTime = 0; private int _waterfallRequestCount = 0; // waterfall请求次数 - private Dictionary _uniteIdRequestCounts = new Dictionary(); // 每个unite_id的请求次数 + private Dictionary _unitIdRequestCounts = new Dictionary(); // 每个unite_id的请求次数 private string _currentRequestId; // 当前waterfall请求的ID public void InitializeWithFloors() @@ -54,7 +54,7 @@ namespace WZ _currentFloorIndex = 0; _successfulFloor = null; _isRequestingFloors = true; - + _currentRequestId = GenerateRequestId(); // 增加waterfall请求计数 _waterfallRequestCount++; @@ -67,6 +67,8 @@ namespace WZ // 开始请求楼层广告 RequestNextFloorBatch(); + + AdsActionEvents.TrackKwaiWaterfallRequest(AdsType.Rewarded, _currentRequestId, _waterfallRequestCount, _rvParallelRequests); } private void RequestNextFloorBatch() @@ -104,16 +106,16 @@ namespace WZ private void RequestFloorAd(FloorConfig floor) { // 更新unite_id请求计数 - if (!_uniteIdRequestCounts.ContainsKey(floor.unite_id)) + if (!_unitIdRequestCounts.ContainsKey(floor.unite_id)) { - _uniteIdRequestCounts[floor.unite_id] = 0; + _unitIdRequestCounts[floor.unite_id] = 0; } - _uniteIdRequestCounts[floor.unite_id]++; + _unitIdRequestCounts[floor.unite_id]++; // 获取当前楼层在排序列表中的位置 int floorIndex = GetFloorIndex(floor.id); - _currentRequestId = GenerateRequestId(); - LoggerUtils.Debug($"[kwai] floor reward Requesting floor {floor.id} (index: {floorIndex}), unite_id {floor.unite_id} has been requested {_uniteIdRequestCounts[floor.unite_id]} times, request id: {_currentRequestId}"); + + LoggerUtils.Debug($"[kwai] floor reward Requesting floor {floor.id} (index: {floorIndex}), unite_id {floor.unite_id} has been requested {GetUniteIdRequestCount(floor.unite_id)} times, request id: {_currentRequestId}"); IRewardAdController controller = KwaiAds.Scripts.Api.KwaiAdsSdk.SDK.getRewardAdController(); _rvFloorAdControllers[floor.id] = controller; @@ -124,16 +126,24 @@ namespace WZ controller.Load(kwaiRewardAdRequest, new FloorRewardAdListener(this, floor), new FloorRewardAdLoadListener(this, floor)); + + AdsActionEvents.TrackKwaiAdunitRequest(AdsType.Rewarded, + _currentRequestId, + floor.unite_id, + floor.price, + GetWaterfallRequestCount(), + GetUniteIdRequestCount(floor.unite_id), + floorIndex); } // 处理楼层广告加载成功 - public void OnFloorAdLoaded(FloorConfig floor, IRewardAdController controller) + public void OnFloorAdLoaded(FloorConfig floor, IRewardAdController controller,double revenue) { if (!_isRequestingFloors || _successfulFloor != null) return; // 获取当前楼层在排序列表中的位置 int floorIndex = GetFloorIndex(floor.id); - LoggerUtils.Debug($"[kwai] floor reward Floor ad loaded: {floor.id} (index: {floorIndex}) with price: {floor.price}, unite_id {floor.unite_id} has been requested {_uniteIdRequestCounts[floor.unite_id]} times"); + LoggerUtils.Debug($"[kwai] floor reward Floor ad loaded: {floor.id} (index: {floorIndex}) with floor price: {floor.price}, unite_id {floor.unite_id} has been requested {GetUniteIdRequestCount(floor.unite_id)} times, revenue:{revenue}"); // 暂停其他并行请求 _successfulFloor = floor; @@ -147,6 +157,14 @@ namespace WZ kvp.Value.Destroy(); } } + AdsActionEvents.TrackKwiWaterfallFill(AdsType.Rewarded, + _currentRequestId, + floor.unite_id, + floor.price, + GetWaterfallRequestCount(), + GetUniteIdRequestCount(floor.unite_id), + floorIndex, + revenue); } // 处理楼层广告加载失败 @@ -213,7 +231,7 @@ namespace WZ /// public int GetUniteIdRequestCount(string unitId) { - return _uniteIdRequestCounts.TryGetValue(unitId, out var time) ? time : 0; + return _unitIdRequestCounts.TryGetValue(unitId, out var time) ? time : 0; } /// diff --git a/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/Listener/Inter/Floor/FloorInterAdLoadListener.cs b/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/Listener/Inter/Floor/FloorInterAdLoadListener.cs index a96d193..a5300f1 100644 --- a/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/Listener/Inter/Floor/FloorInterAdLoadListener.cs +++ b/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/Listener/Inter/Floor/FloorInterAdLoadListener.cs @@ -43,7 +43,7 @@ namespace WZ trackId, AdsType.Interstitial, Time.realtimeSinceStartup - KwaiFloorIvManager.Instance._ivStartLoadTime); - _manager.OnFloorAdLoaded(_floor, _manager._ivFloorAdControllers[_floor.id]); + _manager.OnFloorAdLoaded(_floor, _manager._ivFloorAdControllers[_floor.id],KwaiAdsManager.Instance._interstitiaAdRevenue); LoggerUtils.Debug("[kwai] floor inter ad load success: "+trackId+" with price: "+price); } } diff --git a/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/Listener/Reward/Floor/FloorRewardAdLoadListener.cs b/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/Listener/Reward/Floor/FloorRewardAdLoadListener.cs index 6ee24ee..347bb1e 100644 --- a/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/Listener/Reward/Floor/FloorRewardAdLoadListener.cs +++ b/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/Listener/Reward/Floor/FloorRewardAdLoadListener.cs @@ -41,7 +41,7 @@ namespace WZ trackId, AdsType.Rewarded, Time.realtimeSinceStartup - KwaiFloorRvManager.Instance._rvStartLoadTime); - _manager.OnFloorAdLoaded(_floor, _manager._rvFloorAdControllers[_floor.id]); + _manager.OnFloorAdLoaded(_floor, _manager._rvFloorAdControllers[_floor.id], KwaiAdsManager.Instance._rewardAdRevenue); LoggerUtils.Debug("[kwai] floor reward ad load success: "+trackId+" with price: "+price); } } From 3ed6641e3d57ecb640622f6f6b0cd6b394476a61 Mon Sep 17 00:00:00 2001 From: juncong lee Date: Mon, 15 Sep 2025 19:10:29 +0800 Subject: [PATCH 4/4] no message --- .../AdsSDKManager/KwaiAdsManager/KwaiFloorIvManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorIvManager.cs b/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorIvManager.cs index ceaee85..7e2a5c3 100644 --- a/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorIvManager.cs +++ b/Assets/Script/SDKManager/AdsSDKManager/KwaiAdsManager/KwaiFloorIvManager.cs @@ -24,7 +24,7 @@ namespace WZ private FloorConfig _successfulFloor = null; public float _ivStartLoadTime = 0; private int _waterfallRequestCount = 0; // waterfall请求次数 - private Dictionary _unitIdRequestCounts = new Dictionary(); // 每个unite_id的请求次数 + private Dictionary _unitIdRequestCounts = new Dictionary(); // 每个unit_id的请求次数 private string _currentRequestId; // 当前waterfall请求的ID