SDK买量关键事件上报 ad_number/ad_fill_number

This commit is contained in:
juncong lee 2025-08-31 22:18:31 +08:00
parent 38de453a88
commit 3e91855d79
17 changed files with 237 additions and 12 deletions

View File

@ -2,6 +2,7 @@
using Firebase.RemoteConfig;
using Newtonsoft.Json;
using Script.Common;
using Script.SDKManager.AdsSDKManager.Events.AdsEvents;
using Script.Utils;
public class AdjustTrackEvent : NormalSingleton<AdjustTrackEvent>
@ -15,7 +16,7 @@ public class AdjustTrackEvent : NormalSingleton<AdjustTrackEvent>
AdjustEvent adjustEvent = new AdjustEvent(trackEvent);
Adjust.TrackEvent(adjustEvent);
}
/// <summary>
/// 广告收益上报
/// </summary>

View File

@ -368,7 +368,7 @@ namespace Script.SDKManager.AdsSDKManager.AdmobAdsManager
FireBaseAnalyticsManager.Instance.OnAdRevenueEvent(PlatformType.Admob.ToString(),
loadedAdapterResponseInfo.AdSourceName,
placement, type.ToString(),
placement, type,
adValue.Value / 1000000f,
type == AdsType.Rewarded ? _rvPos : "",
AdPlayCountManager.GetAdPlayCount(type));
@ -382,6 +382,13 @@ namespace Script.SDKManager.AdsSDKManager.AdmobAdsManager
}
#endregion
#region 广
public void TrackAdAction(AdapterResponseInfo loadedAdapterResponseInfo, double revenue, AdsType type, string placement)
{
}
#endregion
}
}

View File

@ -49,6 +49,7 @@ namespace Script.SDKManager.AdsSDKManager.AdmobAdsManager
_adRevenueCache[adUnitId] = AdmobUtils.GetBannerEcpm(bannerAds);
LoggerUtils.Debug($"[Admob] banner -[Load]: {adUnitId} successfully");
onAdLoaded?.Invoke(adUnitId);
AdsKeyEvents.Instance.LogAdFPUEvents(AdsType.Banner);
};
bannerAds.OnBannerAdLoadFailed += ((msg) =>
@ -76,7 +77,7 @@ namespace Script.SDKManager.AdsSDKManager.AdmobAdsManager
bannerAds.OnAdClicked += () =>
{
// AdsActionEvents.TrackAdClicked();
// AdsActionEvents.TrackAdClicked(PlatformType.Admob,);
onAdClicked?.Invoke();
};
LoadAd(adUnitId);

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using GoogleMobileAds.Api;
using Script.SDKManager.AdsSDKManager.AdmobAdsManager.Utils;
using Script.SDKManager.AdsSDKManager.Constant;
using Script.SDKManager.AdsSDKManager.Events.AdsEvents;
using Script.Utils;
namespace Script.SDKManager.AdsSDKManager.AdmobAdsManager
@ -53,6 +54,7 @@ namespace Script.SDKManager.AdsSDKManager.AdmobAdsManager
LoggerUtils.Debug("Admob Interstitial ad loaded with response : " + ad.GetResponseInfo().ToString());
_interstitialAds[adUnitId] = ad;
_adRevenueCache[adUnitId] = AdmobUtils.GetInterstitialAdEcpm(ad);
AdsKeyEvents.Instance.LogAdFPUEvents(AdsType.Interstitial);
onAdLoaded?.Invoke(adUnitId);
ad.OnAdPaid += (AdValue adValue) =>

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using GoogleMobileAds.Api;
using Script.SDKManager.AdsSDKManager.AdmobAdsManager.Utils;
using Script.SDKManager.AdsSDKManager.Constant;
using Script.SDKManager.AdsSDKManager.Events.AdsEvents;
using Script.Utils;
@ -54,6 +55,7 @@ namespace Script.SDKManager.AdsSDKManager.AdmobAdsManager
LoggerUtils.Debug("[Admob] rewarded ad loaded with response : " + ad.GetResponseInfo().ToString());
_rewardedAds[adUnitId] = ad;
_adRevenueCache[adUnitId] = AdmobUtils.GetRewardedAdEcpm(ad);
AdsKeyEvents.Instance.LogAdFPUEvents(AdsType.Rewarded);
onAdLoaded?.Invoke(adUnitId);
ad.OnAdPaid += (AdValue adValue) =>

View File

@ -4,6 +4,7 @@ using System.Collections.Generic;
using GoogleMobileAds.Api;
using Script.SDKManager.AdsSDKManager.AdmobAdsManager.Utils;
using Script.SDKManager.AdsSDKManager.Constant;
using Script.SDKManager.AdsSDKManager.Events.AdsEvents;
using Script.Utils;
using UnityEngine;
@ -55,6 +56,7 @@ namespace Script.SDKManager.AdsSDKManager.AdmobAdsManager
LoggerUtils.Debug("[Admob] appopen ad loaded with response : " + ad.GetResponseInfo().ToString());
_appOpenAds[adUnitId] = ad;
_adRevenueCache[adUnitId] = AdmobUtils.GetAppOpenAdEcpm(ad);
AdsKeyEvents.Instance.LogAdFPUEvents(AdsType.Splash);
onAdLoaded?.Invoke(adUnitId);
ad.OnAdPaid += (AdValue adValue) =>

View File

@ -234,7 +234,7 @@ namespace Script.SDKManager.AdsSDKManager.BigoAdsManager
FireBaseAnalyticsManager.Instance.OnAdRevenueEvent(ClientName,
ClientName,
placement,
type.ToString(),
type,
revenue, type == AdsType.Rewarded ? _rvPos : "",
AdPlayCountManager.GetAdPlayCount(type));

View File

@ -3,6 +3,7 @@ using System.Collections;
using System.Collections.Generic;
using BigoAds.Scripts.Api;
using Script.SDKManager.AdsSDKManager.Constant;
using Script.SDKManager.AdsSDKManager.Events.AdsEvents;
using Script.SDKManager.AdsSDKManager.Utils;
using Script.Utils;
using UnityEngine;
@ -53,6 +54,7 @@ namespace Script.SDKManager.AdsSDKManager.BigoAdsManager
_retryCounters[adUnitId] = 0;
_adRevenueCache[adUnitId] = GetAdRevenue(interstitialAd);
LoggerUtils.Debug($"[Bigo] Interstitial -[Load]: {adUnitId} successfully");
AdsKeyEvents.Instance.LogAdFPUEvents(AdsType.Interstitial);
onAdLoaded?.Invoke(adUnitId);
};

