353 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			353 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C#
		
	
	
	
| using System;
 | ||
| using System.IO;
 | ||
| using System.Runtime.InteropServices;
 | ||
| using System.Security.Cryptography;
 | ||
| using System.Text;
 | ||
| using UnityEngine;
 | ||
| 
 | ||
| namespace Touka
 | ||
| {
 | ||
|     /// <summary>
 | ||
|     /// SDK 可供外部调用的一些工具方法
 | ||
|     /// </summary>
 | ||
|     public static class ToukaUtils
 | ||
|     {
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 跳转隐私链接
 | ||
|         /// </summary>
 | ||
|         public static void OpenPrivacyURL()
 | ||
|         {
 | ||
|             Application.OpenURL(TKGBasicConfig.PrivacyURL);
 | ||
|         }
 | ||
| 
 | ||
|         public static void OpenUserPolicy()
 | ||
|         {
 | ||
|             Application.OpenURL(TKGBasicConfig.AgreementURL);
 | ||
|         }
 | ||
| 
 | ||
|         public static void OpenBrowserUrl(string _url)
 | ||
|         {
 | ||
|             Application.OpenURL(_url);
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 打开更多游戏 - 跳转appstore公司账号页面
 | ||
|         /// </summary>
 | ||
|         /// <param name="_withRedPotActive"></param>
 | ||
|         public static void OpenMoreGames()
 | ||
|         {
 | ||
| #if UNITY_IOS
 | ||
|             Application.OpenURL(TKGBasicConfig.MoreGameURL);
 | ||
| #endif
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 打开URL
 | ||
|         /// </summary>
 | ||
|         /// <param name="_url"></param>
 | ||
|         public static void OpenUrl(string _url)
 | ||
|         {
 | ||
|             Application.OpenURL(_url);
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 一键加入QQ群
 | ||
|         /// </summary>
 | ||
|         public static void JoinQQGroup()
 | ||
|         {
 | ||
|             string qqUrl = "mqqapi://card/show_pslcard?src_type=internal&version=1&uin=916827975&key=ed38055c01233796a17ff0a800c9967cdf1c2b82dfc98d287130dfe1324b411d&card_type=group&source=external&jump_from=webapi";
 | ||
|             Application.OpenURL(qqUrl);
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 打开评价链接 - 跳转游戏商店页
 | ||
|         /// </summary>
 | ||
|         public static void OpenReviewURL()
 | ||
|         {
 | ||
| #if UNITY_ANDROID
 | ||
|         Debug.Log("Review url = " + StaticStringsKey.REVIEW_URL + Application.identifier);
 | ||
|         Application.OpenURL(StaticStringsKey.REVIEW_URL+Application.identifier);
 | ||
|         return;
 | ||
| #endif
 | ||
|             Application.OpenURL(StaticStringsKey.REVIEW_URL);
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// iOS游戏内弹出系统评价窗口
 | ||
|         /// </summary>
 | ||
|         public static void OpenSystemReviewPop()
 | ||
|         {
 | ||
|             Debug.Log("游戏内跳出评价");
 | ||
| #if UNITY_IOS
 | ||
|             TGTools.Instance.ShowReview();
 | ||
| #endif
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 需要延迟初始化tenjin时调用
 | ||
|         /// </summary>
 | ||
|         public static void InitTenjinFirst()
 | ||
|         {
 | ||
|             if (GetPlayerPrefsIntByKey(StaticStringsPlayerPrefs.HasInitTenjinFirst, 0) == 0)
 | ||
|             {
 | ||
|                 ToukaAnalyticsManager.Instance.InitTenjinInner();
 | ||
|                 SavePlayerPrefsIntByKeyValue(StaticStringsPlayerPrefs.HasInitTenjinFirst, 1);
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 是否首次触达某个事件
 | ||
|         /// </summary>
 | ||
|         /// <param name="_key"></param>
 | ||
|         /// <returns></returns>
 | ||
|         public static bool IfFirstCheckPlayerPrefs(string _key)
 | ||
|         {
 | ||
|             var isFirstClick = GetPlayerPrefsIntByKey(_key) == 0;
 | ||
|             SavePlayerPrefsIntByKeyValue(_key, 1);
 | ||
| 
 | ||
|             return isFirstClick;
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 只首次触发某个事件进行打点
 | ||
|         /// </summary>
 | ||
|         /// <param name="_logType"></param>
 | ||
|         /// <param name="_eventKey"></param>
 | ||
|         /// <param name="_eventLabel"></param>
 | ||
|         public static void LogFirstEvent(ToukaLogType _logType, string _eventKey)
 | ||
|         {
 | ||
|             var isFirstClick = IfFirstCheckPlayerPrefs(_eventKey);
 | ||
|             if (isFirstClick)
 | ||
|             {
 | ||
|                 ToukaAnalyticsManager.Instance.LogEvent(_logType, _eventKey);
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 是否是中文
 | ||
|         /// </summary>
 | ||
|         public static bool IsCN
 | ||
|         {
 | ||
|             get
 | ||
|             {
 | ||
|                 var language = Application.systemLanguage.ToString().ToLower();
 | ||
|                 if (language.Contains("chinese"))
 | ||
|                 {
 | ||
|                     return true;
 | ||
|                 }
 | ||
|                 return false;
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 本地存int
 | ||
|         ///
 | ||
|         /// key 内部拼接了前缀:Touka_
 | ||
|         /// </summary>
 | ||
|         /// <param name="_key"></param>
 | ||
|         /// <param name="_defaultValue"></param>
 | ||
|         /// <returns></returns>
 | ||
|         public static int GetPlayerPrefsIntByKey(string _key, int _defaultValue = 0)
 | ||
|         {
 | ||
|             int value = PlayerPrefs.GetInt(string.Format("{0}{1}", StaticStringsPlayerPrefs.TOUKA_PREFIX, _key), _defaultValue);
 | ||
|             return value;
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 本地取int
 | ||
|         ///
 | ||
|         /// key 内部拼接了前缀:Touka_
 | ||
|         /// </summary>
 | ||
|         /// <param name="_key"></param>
 | ||
|         /// <param name="_newValue"></param>
 | ||
|         public static void SavePlayerPrefsIntByKeyValue(string _key, int _newValue)
 | ||
|         {
 | ||
|             PlayerPrefs.SetInt(string.Format("{0}{1}", StaticStringsPlayerPrefs.TOUKA_PREFIX, _key), _newValue);
 | ||
|             PlayerPrefs.Save();
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 本地存string
 | ||
|         ///
 | ||
|         /// key 内部拼接了前缀:Touka_
 | ||
|         /// </summary>
 | ||
|         /// <param name="_key"></param>
 | ||
|         /// <param name="_defaultValue"></param>
 | ||
|         /// <returns></returns>
 | ||
|         public static string GetPlayerPrefsStringByKey(string _key, string _defaultValue = "")
 | ||
|         {
 | ||
|             string value = PlayerPrefs.GetString(string.Format("{0}{1}", StaticStringsPlayerPrefs.TOUKA_PREFIX, _key), _defaultValue);
 | ||
|             return value;
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 本地取string
 | ||
|         ///
 | ||
|         /// key 内部拼接了前缀:Touka_
 | ||
|         /// </summary>
 | ||
|         /// <param name="_key"></param>
 | ||
|         /// <param name="_newValue"></param>
 | ||
|         public static void SavePlayerPrefsStringByKeyValue(string _key, string _newValue)
 | ||
|         {
 | ||
|             PlayerPrefs.SetString(string.Format("{0}{1}", StaticStringsPlayerPrefs.TOUKA_PREFIX, _key), _newValue);
 | ||
|             PlayerPrefs.Save();
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 缓存当前时间
 | ||
|         /// </summary>
 | ||
|         /// <param name="_key"></param>
 | ||
|         public static void SaveCurrTime2PlayerPrefs(string _key)
 | ||
|         {
 | ||
|             DateTime date1 = DateTime.Now;
 | ||
|             string s1 = date1.ToString();
 | ||
|             SavePlayerPrefsStringByKeyValue(_key, s1);
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 缓存本地时间为string
 | ||
|         /// </summary>
 | ||
|         /// <param name="_key"></param>
 | ||
|         /// <param name="_dateStr"></param>
 | ||
|         public static void SaveCurrTime2PlayerPrefsWithStringDate(string _key, string _dateStr)
 | ||
|         {
 | ||
|             SavePlayerPrefsStringByKeyValue(_key, _dateStr);
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 取出缓存string时间为 DateTime
 | ||
|         /// </summary>
 | ||
|         /// <param name="_key"></param>
 | ||
|         /// <returns></returns>
 | ||
|         public static DateTime GetDateTimeFromPlayerPrefs(string _key)
 | ||
|         {
 | ||
|             string firstDateValue = GetPlayerPrefsStringByKey(_key);
 | ||
|             if (string.IsNullOrEmpty(firstDateValue))
 | ||
|             {
 | ||
|                 return new DateTime(1990, 1, 1, 0, 0, 0);
 | ||
|             }
 | ||
|             DateTime dateOld = Convert.ToDateTime(firstDateValue);
 | ||
|             return dateOld;
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 判断是否为新用户
 | ||
|         ///
 | ||
|         /// 距离首次登录时间间隔24h以内为新用户
 | ||
|         /// </summary>
 | ||
|         /// <returns></returns>
 | ||
|         public static bool isNewUser()
 | ||
|         {
 | ||
|             DateTime dateCurr = DateTime.Now;
 | ||
| 
 | ||
|             string firstDateValue = GetPlayerPrefsStringByKey(StaticStringsPlayerPrefs.FirstLoginTime);
 | ||
|             if (string.IsNullOrEmpty(firstDateValue))
 | ||
|             {
 | ||
|                 Debug.Log("存的值为空,为新用户");
 | ||
|                 return true;
 | ||
|             }
 | ||
|             Debug.Log("读取出来的值: " + firstDateValue + " , 现在的时间值:" + dateCurr.ToString());     // 06/16/2019 19:46:57
 | ||
|             DateTime dateOld = Convert.ToDateTime(firstDateValue);
 | ||
| 
 | ||
|             TimeSpan timeSpan = dateCurr - dateOld;
 | ||
|             Debug.Log("timeSpan.Seconds : " + timeSpan.TotalMinutes);
 | ||
|             if (timeSpan.TotalMinutes >= 24 * 60)
 | ||
|             {
 | ||
|                 Debug.Log("不是新用户了");
 | ||
|                 return false;
 | ||
|             }
 | ||
|             Debug.Log("是新用户");
 | ||
|             return true;
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// equal double
 | ||
|         /// </summary>
 | ||
|         /// <param name="a"></param>
 | ||
|         /// <param name="b"></param>
 | ||
|         /// <returns></returns>
 | ||
|         public static bool equalDouble(double a, double b)
 | ||
|         {
 | ||
|             if ((a - b > -0.000001) && (a - b) < 0.000001)
 | ||
|                 return true;
 | ||
|             else
 | ||
|                 return false;
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// Floats the equal.
 | ||
|         /// </summary>
 | ||
|         /// <returns><c>true</c>, if equal was floated, <c>false</c> otherwise.</returns>
 | ||
|         /// <param name="a">The alpha component.</param>
 | ||
|         /// <param name="b">The blue component.</param>
 | ||
|         public static bool FloatEqual(float a, float b)
 | ||
|         {
 | ||
|             if ((a - b > -0.000001) && (a - b) < 0.000001)
 | ||
|             {
 | ||
|                 return true;
 | ||
|             }
 | ||
|             else
 | ||
|             {
 | ||
|                 return false;
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         public static string GetTodayDataStr()
 | ||
|         {
 | ||
|             string timeStr = DateTime.Now.ToString("yyyy-MM-dd");
 | ||
|             return timeStr;
 | ||
|         }
 | ||
| 
 | ||
|         public static void CheckPassLvAndAdEvent(int pLvNum, bool pWithAdCheck = false)
 | ||
|         {
 | ||
|             //Debug.Log("is first day ==: " + ToukaUtilsInner.Instance.isFirstDayLogin);
 | ||
|             //Debug.Log("pass lv count ==: " + pLvNum);
 | ||
|             if (ToukaUtilsInner.Instance.isFirstDayLogin && pLvNum >= TKGSDKManager.Instance.GetConfigInt(ToukaInnerParamKey.NewUserPassXLevel.ToString()))
 | ||
|             {
 | ||
|                 string tPassLvKey = "PassLv_Log";
 | ||
|                 if (IfFirstCheckPlayerPrefs(tPassLvKey))
 | ||
|                 {
 | ||
| #if USE_FIREBASE
 | ||
|                     FirebaseTool.Instance.LogEvent(StaticStringsEvent.Event_Tenjin_TKInner_NewUserPassLevelX);
 | ||
| #endif
 | ||
| 
 | ||
|                     ToukaAnalyticsManager.Instance.LogEvent(ToukaLogType.Tenjin, StaticStringsEvent.Event_Tenjin_TKInner_NewUserPassLevelX);
 | ||
|                     ToukaAnalyticsManager.Instance.LogEventByUmeng(StaticStringsEvent.Event_Tenjin_TKInner_NewUserPassLevelX);
 | ||
|                 }
 | ||
| 
 | ||
|                 if (pWithAdCheck)
 | ||
|                 {
 | ||
|                     CheckAdCount();
 | ||
|                 }
 | ||
|             }
 | ||
| 
 | ||
| #if UNITY_IOS
 | ||
| 
 | ||
|             TGiOSAdManager.Instance.NewUserPassLevel();
 | ||
| #endif
 | ||
|         }
 | ||
| 
 | ||
|         private static void CheckAdCount()
 | ||
|         {
 | ||
|             var videoCount = GetPlayerPrefsIntByKey(StaticStringsPlayerPrefs.VideoShowCount);
 | ||
|             var intersitialCount = GetPlayerPrefsIntByKey(StaticStringsPlayerPrefs.IntersitialShowCount);
 | ||
|             string tLvAndAdKey = "PassLv&AdCount_Log";
 | ||
|             string tEvtPassLvAndAdCount = "Passlevel&Count_Video";
 | ||
| 
 | ||
|             //Debug.Log("watch ad count ==: " + (videoCount + intersitialCount));
 | ||
|             if ((videoCount + intersitialCount) >= TKGSDKManager.Instance.GetConfigInt(ToukaInnerParamKey.NewUserPvCount.ToString()))
 | ||
|             {
 | ||
|                 if (IfFirstCheckPlayerPrefs(tLvAndAdKey))
 | ||
|                 {
 | ||
| #if USE_FIREBASE
 | ||
|                     FirebaseTool.Instance.LogEvent(tEvtPassLvAndAdCount);
 | ||
| #endif
 | ||
|                     ToukaAnalyticsManager.Instance.LogEvent(ToukaLogType.Tenjin, tEvtPassLvAndAdCount);
 | ||
|                     ToukaAnalyticsManager.Instance.LogEventByUmeng(tEvtPassLvAndAdCount);
 | ||
|                 }
 | ||
|             }
 | ||
|         }
 | ||
|     }
 | ||
| } |