mergemilitary/Assets/TKGSDK/UnitySDK/Scripts/ADSScripts/ToukaSDK/ToukaAdManager.cs

788 lines
26 KiB
C#
Raw Normal View History

2022-05-23 13:39:59 +00:00
using System;
using System.Collections;
using UnityEngine;
using System.Collections.Generic;
using Touka.GameLogic;
namespace Touka
{
public partial class ToukaAdManager : ToukaSingletonMonoBehaviour<ToukaAdManager>
{
/// <summary>
/// 标明当前界面是否可以显示banner
///
/// banner load成功如果当前可显示banner就会直接显示出来
/// </summary>
public static bool isCurrCanShowBanner = true;
#region Consts
private const int RETRY_TIMES_COUNT = 3; // 广告重试次数
#endregion
private int m_bannerRetryTimes = RETRY_TIMES_COUNT; // bnner重试次数
private int m_intersRetryTimes = RETRY_TIMES_COUNT; // 插屏重试次数
private int m_videoRetryTimes = RETRY_TIMES_COUNT; // 激励视频重试次数
private int m_nativeRetryTimes = RETRY_TIMES_COUNT; // native重试次数
private bool m_noAds = false; // 是否有广告 true:没广告(除激励视频外) false:有广告 - 用于购买去广告后
private bool m_initialized = false;
public float NativeWidth = 0f; // native 宽
public float NativeHeight = 0f; // native 高
private IToukaAdInterface toukaAds;
private Action<bool> mFocusGameAction = null;
/// <summary>
/// init
/// </summary>
public void Init()
{
if (StaticOtherConfig.IsDebugLog)
{
Debug.unityLogger.logEnabled = true;
}
else
{
Debug.unityLogger.logEnabled = false;
}
if (m_initialized) return;
m_initialized = true;
#if UNITY_EDITOR
return;
#endif
m_noAds = ToukaUtils.GetPlayerPrefsIntByKey(StaticStringsPlayerPrefs.HasRemoveAds) != 0;
NativeWidth = float.Parse(ToukaUtils.GetPlayerPrefsStringByKey(StaticStringsPlayerPrefs.NativeWidthSaved, "0"));
NativeHeight = float.Parse(ToukaUtils.GetPlayerPrefsStringByKey(StaticStringsPlayerPrefs.NativeHeightSaved, "0"));
toukaAds = ToukaSDKAdapter.Instance;
// 初始化广告id设置listener
toukaAds.Init();
Debug.Log("[ToukaAdManager] before loadads.");
StartCoroutine(LoadAds());
}
/// <summary>
/// load ads
/// </summary>
/// <returns></returns>
IEnumerator LoadAds()
{
Debug.Log("[ToukaAdManager] IEnumerator LoadAds.");
if (StaticStringsKey.BannerSwitch)
{
Debug.Log("[ToukaAdManager] 初始化banner");
LoadBanner();
yield return new WaitForSeconds(2);
}
if (StaticStringsKey.RewardSwitch)
{
Debug.Log("[ToukaAdManager] 初始化激励视频");
LoadVideo();
yield return new WaitForSeconds(2);
}
if (StaticStringsKey.InterSwitch)
{
Debug.Log("[ToukaAdManager] 初始化插屏");
LoadInterstitial();
yield return new WaitForSeconds(2);
}
if (StaticStringsKey.NativeSwitch)
{
Debug.Log("[ToukaAdManager] 初始化native");
LoadNative();
}
}
/// <summary>
/// refresh remove ads
/// </summary>
public void RefreshVIPStatus()
{
m_noAds = ToukaUtils.GetPlayerPrefsIntByKey(StaticStringsPlayerPrefs.HasRemoveAds) != 0;
if (m_noAds)
{
HideBanner(true);
}
Debug.Log("[ToukaAdManager] 购买去广告成功告诉SDK不再显示开屏");
}
#region banner
/// <summary>
/// show banner
/// </summary>
public void ShowBanner()
{
#if UNITY_EDITOR
return;
#endif
if (!StaticStringsKey.BannerSwitch)
{
return;
}
Debug.Log("in ToukaAdManager, ShowBanner.");
if (m_noAds)
{
Debug.Log("Touka: VIP don't show banner");
toukaAds.RemoveBanner(true);
return;
}
if (!isCurrCanShowBanner)
{
Debug.Log("Touka: this view cannot show banner");
return;
}
Debug.Log("Touka: Show banner real ");
toukaAds.ShowBanner();
}
/// <summary>
/// force reload banner
/// </summary>
public void ForceReloadBanner()
{
Debug.Log("Touka: ForceReloadBanner");
if (!StaticStringsKey.BannerSwitch)
{
return;
}
LoadBanner();
}
/// <summary>
/// Hides the banner.
/// </summary>
/// <param name="_clean">true:remove false:hide</param>
public void HideBanner(bool _clean)
{
#if UNITY_EDITOR
return;
#endif
Debug.Log("in ToukaAdManager, HideBanner, _clean:" + _clean);
if (!StaticStringsKey.BannerSwitch)
{
return;
}
toukaAds.RemoveBanner(_clean);
}
/// <summary>
/// isReady Banner
/// </summary>
public bool IsReadyBanner
{
get
{
#if UNITY_EDITOR
return true;
#endif
return toukaAds.IsReadyBanner();
}
}
#endregion
#region Interstitial
/// <summary>
/// show iv
/// </summary>
/// <param name="callback"></param>
/// <param name="_interId"></param>
/// <param name="_extraParam"></param>
public void ShowInterstitial(Action<ToukaIntersitialStatus> callback, string _extraParam = "")
{
#if UNITY_EDITOR
Debug.Log("[ToukaAdManager] Show Interstitial call");
if (callback != null) callback(ToukaIntersitialStatus.FAIL);
return;
#endif
if (m_noAds)
{
Debug.Log("[ToukaAdManager] VIP don't show interstitial");
if (callback != null) callback(ToukaIntersitialStatus.FAIL);
return;
}
Debug.Log("[ToukaAdManager] Show Interstitial ");
if (toukaAds.IsReadyIntersitial())
{
ToukaAnalyticsManager.Instance.LogEventByUmeng(StaticStringsEvent.Event_Sort_TKInner_isready_iv_success);
toukaAds.ShowIntersitial((status) => {
if (status == ToukaIntersitialStatus.CLOSE || status == ToukaIntersitialStatus.FAIL)
{
FocusOnGame(true); // 回到游戏
if (callback != null) callback(status); // 回调改到这里了
LoadInterstitial();
if (status == ToukaIntersitialStatus.FAIL) // 如果是失败回调,就做失败打点
{
ToukaAnalyticsManager.Instance.LogEventByUmeng(StaticStringsEvent.Event_Sort_TKInner_iv_ad_show_failed, new System.Collections.Generic.Dictionary<string, string>() { { StaticStringsEvent.Event_Type_TKInner_ad_position, _extraParam } });
}
AutoIntersititialManager.Instance.PauseTimer(false);
}
else if (status == ToukaIntersitialStatus.SHOW)
{
FocusOnGame(false); // 离开游戏
AutoIntersititialManager.Instance.PauseTimer(true);
Debug.Log("[ToukaAdManager] UMENG 插屏SHOW上报");
ToukaAnalyticsManager.Instance.LogEventByUmeng(StaticStringsEvent.Event_Sort_TKInner_iv_ad_show, new System.Collections.Generic.Dictionary<string, string>() { { StaticStringsEvent.Event_Type_TKInner_ad_position, _extraParam } });
ToukaAnalyticsManager.Instance.LogEventByUmeng(StaticStringsEvent.Event_Sort_TKInner_ivrv_ad_show);
CheckIn24UploadToConversionValue();
IncreateVideoAndIntersitialShowCount(false);
}
});
}
else
{
if (callback != null) callback(ToukaIntersitialStatus.FAIL);
ToukaAnalyticsManager.Instance.LogEventByUmeng(StaticStringsEvent.Event_Sort_TKInner_isready_iv_failure);
LoadInterstitial();
}
}
/// <summary>
/// isReady iv
/// </summary>
/// <param name="_interId"></param>
/// <returns></returns>
public bool IsReadyIntersitial()
{
#if UNITY_EDITOR
return false;
#endif
bool isReadyInter = toukaAds.IsReadyIntersitial();
Debug.Log("[ToukaAdManager] isReadyInter : " + isReadyInter);
return isReadyInter;
}
#endregion
#region RewardVideo
/// <summary>
/// show video
/// </summary>
/// <param name="_callback"></param>
/// <param name="_videoPlace"></param>
/// <returns></returns>
public bool ShowVideo(Action<ToukaVideoStatus> _callback, ToukaVideoPlace _videoPlace)
{
ToukaAnalyticsManager.Instance.LogEventByUmeng(StaticStringsEvent.Event_Sort_TKInner_ad_button_click, new System.Collections.Generic.Dictionary<string, string>() { { StaticStringsEvent.Event_Type_TKInner_ad_position, _videoPlace.ClickPlace } });
#if UNITY_EDITOR
_callback(ToukaVideoStatus.SUCCESS);
return true;
#endif
if (toukaAds.IsReadyVideo())
{
ToukaAnalyticsManager.Instance.LogEventByUmeng(StaticStringsEvent.Event_Sort_TKInner_isready_rv_success, new System.Collections.Generic.Dictionary<string, string>() { { StaticStringsEvent.Event_Type_TKInner_ad_position, _videoPlace.ClickPlace } });
toukaAds.ShowVideo((status) =>
{
AutoIntersititialManager.Instance.PauseTimer(true);
if (status == ToukaVideoStatus.CLOSE)
{
FocusOnGame(true); // 回到游戏
LoadVideo();
AutoIntersititialManager.Instance.PauseTimer(false);
}
if (status == ToukaVideoStatus.SHOW)
{
FocusOnGame(false); // 离开游戏
// 播激励视频上报打点
Debug.Log("UMENG 播激励视频上报打点");
ToukaAnalyticsManager.Instance.LogEventByUmeng(StaticStringsEvent.Event_Sort_TKInner_rv_ad_show, new System.Collections.Generic.Dictionary<string, string>() { { StaticStringsEvent.Event_Type_TKInner_ad_position, _videoPlace.ClickPlace } });
ToukaAnalyticsManager.Instance.LogEventByUmeng(StaticStringsEvent.Event_Sort_TKInner_ivrv_ad_show);
CheckIn24UploadToConversionValue();
IncreateVideoAndIntersitialShowCount(true);
//Time.timeScale = 0.0f;
}
if (status == ToukaVideoStatus.CANCEL)
{
AutoIntersititialManager.Instance.PauseTimer(false);
}
if (status == ToukaVideoStatus.FAIL)
{
AutoIntersititialManager.Instance.PauseTimer(false);
ToukaAnalyticsManager.Instance.LogEventByUmeng(StaticStringsEvent.Event_Sort_TKInner_rv_ad_show_fail, new System.Collections.Generic.Dictionary<string, string>() { { StaticStringsEvent.Event_Type_TKInner_ad_position, _videoPlace.ClickPlace } });
}
if (status == ToukaVideoStatus.SUCCESS)
{
AutoIntersititialManager.Instance.PauseTimer(false);
}
if (_callback != null) _callback(status);
});
return true;
}
else
{
if (_callback != null) _callback(ToukaVideoStatus.FAIL);
Debug.Log("Touka: Don't show Video for hasAdReady is NO");
//PopupTipsPanel.PopupTips(LocalizationManager.GetTermTranslation("1045"));
ToukaAnalyticsManager.Instance.LogEventByUmeng(StaticStringsEvent.Event_Sort_TKInner_isready_rv_failure, new System.Collections.Generic.Dictionary<string, string>() { { StaticStringsEvent.Event_Type_TKInner_ad_position, _videoPlace.ClickPlace } });
LoadVideo();
return false;
}
}
/// <summary>
/// isReady RV
/// </summary>
public bool IsReadyVideo
{
get
{
#if UNITY_EDITOR
return true;
#endif
if (toukaAds.IsReadyVideo())
{
Debug.Log("[ToukaAdManager] IsReadyVideo = true. ");
return true;
}
else
{
LoadVideo();
Debug.Log("[ToukaAdManager] IsReadyVideo = false. ");
return false;
}
}
}
#endregion
#region native
/// <summary>
/// isReady Native
/// </summary>
public bool IsReadyNative
{
get
{
#if UNITY_EDITOR
return false;
#endif
return toukaAds.IsReadyNative();
}
}
/// <summary>
/// show native
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <returns></returns>
2022-05-27 16:06:04 +00:00
public bool ShowNative(float x, float y, float width, float height,string adpos)
2022-05-23 13:39:59 +00:00
{
Debug.Log("ShowNative()");
#if UNITY_EDITOR
return false;
#endif
Debug.Log("[ToukaAdManager] ShowNative with frame, before isReadyNative");
if (m_noAds)
{
Debug.Log("Touka: VIP don't ShowNative");
toukaAds.RemoveNative(true);
return false;
}
if (IsReadyNative)
{
Debug.Log("Touka: ShowNative, x : " + x + " , y : " + y + " , width : " + width + " , height : " + height);
2022-05-27 16:06:04 +00:00
toukaAds.ShowNative(x, y, width, height,adpos);
2022-05-23 13:39:59 +00:00
return true;
}
else
{
LoadNative();
}
return false;
}
/// <summary>
/// set native bounds first
/// </summary>
/// <param name="width"></param>
/// <param name="height"></param>
public void SetNativeBoundsFist(float width, float height)
{
if (ToukaUtils.FloatEqual(ToukaAdManager.Instance.NativeWidth, 0) && ToukaUtils.FloatEqual(ToukaAdManager.Instance.NativeHeight, 0))
{
Debug.Log("inner ---- SetNativeBoundsFist, width : " + width + " , height : " + height);
ToukaAdManager.Instance.NativeWidth = width;
ToukaAdManager.Instance.NativeHeight = height;
ToukaUtils.SavePlayerPrefsStringByKeyValue(StaticStringsPlayerPrefs.NativeWidthSaved, ToukaAdManager.Instance.NativeWidth.ToString());
ToukaUtils.SavePlayerPrefsStringByKeyValue(StaticStringsPlayerPrefs.NativeHeightSaved, ToukaAdManager.Instance.NativeHeight.ToString());
ToukaAdManager.Instance.LoadNative();
}
}
/// <summary>
/// hide native
/// </summary>
/// <param name="_clean"></param>
public void HideNative(bool _clean)
{
#if UNITY_EDITOR
return;
#endif
if (toukaAds != null)
{
toukaAds.RemoveNative(_clean);
if (_clean == false)
{
LoadNative();
}
}
}
#endregion
#region Load & Reload
/// <summary>
/// load banner
/// </summary>
public void LoadBanner()
{
Debug.Log("Touka: LoadBanner");
#if UNITY_EDITOR
return;
#endif
if (!StaticStringsKey.BannerSwitch)
{
return;
}
if (Application.internetReachability != NetworkReachability.NotReachable)
{
Debug.Log("start to load banner");
toukaAds.LoadBanner((success) => {
if (success)
{
Debug.Log("in ToukaAdManager, loadBanner. success");
m_bannerRetryTimes = RETRY_TIMES_COUNT;
if (isCurrCanShowBanner)
{
Debug.Log("可以显示banner");
ShowBanner();
}
}
else
{
Debug.Log("load banner fail");
ReLoadBanner();
}
});
}
else
{
Debug.Log("Touka: Don't load banner for NetworkReachability.NotReachable");
}
}
/// <summary>
/// load iv
/// </summary>
public void LoadInterstitial()
{
if (Application.internetReachability != NetworkReachability.NotReachable)
{
toukaAds.LoadInterstitial((success) =>
{
if (success)
{
Debug.Log("加载插屏广告成功");
m_intersRetryTimes = RETRY_TIMES_COUNT;
CancelInvoke();
}
else
{
Debug.Log("加载插屏广告失败,重新加载:" + m_intersRetryTimes);
#if UNITY_IOS
ReloadInterstitial();
#endif
}
});
}
else
{
Debug.Log("Touka: Don't load interstitial for NetworkReachability.NotReachable");
}
}
/// <summary>
/// load rv
/// </summary>
public void LoadVideo()
{
if (Application.internetReachability != NetworkReachability.NotReachable)
{
toukaAds.LoadVideo((success) =>
{
if (success)
{
m_videoRetryTimes = RETRY_TIMES_COUNT;
}
else
{
ReloadVideo();
}
});
}
else
{
Debug.Log("Touka: Don't load video for NetworkReachability.NotReachable");
}
}
/// <summary>
/// load native
/// </summary>
public void LoadNative()
{
if (Application.internetReachability != NetworkReachability.NotReachable)
{
if(toukaAds != null)
{
toukaAds.LoadNative((success) =>
{
if (success)
{
Debug.Log("native 加载成功");
m_nativeRetryTimes = RETRY_TIMES_COUNT;
}
else
{
Debug.Log("native 加载失败");
ReloadNative();
}
});
}
}
else
{
Debug.Log("Touka: Don't load native for NetworkReachability.NotReachable");
}
}
/// <summary>
/// reload banner
/// </summary>
private void ReLoadBanner()
{
if (!StaticStringsKey.BannerSwitch)
{
return;
}
Debug.Log("Touka: ReLoadBanner times :" + m_bannerRetryTimes);
if (Application.internetReachability != NetworkReachability.NotReachable)
{
if (m_bannerRetryTimes > 0)
{
m_bannerRetryTimes--;
Debug.Log("has times count, go on load again");
LoadBanner();
}
else
{
Debug.Log("no times count, don't load again");
m_bannerRetryTimes = RETRY_TIMES_COUNT;
}
}
else
{
Debug.Log("Touka: Don't Reload banner for NetworkReachability.NotReachable");
}
}
/// <summary>
/// reload video
/// </summary>
private void ReloadVideo()
{
Debug.Log("Touka: ReLoadVideo, times : " + m_videoRetryTimes);
if (Application.internetReachability != NetworkReachability.NotReachable)
{
if (m_videoRetryTimes > 0)
{
m_videoRetryTimes--;
LoadVideo();
}
else
{
m_videoRetryTimes = RETRY_TIMES_COUNT;
}
}
else
{
Debug.Log("Touka: Don't Reload video for NetworkReachability.NotReachable");
}
}
/// <summary>
/// reload iv
/// </summary>
private void ReloadInterstitial()
{
Debug.Log("Touka: ReLoadInterstitial, times:" + m_intersRetryTimes);
if (m_intersRetryTimes > 0)
{
m_intersRetryTimes--;
LoadInterstitial();
}
else
{
m_intersRetryTimes = RETRY_TIMES_COUNT;
}
}
/// <summary>
/// reload native
/// </summary>
private void ReloadNative()
{
Debug.Log("Touka: ReloadNative. times : " + m_nativeRetryTimes);
if (m_nativeRetryTimes > 0)
{
m_nativeRetryTimes--;
LoadNative();
}
else
{
m_nativeRetryTimes = RETRY_TIMES_COUNT;
}
}
#endregion
#region Utils below
// Utils below ////////////////////////////////////////////////////////////////
/// <summary>
/// 判断 插屏+激励视频 总次数,是否达到了上报总次数
/// </summary>
/// <returns></returns>
private bool IncreateVideoAndIntersitialShowCount(bool _video)
{
if (!ToukaUtilsInner.Instance.isFirstDayLogin) // 非首日登录
{
return false;
}
string playerPrefsKey = StaticStringsPlayerPrefs.IntersitialShowCount;
if (_video)
{
playerPrefsKey = StaticStringsPlayerPrefs.VideoShowCount;
}
// 记录 插屏/激励视频 展示次数
var showCount = ToukaUtils.GetPlayerPrefsIntByKey(playerPrefsKey);
ToukaUtils.SavePlayerPrefsIntByKeyValue(playerPrefsKey, showCount + 1);
// 读取 插屏 + 激励视频 总次数
var videoCount = ToukaUtils.GetPlayerPrefsIntByKey(StaticStringsPlayerPrefs.VideoShowCount);
var intersitialCount = ToukaUtils.GetPlayerPrefsIntByKey(StaticStringsPlayerPrefs.IntersitialShowCount);
Debug.Log("激励视频+插屏次数:" + (videoCount + intersitialCount) + ", rv onlineCount : " + TKGSDKManager.Instance.GetConfigInt(ToukaInnerParamKey.NewUserRVCount.ToString()) + " , ads onlineCount : " + TKGSDKManager.Instance.GetConfigInt(ToukaInnerParamKey.NewUserAdsCount.ToString()));
//if (videoCount >= int.Parse(StaticOnlineParams.NewUserRVCountOnlineParams.DefaultValue))
//{
// if (ToukaUtils.IfFirstCheckPlayerPrefs(StaticStringsPlayerPrefs.TKInner_HasTenjinUploadRVCount))
// {
// Debug.Log(string.Format("看激励视频达到{0}次上报tenjin. ", videoCount));
// //ToukaAnalyticsManager.Instance.LogEvent(ToukaLogType.Tenjin, StaticStringsEvent.Event_Tenjin_NewUserRVCount); // 暂时没要求上报了 // 上报新用户观看激励视频次数
// }
//}
if ((videoCount + intersitialCount) >= TKGSDKManager.Instance.GetConfigInt(ToukaInnerParamKey.NewUserAdsCount.ToString()))
{
if (ToukaUtils.IfFirstCheckPlayerPrefs(StaticStringsPlayerPrefs.TKInner_HasTenjinUploadADSCount))
{
Debug.Log(string.Format("看视频广告达到{0}次上报tenjin. ", videoCount + intersitialCount));
ToukaAnalyticsManager.Instance.LogEvent(ToukaLogType.Tenjin, StaticStringsEvent.Event_Tenjin_TKInner_NewUserAdsCount);
}
}
return videoCount + intersitialCount >= TKGSDKManager.Instance.GetConfigInt(ToukaInnerParamKey.NewUserAdsCount.ToString());
}
/// <summary>
/// iOS 14要求24h 内新安装用户 有观看 插屏/激励视频, 则上报。
/// </summary>
private void CheckIn24UploadToConversionValue()
{
Debug.Log("CheckIn24UploadToConversionValue");
if (ToukaUtils.GetPlayerPrefsIntByKey("Has24UploadToConversionValue") == 1)
{
return;
}
if (ToukaUtils.isNewUser())
{
Debug.Log("UpdateConversionValue 000011");
#if !NO_SDK
TGiOSAdManager.Instance.UpdateConversionValue("000011");
#endif
ToukaUtils.SavePlayerPrefsIntByKeyValue("Has24UploadToConversionValue", 1);
}
}
#endregion
public void SetGameFocusAction(Action<bool> pGameFocusAction)
{
mFocusGameAction = pGameFocusAction;
}
private void FocusOnGame(bool pFocus)
{
if (mFocusGameAction == null)
{
AudioListener.pause = !pFocus;
}
else
{
mFocusGameAction(pFocus);
}
}
}
}