mergemilitary/Assets/TKGSDK/UnitySDK/Scripts/AnalyticsScripts/ToukaSDK/ToukaAnalyticsManager.cs

327 lines
11 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.Generic;
using GameAnalyticsSDK;
using GameAnalyticsSDK.Events;
using UnityEngine;
using GameAnalyticsSDK.Wrapper;
using Touka.GameLogic;
using System;
#if UNITY_IOS
using UnityEngine.iOS;
#endif
namespace Touka
{
/// <summary>
/// 数据统计类
///
/// 包含Umeng、GA、Tenjin的初始化及打点Umeng在线参数初始化
/// ** 需在 StaticStringKey 类里修改对应ID
/// </summary>
public class ToukaAnalyticsManager : ToukaSingletonMonoBehaviour<ToukaAnalyticsManager>
{
/// <summary>
/// Init
/// </summary>
public void Init()
{
Debug.Log("[ToukaAnalyticsManager] Init");
StaticOnlineParams.Instance.InitData(); // 初始化在线参数列表
#if UNITY_EDITOR
StaticOnlineParams.GetInstance().Init(); // 初始化在线参数
return;
#else
#endif
InitUmeng(); // 初始化umeng
InitGA(); // 初始化ga
InitTenjin(); // 初始化tenjin
StaticOnlineParams.GetInstance().Init(); // 初始化在线参数
ToukaUtilsInner.Instance.Check2DaysLogin(); // 检查次日登录
ToukaUtilsInner.Instance.SaveFirstLoginTime(); // 记录首次登录游戏时间
}
#region Inits
/// <summary>
/// 初始化Umeng
/// </summary>
private void InitUmeng()
{
#if UNITY_IOS
TGTools.Instance.onRemoteConfigHandler = GetRemoteConfigOnline;
TGTools.Instance.InitSdk(StaticStringsKey.UMENG_APPKEY, StaticStringsKey.UMENG_CHANNELID);
Umeng.Analytics.SetLogEnabled(true);
#elif UNITY_ANDROID
Umeng.Analytics.StartWithAppKeyAndChannelId (StaticStringsKey.UMENG_APPKEY, StaticStringsKey.UMENG_CHANNELID);
Umeng.Analytics.SetLogEnabled (false);
#endif
}
/// <summary>
/// Umeng在线参数回调
/// </summary>
public void GetRemoteConfigOnline()
{
Debug.Log("[ToukaAnalyticsManager] get remote config from online");
StaticOnlineParams.Instance.parseGameOnlineConfig();
}
/// <summary>
/// 初始化GA
/// </summary>
private void InitGA()
{
if (UnityEngine.Object.FindObjectOfType(typeof(GameAnalytics)) == null)
{
GameObject ga = new GameObject();
ga.name = "GameAnalytics";
ga.transform.parent = transform;
ga.AddComponent<GA_SpecialEvents>();
ga.AddComponent<GameAnalytics>();
}
else
{
Debug.LogWarning("A GameAnalytics object already exists in this scene - you should never have more than one per scene!");
}
GameAnalytics.Initialize();
GA_Wrapper.SetBuild(Application.version);
GA_Wrapper.Initialize(StaticStringsKey.GA_gameKey, StaticStringsKey.GA_secretKey);
Debug.Log("[ToukaAnalyticsManager] GA: init :GA_gameKey=" + StaticStringsKey.GA_gameKey + "GA_secretKey=" + StaticStringsKey.GA_secretKey + " Application.version=" + Application.version);
}
/// <summary>
/// 初始化Tenjin
/// </summary>
private void InitTenjin()
{
#if IOS_CN
if (!StaticOtherConfig.InitTenjinLater_Switch) // 启动就初始化tenjin
{
InitTenjinInner();
}
else // 延时初始化tenjin
{
if (ToukaUtils.GetPlayerPrefsIntByKey(StaticStringsPlayerPrefs.HasInitTenjinFirst, 0) == 1)
{
Debug.Log("首次初始化过tenjin了之后都可以正常初始了");
InitTenjinInner();
}
else
{
Debug.Log("需要延迟启动处不能初始化tenjin");
}
}
#else
InitTenjinInner();
#endif
}
/// <summary>
/// 实际调用初始化Tenjin
/// </summary>
public void InitTenjinInner()
{
#if !IOS_CN && !ANDROID_CN && !ANDROID_TW
Debug.Log("[ToukaAnalyticsManager] init tenjin inner");
// Sends install/open event to Tenjin
BaseTenjin instance = Tenjin.getInstance(StaticStringsKey.TENJIN_KEY);
#if UNITY_IOS
if (new Version(Device.systemVersion).CompareTo(new Version("14.0")) >= 0)
{
// Tenjin wrapper for requestTrackingAuthorization
instance.RequestTrackingAuthorizationWithCompletionHandler((status) => {
Debug.Log("===> App Tracking Transparency Authorization Status: " + status);
// Sends install/open event to Tenjin
instance.Connect();
});
}
else
{
instance.Connect();
}
#else
instance.Connect();
#endif
#endif
}
#endregion
#region Events
/// <summary>
/// 打点事件 Tenjin / GA
/// </summary>
/// <param name="_logType"> Tenjin / GA </param>
/// <param name="_eventName"> 事件名称 </param>
/// <param name="_label"> 事件属性(可选) </param>
public void LogEvent(ToukaLogType _logType, string _eventName, string _label = null)
{
Debug.Log("[ToukaAnalyticsManager] LogEvent, logType : " + _logType.ToString() + " , eventName " + _eventName + " label:" + _label);
#if UNITY_EDITOR
return;
#endif
if (string.IsNullOrEmpty(_eventName)) return;
// ga
if ((_logType & ToukaLogType.GA) > 0)
{
if (string.IsNullOrEmpty(_label))
{
GameAnalytics.NewDesignEvent("event:" + _eventName);
}
else
{
GameAnalytics.NewDesignEvent("event:" + _eventName + "_" + _label);
}
}
// tenjin
if ((_logType & ToukaLogType.Tenjin) > 0)
{
if (string.IsNullOrEmpty(_label))
{
#if ANDROID_TW
TGAndroidAnalytics.Instance.onEvent(_eventName);
#else
Tenjin.getInstance(StaticStringsKey.TENJIN_KEY).SendEvent(_eventName);
#endif
}
else
{
#if ANDROID_TW
TGAndroidAnalytics.Instance.onEvent(_eventName + _label);
#else
Tenjin.getInstance(StaticStringsKey.TENJIN_KEY).SendEvent(_eventName + _label);
#endif
}
Debug.Log("Touka LogEventWithLabel Tenjin: " + _eventName + " label:" + _label);
}
}
/// <summary>
/// umeng打点 - 事件名字
/// </summary>
/// <param name="_eventSort">事件名字</param>
public void LogEventByUmeng(string _eventSort)
{
#if !NO_SDK
Debug.Log("Touka LogEventByUmeng _eventSort : " + _eventSort);
#if UNITY_EDITOR
return;
#endif
Umeng.Analytics.Event(_eventSort);
#endif
}
/// <summary>
/// umeng 打点 - 事件名字 + 一个事件属性(key:value)
/// </summary>
/// <param name="_eventSort">事件名字</param>
/// <param name="_key">属性key</param>
/// <param name="_value">属性value</param>
public void LogEventByUmeng(string _eventSort, string _key, string _value)
{
if (!string.IsNullOrEmpty(_eventSort) && !string.IsNullOrEmpty(_key) && !string.IsNullOrEmpty(_value))
{
LogEventByUmeng(_eventSort, new Dictionary<string, string>() { { _key, _value } });
}
}
/// <summary>
/// umeng 打点 - 事件名字 + 两个事件属性(key:value)
/// </summary>
/// <param name="_eventSort">事件名字</param>
/// <param name="_key01"> 属性1-key </param>
/// <param name="_value01"> 属性1-value </param>
/// <param name="_key02"> 属性2-key </param>
/// <param name="_value02"> 属性2-value </param>
public void LogEventByUmeng(string _eventSort, string _key01, string _value01, string _key02, string _value02)
{
if (!string.IsNullOrEmpty(_eventSort) && !string.IsNullOrEmpty(_key01) && !string.IsNullOrEmpty(_value01) && !string.IsNullOrEmpty(_key02) && !string.IsNullOrEmpty(_value02))
{
LogEventByUmeng(_eventSort, new Dictionary<string, string>() { { _key01, _value01 }, { _key02, _value02 } });
}
}
/// <summary>
/// umeng 打点 - 事件名字 + 事件属性字典
/// </summary>
/// <param name="_eventSort"> 事件名字 </param>
/// <param name="_eventDic"> 事件属性字典 </param>
public void LogEventByUmeng(string _eventSort, Dictionary<string, string> _eventDic = null)
{
string eventStr = "UMENG LOG _eventSort : " + _eventSort + " -> ";
if (_eventDic != null)
{
foreach (var kvp in _eventDic)
{
eventStr += string.Format(" (Key = {0}, Value = {1} ) , ", kvp.Key, kvp.Value);
}
}
Debug.Log(eventStr);
#if !NO_SDK
#if UNITY_EDITOR
return;
#endif
if (!string.IsNullOrEmpty(_eventSort))
{
if (_eventDic != null && _eventDic.Count == 0)
{
Umeng.Analytics.Event(_eventSort);
}
else if (_eventDic != null && _eventDic.Count > 0)
{
Umeng.Analytics.Event(_eventSort, _eventDic);
}
else if (_eventDic == null)
{
Umeng.Analytics.Event(_eventSort);
}
}
else
{
Debug.LogError("UMENG Event Sort is Empty!");
}
#endif
}
/// <summary>
/// Umeng 打点广告按钮展示
/// </summary>
/// <param name="_adShow"></param>
public void LogEventByUmengAdShow(string _adShow)
{
if (!string.IsNullOrEmpty(_adShow))
{
LogEventByUmeng(StaticStringsEvent.Event_Sort_TKInner_ad_button_show, new System.Collections.Generic.Dictionary<string, string>() { { StaticStringsEvent.Event_Type_TKInner_ad_position, _adShow } });
}
}
#endregion
}
public enum ToukaLogType
{
GA = 1,
Tenjin = 1 << 6,
}
}