352 lines
7.8 KiB
C#
352 lines
7.8 KiB
C#
namespace Guru
|
|
{
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using Firebase.Analytics;
|
|
using Firebase.Crashlytics;
|
|
using Firebase.Extensions;
|
|
using UnityEngine;
|
|
|
|
/// <summary>
|
|
/// 自打点逻辑
|
|
/// </summary>
|
|
public partial class Analytics
|
|
{
|
|
private static bool _hasGotFirebaseId; //已取得FirebaseId
|
|
private static bool _hasGotAdId; // 已取得AdId
|
|
private static bool _hasGotIDFA; // 已取得IDFA
|
|
private static bool _hasGotAdjustId; // 已取得AdjustId
|
|
private static bool _hasGotDeviceId; // 已取得DeviceId
|
|
private static bool _hasGotUid; // 已取得UID
|
|
private static DateTime _lastReportRateDate; //上次上报信息的日期
|
|
private static double _reportSuccessInterval; // 上报频率
|
|
|
|
private const string VALUE_NOT_FOR_IOS = "not_support_for_ios";
|
|
private const string VALUE_ONLY_FOR_IOS = "idfa_only_for_ios";
|
|
|
|
public static bool IsDebug { get; set; } = false;
|
|
|
|
private static bool _hasInited = false;
|
|
|
|
public static bool IsReady => _hasInited;
|
|
|
|
/// <summary>
|
|
/// 初始化Guru自打点系统 (请优先于 Firebase 初始化调用)
|
|
/// </summary>
|
|
public static void InstallGuruAnalytics(bool isDebug = false, bool enableErrorLog = false)
|
|
{
|
|
|
|
if (_hasInited) return;
|
|
|
|
try
|
|
{
|
|
#if UNITY_EDITOR
|
|
IsDebug = true;
|
|
#else
|
|
IsDebug = isDebug;
|
|
#endif
|
|
string appId = IPMConfig.IPM_X_APP_ID;
|
|
string deviceInfo = new DeviceInfoData().ToString();
|
|
GuruAnalytics.Init(appId, deviceInfo, IsDebug, enableErrorLog); // 初始化(带Header)
|
|
|
|
_hasGotFirebaseId = false;
|
|
_hasGotAdId = false;
|
|
_hasGotAdjustId = false;
|
|
_hasGotDeviceId = false;
|
|
_hasGotUid = false;
|
|
_lastReportRateDate = DateTime.Now;
|
|
_reportSuccessInterval = 120; // 2分钟上报一次
|
|
|
|
UpdateAllValues();
|
|
|
|
_hasInited = true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogCrashlytics(ex);
|
|
}
|
|
}
|
|
|
|
#region 各ID上报信息
|
|
|
|
/// <summary>
|
|
/// 设置用户ID
|
|
/// </summary>
|
|
private static void SetUid()
|
|
{
|
|
if (_hasGotUid) return;
|
|
|
|
if (!string.IsNullOrEmpty(IPMConfig.IPM_UID))
|
|
{
|
|
Debug.Log($"---[ANA] UID: {IPMConfig.IPM_UID}");
|
|
GuruAnalytics.SetUid(IPMConfig.IPM_UID);
|
|
FirebaseAnalytics.SetUserProperty(PropertyUserID, IPMConfig.IPM_UID);
|
|
_hasGotUid = true;
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置设备ID
|
|
/// </summary>
|
|
private static void SetDeviceId()
|
|
{
|
|
if (_hasGotDeviceId) return;
|
|
|
|
if (!string.IsNullOrEmpty(IPMConfig.IPM_DEVICE_ID))
|
|
{
|
|
GuruAnalytics.SetDeviceId(IPMConfig.IPM_DEVICE_ID);
|
|
FirebaseAnalytics.SetUserProperty(PropertyDeviceID, IPMConfig.IPM_DEVICE_ID);
|
|
_hasGotDeviceId = true;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置 AdjustId
|
|
/// </summary>
|
|
private static void SetAdjustId()
|
|
{
|
|
if (_hasGotAdjustId) return;
|
|
|
|
#if UNITY_EDITOR
|
|
string adjustId = "editor_fake_adjust_id";
|
|
#else
|
|
string adjustId = AdjustService.AdjustId;
|
|
#endif
|
|
|
|
if (!string.IsNullOrEmpty(adjustId))
|
|
{
|
|
IPMConfig.ADJUST_ID = adjustId;
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(IPMConfig.ADJUST_ID))
|
|
{
|
|
GuruAnalytics.SetAdjustId(IPMConfig.ADJUST_ID);
|
|
_hasGotAdjustId = true;
|
|
}
|
|
else
|
|
{
|
|
Debug.Log($"--- [ANA] AdjustId is Empty..");
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置 AdId
|
|
/// </summary>
|
|
private static void SetAdId()
|
|
{
|
|
if (_hasGotAdId) return;
|
|
|
|
#if UNITY_ANDROID
|
|
var adId = AdjustService.AdId;
|
|
if (!string.IsNullOrEmpty(adId))
|
|
{
|
|
// Debug.Log($"---[ANA] ADID: {adId}");
|
|
IPMConfig.ADJUST_ADID = adId;
|
|
}
|
|
#else
|
|
// ============= ADID is not supported on Adjust iOS API ==============
|
|
IPMConfig.ADJUST_ADID = VALUE_NOT_FOR_IOS;;
|
|
#endif
|
|
|
|
if (!string.IsNullOrEmpty(IPMConfig.ADJUST_ADID))
|
|
{
|
|
GuruAnalytics.SetAdId(IPMConfig.ADJUST_ADID);
|
|
_hasGotAdId = true;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 设置FirebaseId
|
|
/// </summary>
|
|
private static void SetFirebaseId()
|
|
{
|
|
if (_hasGotFirebaseId) return;
|
|
|
|
if (!string.IsNullOrEmpty(IPMConfig.FIREBASE_ID))
|
|
{
|
|
GuruAnalytics.SetFirebaseId(IPMConfig.FIREBASE_ID);
|
|
_hasGotFirebaseId = true;
|
|
}
|
|
else
|
|
{
|
|
FetchFirebaseId();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取FirebaseID
|
|
/// </summary>
|
|
private static void FetchFirebaseId()
|
|
{
|
|
FirebaseAnalytics.GetAnalyticsInstanceIdAsync()
|
|
.ContinueWithOnMainThread(task =>
|
|
{
|
|
if (task != null && task.IsCompleted)
|
|
{
|
|
var fid = task.Result;
|
|
if (!string.IsNullOrEmpty(fid)
|
|
&& string.IsNullOrEmpty(IPMConfig.FIREBASE_ID))
|
|
{
|
|
IPMConfig.FIREBASE_ID = fid;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
#if UNITY_IOS
|
|
/// <summary>
|
|
/// 更新ATT状态 (Only IOS 有效)
|
|
/// </summary>
|
|
private static void SetATTStatus()
|
|
{
|
|
string status = ATTManager.GetStatus();
|
|
GuruAnalytics.SetUserProperty(ParameterATTStatus, status);
|
|
}
|
|
|
|
private static void SetIDFV()
|
|
{
|
|
GuruAnalytics.SetIDFV(DeviceIDHelper.IDFV);
|
|
}
|
|
|
|
private static void SetIDFA()
|
|
{
|
|
if(_hasGotIDFA) return;
|
|
var idfa = AdjustService.IDFA;
|
|
|
|
if (!string.IsNullOrEmpty(idfa))
|
|
{
|
|
// Debug.Log($"---[ANA] ADID: {adId}");
|
|
IPMConfig.ADJUST_IDFA = idfa;
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(IPMConfig.ADJUST_IDFA))
|
|
{
|
|
GuruAnalytics.SetIDFA(IPMConfig.ADJUST_IDFA);
|
|
_hasGotIDFA = true;
|
|
}
|
|
}
|
|
|
|
#endif
|
|
|
|
#if UNITY_ANDROID
|
|
/// <summary>
|
|
/// 更新 Android ID 的参数
|
|
/// </summary>
|
|
private static void SetAndroidId()
|
|
{
|
|
GuruAnalytics.SetAndroidID(DeviceIDHelper.AndroidID);
|
|
}
|
|
#endif
|
|
|
|
/// <summary>
|
|
/// 获取全部ID
|
|
/// </summary>
|
|
private static void UpdateAllValues()
|
|
{
|
|
SetUid();
|
|
SetDeviceId();
|
|
SetAdjustId();
|
|
SetFirebaseId();
|
|
SetAdId();
|
|
|
|
#if UNITY_ANDROID
|
|
SetAndroidId();
|
|
#endif
|
|
|
|
#if UNITY_IOS
|
|
SetATTStatus();
|
|
SetIDFV();
|
|
SetIDFA();
|
|
#endif
|
|
ReportEventSuccessRate();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 上报事件成功率
|
|
/// </summary>
|
|
private static void ReportEventSuccessRate()
|
|
{
|
|
var interval = (DateTime.Now - _lastReportRateDate).TotalSeconds;
|
|
if (interval > _reportSuccessInterval)
|
|
{
|
|
GuruAnalytics.ReportEventSuccessRate();
|
|
_lastReportRateDate = DateTime.Now;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 自定义打点
|
|
|
|
/// <summary>
|
|
/// 自定义设置用户属性
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <param name="value"></param>
|
|
private static void CustomSetUserProperty(string key, string value)
|
|
{
|
|
try
|
|
{
|
|
GuruAnalytics.SetUserProperty(key, value);
|
|
UpdateAllValues(); // 同步所有的ID
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Crashlytics.LogException(e);
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 自定义事件打点
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <param name="data"></param>
|
|
private static void CustomLogEvent(string key, Dictionary<string, dynamic> data = null, int priority = -1)
|
|
{
|
|
try
|
|
{
|
|
if (data == null) data = new Dictionary<string, dynamic>();
|
|
GuruAnalytics.LogEvent(key, data, priority);
|
|
UpdateAllValues(); // 同步所有的ID
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Crashlytics.LogException(e);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置太极02阀值
|
|
/// </summary>
|
|
/// <param name="value"></param>
|
|
public static void SetTch02TargetValue(double value)
|
|
{
|
|
try
|
|
{
|
|
if (value > 0)
|
|
{
|
|
EnableTch02Event = true; // 自动开启太极02打点设置
|
|
if (Math.Abs(_tch02TargetValue - value) > 0.001d)
|
|
{
|
|
_tch02TargetValue = value;
|
|
GuruAnalytics.SetTch02Value(value);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Crashlytics.LogException(e);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |