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 { // 是否有激励视频或者插屏广告在展示 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(); } /// /// 展示激励广告 /// /// public void ShowRewardAd(string _adPos, Action _rewardCallback, Action _showFailedCallback,PlatformType _platformType) { LoggerUtils.Debug("ShowRewardAd _adPos:"+_adPos+" ready:"+IsRewardAdReady(_platformType)); otherAdsOnShow = true; AdPlayCountManager.IncrementAdsActionCount(AdsType.Rewarded,AdPlayCountManager.PLAY_COUNT_SUFFIX); AdjustTrackEvent.Instance.TrackEventName("RV_Show", new Dictionary()); 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(); } /// /// 展示激励广告 /// /// public void ShowInterstitialAd(string _adPos, IvType _IvType, Action _closeCallback,PlatformType _platformType) { AdsSDKManager.Instance.otherAdsOnShow = true; AdPlayCountManager.IncrementAdsActionCount(AdsType.Interstitial,AdPlayCountManager.PLAY_COUNT_SUFFIX); AdjustTrackEvent.Instance.TrackEventName("IV_Show", new Dictionary()); 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); AdjustTrackEvent.Instance.TrackEventName("Banner_Show", new Dictionary()); 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) { AdmobAdsManager.Instance.DisplayNative(_adPos, adUnitId, position); AdjustTrackEvent.Instance.TrackEventName("NA_Show", new Dictionary()); AdPlayCountManager.IncrementAdsActionCount(AdsType.Native,AdPlayCountManager.PLAY_COUNT_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(); } public void ShowSplashAd() { AdjustTrackEvent.Instance.TrackEventName("SP_Show", new Dictionary()); AdPlayCountManager.IncrementAdsActionCount(AdsType.Splash,AdPlayCountManager.PLAY_COUNT_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("IV_RULES"); if (string.IsNullOrEmpty(json)) { LoggerUtils.Debug("[SDK] 获取远程配置IV_RULES是空 没有限制"); return true; } //2.解析配置 var dates = JsonConvert.DeserializeObject(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; } /// /// 看激励广告之后调用 /// public void ClearIvRules() { var localTimestamp = TimeUtils.GetLocalTimestamp(); foreach (var key in IvRulesConst.Intervals.Keys.ToList()) { IvRulesConst.Intervals[key] = localTimestamp; } } #endregion } }