View File

@ -3,6 +3,7 @@ using System.Collections;
using System.Collections.Generic;
using BigoAds.Scripts.Api;
using Script.SDKManager.AdsSDKManager.Constant;
using Script.SDKManager.AdsSDKManager.Events.AdsEvents;
using Script.Utils;
using UnityEngine;
@ -52,6 +53,7 @@ namespace Script.SDKManager.AdsSDKManager.BigoAdsManager
_retryCounters[adUnitId] = 0;
_adRevenueCache[adUnitId] = GetAdRevenue(rewardedAd);
LoggerUtils.Debug($"[Bigo] Rewarded-[Load]: {adUnitId} successfully");
AdsKeyEvents.Instance.LogAdFPUEvents(AdsType.Rewarded);
onAdLoaded?.Invoke(adUnitId);
};

View File

@ -0,0 +1,147 @@
using System.Collections;
using System.Collections.Generic;
using Firebase.Analytics;
using Newtonsoft.Json;
using Script.SDKManager.AdsSDKManager.Constant;
using Script.SDKManager.AdsSDKManager.Utils;
using Script.Utils;
using Unity.VisualScripting.Antlr3.Runtime;
using UnityEngine;
namespace Script.SDKManager.AdsSDKManager.Events.AdsEvents
{
public class AdsKeyEvents : NormalSingleton<AdsKeyEvents>
{
private List<AdCountData> _adCountData = new List<AdCountData>();
private List<AdFPUData> _adFPUData = new List<AdFPUData>();
private List<AdTotalRevenurData> _adTotalRevenueData = new List<AdTotalRevenurData>();
public void InitData()
{
var countData = FireBaseRemoteConfigManager.Instance.GetRemoteConfigString("ad_number");
var fpuData = FireBaseRemoteConfigManager.Instance.GetRemoteConfigString("ad_fill_number");
var totalRevenueData = FireBaseRemoteConfigManager.Instance.GetRemoteConfigString("ad_revenue_count");
LoggerUtils.Debug("[keyevents] 获取在线参数countData" + countData + " fpuData" + fpuData + " totalRevenueData" + totalRevenueData);
try
{
_adCountData = JsonConvert.DeserializeObject<List<AdCountData>>(countData);
_adFPUData = JsonConvert.DeserializeObject<List<AdFPUData>>(fpuData);
_adTotalRevenueData = JsonConvert.DeserializeObject<List<AdTotalRevenurData>>(totalRevenueData);
}
catch
{
}
}
#region AdCount
public void LogAdCountEvents(AdsType adType, double ecpm)
{
if (_adCountData == null || _adCountData.Count == 0) return;
foreach (var item in _adCountData)
{
// 本地存储 key
var storeName = "ad_number_" + item.Name;
// 包含当前广告类型
LoggerUtils.Debug("[keyevents] adcount 当前广告类型:" + adType + " 在线参数数组:" + JsonConvert.SerializeObject(item.AdType, Formatting.Indented) + " 在线参数ecpm:" + item.ECPM + " 当前广告ecpm" + ecpm * 1000 + " name:" + item.Name);
if (item.AdType.Contains((int)adType))
{
if (item.ECPM == 0 || ecpm * 1000 >= item.ECPM)
{
LogEventByCount(storeName, item.IPU, storeName, item.adjust_token);
}
}
}
}
private void LogEventByCount(string m_key, int m_ipu, string m_eventName, string m_token)
{
AdPlayCountManager.IncrementKeyEventPlayCount(m_key);
var showCounts = AdPlayCountManager.GetKeyEventPlayCount(m_key);
LoggerUtils.Debug("[keyevents] adcount count:" + showCounts + " ipu:" + m_ipu + " eventName:" + m_key);
if (showCounts >= m_ipu)
{
// 未上报过
if (PlayerPrefsUtils.IfFirstCheckPlayerPrefs(m_key))
{
AdjustTrackEvent.Instance.TrackEvent(m_token);
FireBaseAnalyticsManager.Instance.LogEvent(m_key);
ShuShuEvent.Instance.Track(m_key);
LoggerUtils.Debug("[keyevents] adcount key:" + m_key + " ipu" + m_ipu + " eventName:" + m_eventName + " token:" + m_token);
}
}
}
#endregion
#region FPU
public void LogAdFPUEvents(AdsType adType)
{
if (_adFPUData == null || _adFPUData.Count == 0) return;
foreach (var item in _adFPUData)
{
// 本地存储 key
var storeName = "FPU_" + item.Name;
// 包含当前广告类型
LoggerUtils.Debug("[keyevents] adcount 当前广告类型:" + adType + " 在线参数数组:" + JsonConvert.SerializeObject(item.AdType, Formatting.Indented) + " FPU:" + item.FPU + " 当前广告ecpm" + " name:" + item.Name);
if (item.AdType.Contains((int)adType))
{
LogEventByFPU(storeName, item.FPU, storeName, item.adjust_token);
}
}
}
private void LogEventByFPU(string m_key, int m_fpu, string m_eventName, string m_token)
{
AdPlayCountManager.IncrementKeyEventPlayCount(m_key);
var showCounts = AdPlayCountManager.GetKeyEventPlayCount(m_key);
LoggerUtils.Debug("[keyevents] adcount count:" + showCounts + " fpu:" + m_fpu + " eventName:" + m_key);
if (showCounts >= m_fpu)
{
// 未上报过
if (PlayerPrefsUtils.IfFirstCheckPlayerPrefs(m_key))
{
AdjustTrackEvent.Instance.TrackEvent(m_token);
FireBaseAnalyticsManager.Instance.LogEvent(m_key);
ShuShuEvent.Instance.Track(m_key);
LoggerUtils.Debug("[keyevents] adcount key:" + m_key + " fpu" + m_fpu + " eventName:" + m_eventName + " token:" + m_token);
}
}
}
}
#endregion
[System.Serializable]
public class AdCountData
{
public string Name;
public int IPU;
public float ECPM;
public List<int> AdType;
public string adjust_token;
}
[System.Serializable]
public class AdFPUData
{
public string Name;
public int FPU;
public List<int> AdType;
public string adjust_token;
}
[System.Serializable]
public class AdTotalRevenurData
{
public string Name;
public string Revenue;
public int reset_after_trigger;
public List<int> AdType;
public string adjust_token;
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: d9c7ae999fc264fa6ad5106900a2b381

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: bba9020c00e7b494b80ed377282b6760
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -5,6 +5,7 @@ using System.Net.Security;
using Firebase.Analytics;
using Script.Common;
using Script.SDKManager.AdsSDKManager.Constant;
using Script.SDKManager.AdsSDKManager.Events.AdsEvents;
using Script.SDKManager.AdsSDKManager.Utils;
using Script.Utils;
using UnityEngine;
@ -104,6 +105,7 @@ namespace Script.SDKManager.AdsSDKManager.MaxAdsManager
private void OnRewardedAdLoadedEvent(string adunit, MaxSdkBase.AdInfo adInfo)
{
LoggerUtils.Debug("[Max] OnRewardedAdLoadedEvent network: " + adInfo.NetworkName + " revenue: " + adInfo.Revenue + " NetworkPlacement: " + adInfo.NetworkPlacement + " AdUnitIdentifier: " + adInfo.AdUnitIdentifier + " Placement: " + adInfo.Placement);
AdsKeyEvents.Instance.LogAdFPUEvents(AdsType.Rewarded);
_rewardAdInfo = adInfo;
_rewardRetryAttempt = 0;
}
@ -187,7 +189,7 @@ namespace Script.SDKManager.AdsSDKManager.MaxAdsManager
private void OnInterstitialLoadedEvent(string adunit, MaxSdkBase.AdInfo adInfo)
{
LoggerUtils.Debug("[Max] OnInterstitialLoadedEvent network: " + adInfo.NetworkName + " revenue: " + adInfo.Revenue + " NetworkPlacement: " + adInfo.NetworkPlacement + " AdUnitIdentifier: " + adInfo.AdUnitIdentifier + " Placement: " + adInfo.Placement);
AdsKeyEvents.Instance.LogAdFPUEvents(AdsType.Interstitial);
_interAdInfo = adInfo;
_interRetryAttempt = 0;
}
@ -266,7 +268,7 @@ namespace Script.SDKManager.AdsSDKManager.MaxAdsManager
FireBaseAnalyticsManager.Instance.OnAdRevenueEvent(ClientName,
adInfo.NetworkName,
adInfo.AdUnitIdentifier,
type.ToString(),
type,
adInfo.Revenue,
type == AdsType.Rewarded ? _rvPos : "",
AdPlayCountManager.GetAdPlayCount(type));

View File

@ -6,6 +6,7 @@ using AnyThinkAds.Api;
using AnyThinkAds.ThirdParty.LitJson;
using Script.Common;
using Script.SDKManager.AdsSDKManager.Constant;
using Script.SDKManager.AdsSDKManager.Events.AdsEvents;
using Script.SDKManager.AdsSDKManager.Utils;
using Script.Utils;
using SDKManager.AdsSDKManager.Utils;
@ -109,10 +110,12 @@ namespace Script.SDKManager.AdsSDKManager.TpnAdsManager
if (erg.placementId.Equals(topon_interstitial_units))
{
LoggerUtils.Debug("[Tpn] ads tpn topon interstitial loaded");
AdsKeyEvents.Instance.LogAdFPUEvents(AdsType.Interstitial);
}
else if (erg.placementId.Equals(topon_rewarded_units))
{
LoggerUtils.Debug("[Tpn] ads tpn topon rewarded loaded");
AdsKeyEvents.Instance.LogAdFPUEvents(AdsType.Rewarded);
}
}
@ -232,7 +235,7 @@ namespace Script.SDKManager.AdsSDKManager.TpnAdsManager
FireBaseAnalyticsManager.Instance.OnAdRevenueEvent(ClientName,
ClientName + "_" + erg.callbackInfo.network_firm_id,
erg.callbackInfo.adunit_id,
erg.placementId.Equals(topon_rewarded_units) ? AdsType.Rewarded.ToString() : AdsType.Interstitial.ToString(),
erg.placementId.Equals(topon_rewarded_units) ? AdsType.Rewarded : AdsType.Interstitial,
erg.callbackInfo.publisher_revenue,
erg.placementId.Equals(topon_rewarded_units) ? _rvPos : "",
AdPlayCountManager.GetAdPlayCount(erg.placementId.Equals(topon_rewarded_units) ? AdsType.Rewarded : AdsType.Interstitial));

View File

@ -11,6 +11,39 @@ namespace Script.SDKManager.AdsSDKManager.Utils
{
private const string PLAY_COUNT_SUFFIX = "_PLAY_COUNT";
// 关键事件数据
public static int GetKeyEventPlayCount(string key)
{
try
{
return PlayerPrefsUtils.GetPlayerPrefsInt(key, 0);
}
catch (Exception ex)
{
return 0;
}
}
public static void SetKeyEventPlayCount(string key, int count)
{
try
{
PlayerPrefsUtils.SavePlayerPrefsInt(key, count);
}
catch (Exception ex)
{
LoggerUtils.Error($"设置广告播放次数失败: {ex.Message}");
}
}
public static void IncrementKeyEventPlayCount(string key)
{
int currentCount = GetKeyEventPlayCount(key);
SetKeyEventPlayCount(key, currentCount + 1);
}
public static int GetAdPlayCount(AdsType adsType)
{
try

View File

@ -2,6 +2,8 @@
using Firebase.Analytics;
using Newtonsoft.Json;
using Script.Common;
using Script.SDKManager.AdsSDKManager.Constant;
using Script.SDKManager.AdsSDKManager.Events.AdsEvents;
using Script.Utils;
/// <summary>
@ -48,8 +50,8 @@ public class FireBaseAnalyticsManager : NormalSingleton<FireBaseAnalyticsManager
{
Firebase.Analytics.FirebaseAnalytics.SetUserProperty(name, property);
}
/// <summary>
/// FireBase收益上报
/// </summary>
@ -60,21 +62,22 @@ public class FireBaseAnalyticsManager : NormalSingleton<FireBaseAnalyticsManager
/// <param name="revenue">单次展示收益</param>
/// <param name="position">广告展示点位</param>
/// <param name="number">第几次展示该格式的广告</param>
public void OnAdRevenueEvent(string ad_platform, string ad_source, string ad_unit_name, string ad_format, double revenue, string position, int number)
public void OnAdRevenueEvent(string ad_platform, string ad_source, string ad_unit_name, AdsType ad_format, double revenue, string position, int number)
{
var impressionParameters = new[] {
new Firebase.Analytics.Parameter("ad_platform", ad_platform),
new Firebase.Analytics.Parameter("ad_source", ad_source),
new Firebase.Analytics.Parameter("ad_unit_name",ad_unit_name),
new Firebase.Analytics.Parameter("ad_format", ad_format),
new Firebase.Analytics.Parameter("ad_format", ad_format.ToString()),
new Firebase.Analytics.Parameter("value", revenue),
new Firebase.Analytics.Parameter("currency", "USD"), // All AppLovin revenue is sent in USD
new Firebase.Analytics.Parameter("position", position),
new Firebase.Analytics.Parameter("position", position),
new Firebase.Analytics.Parameter("number", number),
};
string name = GetName();
Firebase.Analytics.FirebaseAnalytics.LogEvent(name, impressionParameters);
AdsKeyEvents.Instance.LogAdCountEvents(ad_format, revenue);
}
/// <summary>

View File

@ -42,5 +42,13 @@ namespace Script.Utils
PlayerPrefs.SetString(string.Format("{0}{1}", BXSdk_PREFIX, _key), _nValue);
PlayerPrefs.Save();
}
public static bool IfFirstCheckPlayerPrefs(string _key)
{
var isFirstClick = PlayerPrefs.GetInt(_key, 0) == 0;
PlayerPrefs.SetInt(_key, 1);
PlayerPrefs.Save();
return isFirstClick;
}
}
}