SDK_UnityMoney/Assets/Script/SDKManager/AdsSDKManager/Utils/BidPlatformManager.cs

139 lines
4.7 KiB
C#
Raw Normal View History

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
2025-09-01 10:32:50 +00:00
namespace WZ
{
[Serializable]
public class AdTypeBidState
{
public AdsType AdType;
public DateTime LastBidSuccessTime;
public AdTypeBidState(AdsType adType)
{
AdType = adType;
LastBidSuccessTime = DateTime.MinValue;
}
public bool IsBidExpired(int expireInSec)
{
// 如果功能关闭,则不视为过期
if (expireInSec == -1) return false;
// 如果从未成功竞价过,则视为过期
// if (LastBidSuccessTime == DateTime.MinValue) return true;
// 检查是否超过过期时间
TimeSpan timeSinceLastBid = DateTime.Now - LastBidSuccessTime;
return timeSinceLastBid.TotalSeconds > expireInSec;
}
}
[Serializable]
public class BidPlatformState
{
public PlatformType PlatformName;
public bool IsEnabled = true;
// 每种广告类型的竞价状态
public Dictionary<AdsType, AdTypeBidState> AdTypeStates = new Dictionary<AdsType, AdTypeBidState>();
public BidPlatformState(PlatformType platformName)
{
PlatformName = platformName;
// 初始化所有广告类型的状态
foreach (AdsType adType in Enum.GetValues(typeof(AdsType)))
{
AdTypeStates.Add(adType, new AdTypeBidState(adType));
}
}
// 记录特定广告类型的竞价成功
public void RecordBidSuccess(AdsType adType)
{
if (AdTypeStates.TryGetValue(adType, out var state))
{
state.LastBidSuccessTime = DateTime.Now;
Debug.Log($"{PlatformName} 平台 {adType} 广告竞价成功,记录时间: {state.LastBidSuccessTime}");
}
}
// 检查特定广告类型的竞价是否过期
public bool IsBidExpired(AdsType adType, int expireInSec)
{
if (!IsEnabled || expireInSec == -1) return false;
if (AdTypeStates.TryGetValue(adType, out var state))
{
return state.IsBidExpired(expireInSec);
}
return false;
}
// 获取所有过期的广告类型
public List<AdsType> GetExpiredAdTypes(int expireInSec)
{
List<AdsType> expiredAdTypes = new List<AdsType>();
if (!IsEnabled || expireInSec == -1) return expiredAdTypes;
foreach (var kvp in AdTypeStates)
{
if (kvp.Value.IsBidExpired(expireInSec))
{
expiredAdTypes.Add(kvp.Key);
}
}
return expiredAdTypes;
}
}
2025-09-02 09:14:49 +00:00
public class BidPlatformManager : D_MonoSingleton<BidPlatformManager>
{
private Dictionary<PlatformType, BidPlatformState> _platformStates = new Dictionary<PlatformType, BidPlatformState>();
private int _bidExpireInSec = -1;
public void InitializePlatformStates(int expireInSec)
{
_bidExpireInSec = expireInSec;
_platformStates.Clear();
_platformStates.Add(PlatformType.Admob, new BidPlatformState(PlatformType.Admob));
2025-08-31 12:48:14 +00:00
_platformStates.Add(PlatformType.Topon, new BidPlatformState(PlatformType.Topon));
_platformStates.Add(PlatformType.AppLovin, new BidPlatformState(PlatformType.AppLovin));
_platformStates.Add(PlatformType.Bigo, new BidPlatformState(PlatformType.Bigo));
_platformStates.Add(PlatformType.Kwai, new BidPlatformState(PlatformType.Kwai));
}
// 记录平台竞价成功
public void RecordBidSuccess(PlatformType platformName, AdsType adType)
{
if (_platformStates.TryGetValue(platformName, out var state))
{
state.RecordBidSuccess(adType);
}
}
// 获取所有过期平台
public Dictionary<PlatformType, List<AdsType>> GetExpiredBids()
{
Dictionary<PlatformType, List<AdsType>> expiredBids = new Dictionary<PlatformType, List<AdsType>>();
if (_bidExpireInSec == -1) return expiredBids;
foreach (var kvp in _platformStates)
{
List<AdsType> expiredAdTypes = kvp.Value.GetExpiredAdTypes(_bidExpireInSec);
if (expiredAdTypes.Count > 0)
{
expiredBids.Add(kvp.Key, expiredAdTypes);
}
}
return expiredBids;
}
}
}