chicken_dy/Assets/Scripts/ToukaGames/ADSScripts/ToukaSDK/internal/ToukaInterstitialTimer.cs

175 lines
7.7 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.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using Touka.GameLogic;
public class ToukaInterstitialTimer : ToukaSingletonMonoBehaviour<ToukaInterstitialTimer>
{
private int IV1Times = 0;
private int IV2Times = 0;
#region
float startedTime = 0;
/// <summary>
/// 是否达到了可展示插屏的条件
///
/// 条件前N次触达插屏点不展示插屏。达到前N次后第N+1次展示插屏后续每隔M次展示一次插屏。插屏之间间隔不少于15s。
///
/// 1. 前N次触达不弹出插屏 在线参数-IV1_PreTimesN_OnlineParam
/// 2. 后续每隔M关弹出一次插屏 在线参数-IV1_PerM_OnlineParam
/// 3. 插屏与上次间隔时间不少于15s 在线参数-IV1_MinTimeL_OnlineParam
/// 三个条件均允许在线参数控制。
///
/// *IVType 区分不同点位插屏的条件控制。如果整个游戏只有一种条件控制那都用IV1就可以。如果某些点位要有第二种条件控制那对应的点位传IV2就可以。
/// 目前通用封装只支持两种不同的条件控制。逻辑相同只是3个条件参数用不同的在线参数控制。如需多个条件请自行进行扩展
/// </summary>
/// <param name="_ivType"> 根据传入 IVType 区分不同插屏条件控制 </param>
/// <returns></returns>
public bool CanShow(ToukaSDKManager.IVType _ivType)
{
// 【1】前N次不展示插屏
if (!CheckIfReachFirstNTimes(_ivType))
{
Debug.Log("[ToukaInterstitialTimer]Check 「前N次不展示插屏」 条件是否满足 : False直接返回。不播插屏。");
return false;
}
// 达到N次后第N+1次直接展示插屏
bool canShowDirectly = false;
if(_ivType == ToukaSDKManager.IVType.IV1)
{
if (ToukaUtils.IfFirstCheckPlayerPrefs(StaticStringsPlayerPrefs.TKInner_HasFirstShowIV1))
{
canShowDirectly = true;
}
}else if(_ivType == ToukaSDKManager.IVType.IV2)
{
if (ToukaUtils.IfFirstCheckPlayerPrefs(StaticStringsPlayerPrefs.TKInner_HasFirstShowIV2))
{
canShowDirectly = true;
}
}
if (!canShowDirectly) // 非第N+1次不能直接展示广告 【2】要判断是否达到了间隔次数
{
int currTimes = 0; // 当前达到的间隔次数
int needTimes = 0; // 需要达到的间隔次数
if (_ivType == ToukaSDKManager.IVType.IV1) // IV1 需要达到的间隔次数
{
currTimes = ++IV1Times;
needTimes = int.Parse(StaticOnlineParams.IV1_PerM_OnlineParam.DefaultValue);
}
else if (_ivType == ToukaSDKManager.IVType.IV2) // IV2需要达到的间隔次数
{
currTimes = ++IV2Times;
needTimes = int.Parse(StaticOnlineParams.IV2_PerM_OnlineParam.DefaultValue);
}
if (currTimes < needTimes) // 没有达到间隔次数,直接返回
{
Debug.Log("[ToukaInterstitialTimer] Check 「2次插屏间隔次数」 条件是否满足False直接返回。不播插屏。当前次数"+ currTimes + ", 需要达到次数:" + needTimes);
return false;
}
else // 达到间隔次数了,清空间隔次数,可以直接播插屏广告
{
if (_ivType == ToukaSDKManager.IVType.IV1)
{
IV1Times = 0;
}
else if (_ivType == ToukaSDKManager.IVType.IV2)
{
IV2Times = 0;
}
Debug.Log("[ToukaInterstitialTimer]达到间隔次数,可进行最小时间间隔检测。当前次数:" + currTimes + ", 需要达到次数:" + needTimes);
}
}
// 【3】判断是否达到最小时间间隔
float ivIntervalTime = float.Parse(StaticOnlineParams.IV1_MinTimeL_OnlineParam.DefaultValue); // IV1 最小时间间隔
if(_ivType == ToukaSDKManager.IVType.IV2)
{
ivIntervalTime = float.Parse(StaticOnlineParams.IV2_MinTimeL_OnlineParam.DefaultValue); // IV2 最小时间间隔
}
bool canShowFlg = Time.time - startedTime > ivIntervalTime; // 达到最小间隔时间,可以展示插屏;否则不可以
Debug.Log("[ToukaInterstitialTimer] Check 「2次插屏最小间隔时间」 条件是否满足:" + canShowFlg);
Debug.Log("[ToukaInterstitialTimer] 判断插屏间隔时间 : " + (Time.time - startedTime) + " , 当前时间:" + Time.time + " , 上次开始时间 " + startedTime + " ,所需要的间隔时间: " + ivIntervalTime);
// 可展示插屏,清空累计次数
if (canShowFlg)
{
if (_ivType == ToukaSDKManager.IVType.IV1)
{
IV1Times = 0;
}
else if (_ivType == ToukaSDKManager.IVType.IV2)
{
IV2Times = 0;
}
}
return canShowFlg;
}
/// <summary>
/// 检测是否达到N次 - 前N次不弹出插屏广告
/// </summary>
/// <param name="_ivType"></param>
/// <returns></returns>
public bool CheckIfReachFirstNTimes(ToukaSDKManager.IVType _ivType)
{
bool canShow = false;
if (_ivType == ToukaSDKManager.IVType.IV1)
{
int reachTimes01 = ToukaUtils.GetPlayerPrefsIntByKey(StaticStringsPlayerPrefs.TKInner_IV1ReachTimes, 0);
if (reachTimes01 >= int.Parse(StaticOnlineParams.IV1_PreTimesN_OnlineParam.DefaultValue))
{
Debug.Log("[ToukaInterstitialTimer]插屏 IV1 触达次数够了, reachTimes01 : " + reachTimes01 + " ,需要达到次数:"+ int.Parse(StaticOnlineParams.IV1_PreTimesN_OnlineParam.DefaultValue));
canShow = true;
}
else
{
Debug.Log("[ToukaInterstitialTimer]插屏iv1, 触达次数不够。当前已触达插屏点次数:" + reachTimes01);
}
reachTimes01++;
ToukaUtils.SavePlayerPrefsIntByKeyValue(StaticStringsPlayerPrefs.TKInner_IV1ReachTimes, reachTimes01);
}else if (_ivType == ToukaSDKManager.IVType.IV2)
{
int reachTimes02 = ToukaUtils.GetPlayerPrefsIntByKey(StaticStringsPlayerPrefs.TKInner_IV2ReachTimes, 0);
if (reachTimes02 >= int.Parse(StaticOnlineParams.IV2_PreTimesN_OnlineParam.DefaultValue))
{
Debug.Log("[ToukaInterstitialTimer]插屏 IV2 触达次数够了, reachTimes02 : " + reachTimes02);
canShow = true;
}
else
{
Debug.Log("[ToukaInterstitialTimer]插屏IV2, 触达次数不够。当前已触达插屏点次数:" + reachTimes02);
}
reachTimes02++;
ToukaUtils.SavePlayerPrefsIntByKeyValue(StaticStringsPlayerPrefs.TKInner_IV2ReachTimes, reachTimes02);
}
Debug.Log("[ToukaInterstitialTimer]Check 前N次不弹出插屏广告是否到达N次了 " + canShow);
return canShow;
}
/// <summary>
/// 开始播插屏/激励视频时进行计时
/// </summary>
public void StartTimer()
{
startedTime = Time.time;
Debug.Log("[ToukaInterstitialTimer] 开始播插屏/激励视频,开始播广告计时:" + startedTime);
}
#endregion
}