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

263 lines
9.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
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);
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);
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)
{
AdmobAdsManager.Instance.DisplayNative(_adPos, adUnitId, position);
AdjustTrackEvent.Instance.TrackEventName("NA_Show", new Dictionary<string, object>());
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<string, object>());
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<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
}
}