269 lines
10 KiB
C#
269 lines
10 KiB
C#
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using Firebase.RemoteConfig;
|
||
using Newtonsoft.Json;
|
||
using UnityEngine;
|
||
|
||
namespace WZ
|
||
{
|
||
public class AdsSDKManager : D_MonoSingleton<AdsSDKManager>
|
||
{
|
||
// 是否有激励视频或者插屏广告在展示
|
||
public bool otherAdsOnShow = false;
|
||
public void InitSDK()
|
||
{
|
||
LoggerUtils.Debug("init ads sdk");
|
||
}
|
||
|
||
|
||
#region 激励视频广告
|
||
public bool IsRewardAdReady(PlatformType _platformType)
|
||
{
|
||
if(_platformType == PlatformType.Admob)
|
||
{
|
||
return AdmobAdsManager.Instance.IsRewardedAvailable();
|
||
}
|
||
return TpnAdsManager.Instance.IsRewardedAvailable();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 展示激励广告
|
||
/// </summary>
|
||
/// <param name="callback"></param>
|
||
public void ShowRewardAd(string _adPos, Action<bool, double> _rewardCallback, Action _showFailedCallback,PlatformType _platformType)
|
||
{
|
||
LoggerUtils.Debug("ShowRewardAd _adPos:"+_adPos+" ready:"+IsRewardAdReady(_platformType));
|
||
otherAdsOnShow = true;
|
||
AdPlayCountManager.IncrementAdsActionCount(AdsType.Rewarded,AdPlayCountManager.PLAY_COUNT_SUFFIX);
|
||
AdPlayCountManager.IncrementAdsActionCount(AdsType.Rewarded,_adPos+AdPlayCountManager.POS_SUFFIX);
|
||
|
||
AdjustTrackEvent.Instance.TrackEventName("RV_Show", new Dictionary<string, object>());
|
||
if(_platformType == PlatformType.Admob)
|
||
{
|
||
AdmobAdsManager.Instance.DisplayRewarded(_adPos,_rewardCallback,_showFailedCallback);
|
||
}
|
||
else
|
||
{
|
||
TpnAdsManager.Instance.DisplayRewarded(_adPos,_rewardCallback,_showFailedCallback);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 插屏广告
|
||
public bool IsInterstitialReady(PlatformType _platformType)
|
||
{
|
||
if(_platformType == PlatformType.Admob)
|
||
{
|
||
return AdmobAdsManager.Instance.IsInterstitialAvailable();
|
||
}
|
||
return TpnAdsManager.Instance.IsInterstitialAvailable();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 展示激励广告
|
||
/// </summary>
|
||
/// <param name="callback"></param>
|
||
public void ShowInterstitialAd(string _adPos, IvType _IvType, Action<double> _closeCallback,PlatformType _platformType)
|
||
{
|
||
AdsSDKManager.Instance.otherAdsOnShow = true;
|
||
AdPlayCountManager.IncrementAdsActionCount(AdsType.Interstitial,AdPlayCountManager.PLAY_COUNT_SUFFIX);
|
||
AdPlayCountManager.IncrementAdsActionCount(AdsType.Interstitial,_adPos+AdPlayCountManager.POS_SUFFIX);
|
||
AdjustTrackEvent.Instance.TrackEventName("IV_Show", new Dictionary<string, object>());
|
||
|
||
if(_platformType == PlatformType.Admob)
|
||
{
|
||
AdmobAdsManager.Instance.DisplayInterstitial(_adPos, _IvType, _closeCallback);
|
||
}
|
||
else
|
||
{
|
||
TpnAdsManager.Instance.DisplayInterstitial(_adPos, _IvType, _closeCallback);
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region 横幅广告
|
||
public bool IsBannerAdReady(BannerType bannerType,PlatformType platformType)
|
||
{
|
||
if(platformType == PlatformType.Admob)
|
||
{
|
||
return AdmobAdsManager.Instance.IsBannerAvailable(bannerType);
|
||
}else
|
||
{
|
||
return TpnAdsManager.Instance.IsBannerAvailable();
|
||
}
|
||
|
||
}
|
||
|
||
public void ShowBanner(BannerType bannerType,BannerAlignType bannerAlignType,PlatformType platformType)
|
||
{
|
||
|
||
AdPlayCountManager.IncrementAdsActionCount(AdsType.Banner,AdPlayCountManager.PLAY_COUNT_SUFFIX);
|
||
AdPlayCountManager.IncrementAdsActionCount(AdsType.Rewarded, "Banner"+AdPlayCountManager.POS_SUFFIX);
|
||
AdjustTrackEvent.Instance.TrackEventName("Banner_Show", new Dictionary<string, object>());
|
||
if (platformType == PlatformType.Admob)
|
||
{
|
||
AdmobAdsManager.Instance.DisplayBanner(bannerType,bannerAlignType);
|
||
}else
|
||
{
|
||
TpnAdsManager.Instance.ShowBanner();
|
||
}
|
||
}
|
||
|
||
public void HideBanner(BannerType bannerType)
|
||
{
|
||
AdmobAdsManager.Instance.HideBanner(bannerType);
|
||
TpnAdsManager.Instance.HideBanner();
|
||
}
|
||
#endregion
|
||
|
||
|
||
#region 原生广告
|
||
public bool IsNativeAdReady(string adUnitId)
|
||
{
|
||
return AdmobAdsManager.Instance.IsNativeAvailable(adUnitId);
|
||
}
|
||
|
||
public void ShowNativeAd(string _adPos, string adUnitId, NativeAdPosition position,NativeType nativeType)
|
||
{
|
||
AdmobAdsManager.Instance.DisplayNative(_adPos, adUnitId, position, nativeType);
|
||
AdjustTrackEvent.Instance.TrackEventName("NA_Show", new Dictionary<string, object>());
|
||
AdPlayCountManager.IncrementAdsActionCount(AdsType.Native,AdPlayCountManager.PLAY_COUNT_SUFFIX);
|
||
AdPlayCountManager.IncrementAdsActionCount(AdsType.Native,_adPos+AdPlayCountManager.POS_SUFFIX);
|
||
}
|
||
|
||
public void RemoveNativeAd(string adUnitId)
|
||
{
|
||
AdmobAdsManager.Instance.RemoveNative(adUnitId);
|
||
}
|
||
|
||
public double GetNativeAdRevenue(string adUnitId)
|
||
{
|
||
if (!IsNativeAdReady(adUnitId))
|
||
{
|
||
return -1;
|
||
}
|
||
return AdmobAdsManager.Instance.GetNativeRevenue(adUnitId);
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region 开屏广告
|
||
public bool IsSplashAvailable()
|
||
{
|
||
return AdmobAdsManager.Instance.IsSplashAvailable() && TransferAndroidClass.IsVpnConnected();
|
||
}
|
||
|
||
public void ShowSplashAd()
|
||
{
|
||
AdjustTrackEvent.Instance.TrackEventName("SP_Show", new Dictionary<string, object>());
|
||
AdPlayCountManager.IncrementAdsActionCount(AdsType.Splash,AdPlayCountManager.PLAY_COUNT_SUFFIX);
|
||
AdPlayCountManager.IncrementAdsActionCount(AdsType.Splash,"Splash"+AdPlayCountManager.POS_SUFFIX);
|
||
AdmobAdsManager.Instance.DisplaySplash();
|
||
}
|
||
|
||
public void LoadSplashAd()
|
||
{
|
||
AdmobAdsManager.Instance.LoadSplash();
|
||
}
|
||
#endregion
|
||
|
||
|
||
|
||
#region IvRules
|
||
|
||
public bool IvRulesShow(IvType ivadType, bool isShow = true)
|
||
{
|
||
//1.获取远程配置
|
||
string json = FireBaseRemoteConfigManager.Instance.GetRemoteConfigString("AD_Game");
|
||
if (string.IsNullOrEmpty(json))
|
||
{
|
||
LoggerUtils.Debug("[SDK] 获取远程配置IV_RULES是空 没有限制");
|
||
return true;
|
||
}
|
||
//2.解析配置
|
||
var dates = JsonConvert.DeserializeObject<IvRulesData[]>(json);
|
||
if (dates == null && dates.Length == 0)
|
||
{
|
||
LoggerUtils.Debug("[SDK] 获取远程配置信息是空");
|
||
return true;
|
||
}
|
||
//3.获取IVADType对应的配置
|
||
IvRulesData ivRulesData = null;
|
||
foreach (var data in dates)
|
||
{
|
||
if (data.type == (int)ivadType)
|
||
{
|
||
ivRulesData = data;
|
||
}
|
||
}
|
||
if (ivRulesData == null)
|
||
{
|
||
LoggerUtils.Debug("[SDK] 远程配置没有配置对应的IvType");
|
||
return true;
|
||
}
|
||
//4.判断skip(次安装跳过几次触发不展示广告)
|
||
int skipLevel = ivRulesData.skipLevel;
|
||
int currentSkipLevel = PlayerPrefsUtils.GetPlayerPrefsInt($"{IvRulesKey.KEY_SKIPLEVEL}_{ivadType.ToString()}", 0);
|
||
LoggerUtils.Debug($"[SDK] {ivadType.ToString()} 前N次不展示插屏, 本地次数是{currentSkipLevel + 1}, 远程参数是{skipLevel}");
|
||
if (currentSkipLevel < skipLevel)
|
||
{
|
||
if (isShow)
|
||
{
|
||
PlayerPrefsUtils.SavePlayerPrefsInt($"{IvRulesKey.KEY_SKIPLEVEL}_{ivadType.ToString()}", currentSkipLevel + 1);
|
||
}
|
||
return false;
|
||
}
|
||
//5.判断overLevel(每跳过几次触发) 第一次会展示 之后每展示一次间隔+1
|
||
int overLevel = ivRulesData.overLevel;
|
||
int currentOverLevel = IvRulesConst.OverLevels.ContainsKey(ivadType.ToString()) ? IvRulesConst.OverLevels[ivadType.ToString()] : 0;
|
||
LoggerUtils.Debug($"[SDK] {ivadType.ToString()} 当前间隔次数: 本地次数是{currentOverLevel + 1}, 远程参数是{overLevel}");
|
||
if (currentOverLevel != 0)
|
||
{
|
||
if (isShow)
|
||
{
|
||
if (currentOverLevel >= overLevel)
|
||
{
|
||
IvRulesConst.OverLevels[ivadType.ToString()] = 0;
|
||
}
|
||
else
|
||
{
|
||
IvRulesConst.OverLevels[ivadType.ToString()] += 1;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
//6.判断interval(广告时间间隔)
|
||
int interval = ivRulesData.interval;
|
||
long currentInterval = IvRulesConst.Intervals.ContainsKey(ivadType.ToString()) ? IvRulesConst.Intervals[ivadType.ToString()] : 0;
|
||
long localTimestamp = TimeUtils.GetLocalTimestamp();
|
||
LoggerUtils.Debug($"[SDK] {ivadType.ToString()} 远程参数是: {interval}, CanShowFlag: {localTimestamp > (currentInterval + (interval * 1000L))}");
|
||
if (localTimestamp < currentInterval + (interval * 1000L))
|
||
{
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 看激励广告之后调用
|
||
/// </summary>
|
||
public void ClearIvRules()
|
||
{
|
||
var localTimestamp = TimeUtils.GetLocalTimestamp();
|
||
foreach (var key in IvRulesConst.Intervals.Keys.ToList())
|
||
{
|
||
IvRulesConst.Intervals[key] = localTimestamp;
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
|
||
}
|
||
} |