2023-12-26 03:40:48 +00:00
|
|
|
|
2024-03-20 07:40:22 +00:00
|
|
|
|
|
|
|
|
|
2023-12-26 03:40:48 +00:00
|
|
|
namespace Guru
|
|
|
|
|
{
|
2024-03-20 07:40:22 +00:00
|
|
|
using System;
|
2023-12-26 03:40:48 +00:00
|
|
|
using System.Collections.Generic;
|
2024-01-08 02:22:56 +00:00
|
|
|
using UnityEngine;
|
2023-12-26 03:40:48 +00:00
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 打点管理
|
|
|
|
|
/// </summary>
|
|
|
|
|
public partial class GuruSDK
|
|
|
|
|
{
|
2024-01-23 09:15:40 +00:00
|
|
|
/// <summary>
|
|
|
|
|
/// 主线关卡类型
|
|
|
|
|
/// 只有传入此类型时才会进行 Blevel 的累加
|
|
|
|
|
/// </summary>
|
|
|
|
|
public const string LevelCategoryMain = "main";
|
|
|
|
|
|
2023-12-26 03:40:48 +00:00
|
|
|
//----------------- 关卡开始类型 ---------------------
|
|
|
|
|
public const string EventLevelStartModePlay = "play";
|
|
|
|
|
public const string EventLevelStartModeReplay = "replay";
|
|
|
|
|
public const string EventLevelStartModeContinue= "continue";
|
|
|
|
|
|
|
|
|
|
//----------------- 关卡结束类型 ---------------------
|
|
|
|
|
public const string EventLevelEndSuccess = "success";
|
|
|
|
|
public const string EventLevelEndFail = "fail";
|
|
|
|
|
public const string EventLevelEndExit = "exit";
|
|
|
|
|
public const string EventLevelEndTimeout = "timeout";
|
|
|
|
|
|
|
|
|
|
#region 通用接口
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 自定义事件打点
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="eventName"></param>
|
|
|
|
|
/// <param name="data"></param>
|
|
|
|
|
public static void LogEvent(string eventName, Dictionary<string, dynamic> data = null)
|
2024-01-08 03:31:58 +00:00
|
|
|
{
|
|
|
|
|
if (!IsInitialSuccess)
|
|
|
|
|
{
|
2024-04-09 08:58:08 +00:00
|
|
|
Debug.LogError($"{Tag} :: LogEvent {eventName} :: Please call <GuruSDK.Start()> first, before you call <LogEvent>.");
|
2024-01-08 03:31:58 +00:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Analytics.Track(eventName, data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void SetScreen(string screen, string extra = "")
|
|
|
|
|
{
|
|
|
|
|
if (!IsInitialSuccess)
|
|
|
|
|
{
|
2024-04-09 08:58:08 +00:00
|
|
|
Debug.LogError($"{Tag} :: SetScreen {screen} :: Please call <GuruSDK.Start()> first, before you call <SetScreen>.");
|
2024-01-08 03:31:58 +00:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Analytics.SetCurrentScreen(screen, extra);
|
|
|
|
|
}
|
2023-12-26 03:40:48 +00:00
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 游戏打点
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 游戏启动打点
|
|
|
|
|
/// </summary>
|
2024-04-02 07:27:34 +00:00
|
|
|
/// <param name="levelId"></param>
|
2023-12-26 03:40:48 +00:00
|
|
|
/// <param name="levelName"></param>
|
|
|
|
|
/// <param name="levelCategory"></param>
|
|
|
|
|
/// <param name="levelID"></param>
|
|
|
|
|
/// <param name="startType"></param>
|
|
|
|
|
/// <param name="isReplay"></param>
|
2024-04-02 07:27:34 +00:00
|
|
|
public static void LogLevelStart(int levelId, string startType = EventLevelStartModePlay,
|
2024-01-23 09:15:40 +00:00
|
|
|
string levelCategory = LevelCategoryMain, string levelName = "", string levelID = "",
|
2023-12-26 03:40:48 +00:00
|
|
|
bool isReplay = false)
|
|
|
|
|
{
|
2024-01-08 02:22:56 +00:00
|
|
|
if (!IsInitialSuccess)
|
|
|
|
|
{
|
2024-04-09 08:58:08 +00:00
|
|
|
Debug.LogError($"{Tag} :: LogLevelStart {levelId} :: Please call <GuruSDK.Start()> first, before you call <LogLevelStart>.");
|
2024-01-08 02:22:56 +00:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-02 07:27:34 +00:00
|
|
|
Analytics.LogLevelStart(levelId, levelName, levelCategory, levelID, startType, isReplay);
|
2023-12-26 03:40:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 游戏点击 Continue 重开始游戏
|
|
|
|
|
/// </summary>
|
2024-04-02 07:27:34 +00:00
|
|
|
/// <param name="levelId"></param>
|
2023-12-26 03:40:48 +00:00
|
|
|
/// <param name="levelCategory"></param>
|
|
|
|
|
/// <param name="levelName"></param>
|
|
|
|
|
/// <param name="levelID"></param>
|
2024-04-02 07:27:34 +00:00
|
|
|
public static void LogLevelContinue(int levelId, string levelCategory = LevelCategoryMain,
|
2023-12-26 03:40:48 +00:00
|
|
|
string levelName = "", string levelID = "")
|
|
|
|
|
{
|
2024-04-02 07:27:34 +00:00
|
|
|
LogLevelStart(levelId, EventLevelStartModeContinue, levelCategory, levelName, levelID, true);
|
2023-12-26 03:40:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 游戏点击 Continue 重开始游戏
|
|
|
|
|
/// </summary>
|
2024-04-02 07:27:34 +00:00
|
|
|
/// <param name="levelId"></param>
|
2023-12-26 03:40:48 +00:00
|
|
|
/// <param name="levelCategory"></param>
|
|
|
|
|
/// <param name="levelName"></param>
|
|
|
|
|
/// <param name="levelID"></param>
|
2024-04-02 07:27:34 +00:00
|
|
|
public static void LogLevelReplay(int levelId, string levelCategory = LevelCategoryMain,
|
2023-12-26 03:40:48 +00:00
|
|
|
string levelName = "", string levelID = "")
|
|
|
|
|
{
|
2024-04-02 07:27:34 +00:00
|
|
|
LogLevelStart(levelId, EventLevelStartModeReplay,levelCategory, levelName, levelID, true);
|
2023-12-26 03:40:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 游戏胜利打点
|
|
|
|
|
/// </summary>
|
2024-04-02 07:27:34 +00:00
|
|
|
public static void LogLevelEnd(int levelId, string result = EventLevelEndSuccess,
|
2024-01-23 09:15:40 +00:00
|
|
|
string levelCategory = LevelCategoryMain, string levelName = "", string levelID = "",
|
2023-12-26 03:40:48 +00:00
|
|
|
int? duration = null, int? step = null, int? score = null )
|
|
|
|
|
{
|
2024-01-08 03:31:58 +00:00
|
|
|
if (!IsInitialSuccess)
|
|
|
|
|
{
|
2024-04-09 08:58:08 +00:00
|
|
|
Debug.LogError($"{Tag} :: LogLevelEnd {levelId} :: Please call <GuruSDK.Start()> first, before you call <LogLevelEnd>.");
|
2024-01-08 03:31:58 +00:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-26 03:40:48 +00:00
|
|
|
if (InitConfig.AutoRecordFinishedLevels)
|
|
|
|
|
{
|
2024-01-23 09:15:40 +00:00
|
|
|
if(result == EventLevelEndSuccess){
|
2024-04-02 07:27:34 +00:00
|
|
|
if(levelCategory == LevelCategoryMain)
|
|
|
|
|
{
|
|
|
|
|
if (levelId > Model.SuccessLevelId) Model.SuccessLevelId = levelId; // 自动记录关卡完成次数
|
|
|
|
|
}
|
2024-01-23 09:15:40 +00:00
|
|
|
Model.TotalPlayedCount++; // 自动记录关卡总次数
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-26 03:40:48 +00:00
|
|
|
|
2024-04-02 07:27:34 +00:00
|
|
|
Analytics.BLevel = Model.SuccessLevelId; // 记录 BLevel
|
2023-12-26 03:40:48 +00:00
|
|
|
Analytics.BPlay = Model.TotalPlayedCount; // 记录 BPlay
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-02 07:27:34 +00:00
|
|
|
Analytics.LogLevelEnd(levelId, result,
|
2023-12-26 03:40:48 +00:00
|
|
|
levelName, levelCategory, levelCategory,
|
|
|
|
|
duration, step, score);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 游戏失败打点
|
|
|
|
|
/// 需要为游戏记录详细的失败原因
|
|
|
|
|
/// </summary>
|
2024-04-02 07:27:34 +00:00
|
|
|
public static void LogLevelFail(int levelId,
|
2024-01-23 09:15:40 +00:00
|
|
|
string levelCategory = LevelCategoryMain, string levelName = "", string levelID = "",
|
2023-12-26 03:40:48 +00:00
|
|
|
int? duration = null, int? step = null, int? score = null )
|
|
|
|
|
{
|
2024-04-02 07:27:34 +00:00
|
|
|
LogLevelEnd(levelId, EventLevelEndFail, levelCategory, levelName, levelID, duration, step, score);
|
2023-12-26 03:40:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 因退出关卡导致游戏失败
|
|
|
|
|
/// </summary>
|
2024-04-02 07:27:34 +00:00
|
|
|
public static void LogLevelFailExit(int levelId,
|
2024-01-23 09:15:40 +00:00
|
|
|
string levelCategory = LevelCategoryMain, string levelName = "", string levelID = "",
|
2023-12-26 03:40:48 +00:00
|
|
|
int? duration = null, int? step = null, int? score = null)
|
|
|
|
|
{
|
2024-04-02 07:27:34 +00:00
|
|
|
LogLevelEnd(levelId, EventLevelEndExit, levelCategory, levelName, levelID, duration, step, score);
|
2023-12-26 03:40:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 因关卡超时导致游戏失败
|
|
|
|
|
/// </summary>
|
2024-04-02 07:27:34 +00:00
|
|
|
public static void LogLevelFailTimeout(int levelId,
|
2024-01-23 09:15:40 +00:00
|
|
|
string levelCategory = LevelCategoryMain, string levelName = "", string levelID = "",
|
2023-12-26 03:40:48 +00:00
|
|
|
int? duration = null, int? step = null, int? score = null)
|
|
|
|
|
{
|
2024-04-02 07:27:34 +00:00
|
|
|
LogLevelEnd(levelId, EventLevelEndTimeout, levelCategory, levelName, levelID, duration, step, score);
|
2023-12-26 03:40:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 玩家(角色)升级事件
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="playerLevel"></param>
|
|
|
|
|
/// <param name="playerName"></param>
|
|
|
|
|
public static void LogLevelUp(int playerLevel, string playerName)
|
|
|
|
|
{
|
2024-01-08 03:31:58 +00:00
|
|
|
if (!IsInitialSuccess)
|
|
|
|
|
{
|
2024-04-09 08:58:08 +00:00
|
|
|
Debug.LogError($"{Tag} :: LogLevelUp {playerLevel} :: Please call <GuruSDK.Start()> first, before you call <LogLevelUp>.");
|
2024-01-08 03:31:58 +00:00
|
|
|
return;
|
|
|
|
|
}
|
2023-12-26 03:40:48 +00:00
|
|
|
Analytics.LevelUp(playerLevel, playerName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 玩家解锁成就
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="achievementName"></param>
|
|
|
|
|
public static void LogAchievement(string achievementName)
|
|
|
|
|
{
|
2024-01-08 03:31:58 +00:00
|
|
|
if (!IsInitialSuccess)
|
|
|
|
|
{
|
2024-04-09 08:58:08 +00:00
|
|
|
Debug.LogError($"{Tag} :: LogAchievement {achievementName} :: Please call <GuruSDK.Start()> first, before you call <LogAchievement>.");
|
2024-01-08 03:31:58 +00:00
|
|
|
return;
|
|
|
|
|
}
|
2023-12-26 03:40:48 +00:00
|
|
|
Analytics.UnlockAchievement(achievementName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 用户属性
|
|
|
|
|
|
2024-04-07 08:17:46 +00:00
|
|
|
/// <summary>
|
|
|
|
|
/// 提前调用用户属性
|
|
|
|
|
/// </summary>
|
|
|
|
|
private static void InitUserProperties()
|
|
|
|
|
{
|
|
|
|
|
if (!IsInitialSuccess)
|
|
|
|
|
{
|
2024-04-09 08:58:08 +00:00
|
|
|
Debug.LogError($"{Tag} :: InitUserProperties :: Please call <GuruSDK.Start()> first, before you call <InitUserProperties>.");
|
2024-04-07 08:17:46 +00:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SetUserIsIAP(Model.IsIAPUser); // 预先设置用户的 IAP User 属性
|
|
|
|
|
SetUserBLevel(Model.SuccessLevelId); // 预先设置用户的 BLevel 属性
|
|
|
|
|
SetUserBPlay(Model.TotalPlayedCount); // 预先设置用户的 BPlay 属性
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-26 03:40:48 +00:00
|
|
|
/// <summary>
|
|
|
|
|
/// 设置用户属性
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="key"></param>
|
|
|
|
|
/// <param name="value"></param>
|
|
|
|
|
public static void SetUserProperty(string key, string value)
|
2024-01-08 03:31:58 +00:00
|
|
|
{
|
|
|
|
|
if (!IsInitialSuccess)
|
|
|
|
|
{
|
2024-04-09 08:58:08 +00:00
|
|
|
Debug.LogError($"{Tag} :: SetUserProperty {key}:{value} ::Please call <GuruSDK.Start()> first, before you call <SetUserProperty>.");
|
2024-01-08 03:31:58 +00:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Analytics.SetUserProperty(key, value);
|
|
|
|
|
}
|
2023-12-26 03:40:48 +00:00
|
|
|
|
|
|
|
|
public static void SetUID(string uid)
|
|
|
|
|
{
|
|
|
|
|
SetUserProperty(Analytics.PropertyUserID, uid);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void SetUserBLevel(int blevel)
|
|
|
|
|
{
|
|
|
|
|
SetUserProperty(Analytics.PropertyLevel, $"{blevel}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void SetUserBPlay(int bplay)
|
|
|
|
|
{
|
|
|
|
|
SetUserProperty(Analytics.PropertyPlay, $"{bplay}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void SetUserTotalCoins(int totalCoins)
|
|
|
|
|
{
|
|
|
|
|
SetUserProperty(Analytics.PropertyCoin, $"{totalCoins}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void SetUserCoins(int coins)
|
|
|
|
|
{
|
|
|
|
|
SetUserProperty(Analytics.PropertyNonIAPCoin, $"{coins}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void SetUserPaidCoins(int paidCoins)
|
|
|
|
|
{
|
|
|
|
|
SetUserProperty(Analytics.PropertyIAPCoin, $"{paidCoins}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void SetUserExp(int exp)
|
|
|
|
|
{
|
|
|
|
|
SetUserProperty(Analytics.PropertyExp, $"{exp}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void SetUserHp(int hp)
|
|
|
|
|
{
|
|
|
|
|
SetUserProperty(Analytics.PropertyHp, $"{hp}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void SetUserGrade(int grade)
|
|
|
|
|
{
|
|
|
|
|
SetUserProperty(Analytics.PropertyGrade, $"{grade}");
|
|
|
|
|
}
|
2024-04-03 04:47:25 +00:00
|
|
|
|
|
|
|
|
public static void SetUserIsIAP(bool isIapUser)
|
|
|
|
|
{
|
|
|
|
|
SetUserProperty(Analytics.PropertyIsIAPUser, isIapUser? "true" : "false");
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-06 04:36:41 +00:00
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region SDK 打点
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Log SDK boost time
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="time"></param>
|
|
|
|
|
private static void LogSDKInitTime(double time)
|
|
|
|
|
{
|
2024-04-09 10:54:37 +00:00
|
|
|
Analytics.Track(Consts.EventSDKInfo, new Dictionary<string, dynamic>()
|
2024-03-06 04:36:41 +00:00
|
|
|
{
|
2024-04-09 10:54:37 +00:00
|
|
|
{ Consts.PropertyFirstOpenTime, time.ToString("F6") },
|
2024-03-15 04:59:20 +00:00
|
|
|
{ Consts.PropertyDeviceID, DeviceId },
|
|
|
|
|
}, new Analytics.EventSetting()
|
|
|
|
|
{
|
|
|
|
|
EnableFirebaseAnalytics = true,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void LogFirebaseDeps(bool success)
|
|
|
|
|
{
|
2024-04-09 10:54:37 +00:00
|
|
|
Analytics.Track(Consts.EventSDKInfo, new Dictionary<string, dynamic>()
|
2024-03-15 04:59:20 +00:00
|
|
|
{
|
2024-04-09 10:54:37 +00:00
|
|
|
{ Consts.ParameterItemName, $"fbs_done_{(success ? "true" : "false")}" },
|
2024-03-06 04:36:41 +00:00
|
|
|
}, new Analytics.EventSetting()
|
|
|
|
|
{
|
|
|
|
|
EnableFirebaseAnalytics = true,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-26 03:40:48 +00:00
|
|
|
#endregion
|
2024-03-20 07:40:22 +00:00
|
|
|
|
|
|
|
|
#region Crashlytics 接口
|
|
|
|
|
|
|
|
|
|
public static void CrashLog(string message)
|
|
|
|
|
{
|
|
|
|
|
if (!IsFirebaseReady) return;
|
|
|
|
|
CrashlyticsAgent.Log(message);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void CrashException(string message)
|
|
|
|
|
{
|
|
|
|
|
if (!IsFirebaseReady) return;
|
|
|
|
|
CrashlyticsAgent.LogException(message);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void CrashException(Exception ex)
|
|
|
|
|
{
|
|
|
|
|
if (!IsFirebaseReady) return;
|
|
|
|
|
CrashlyticsAgent.LogException(ex);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void CrashCustomKeys(string key, string value)
|
|
|
|
|
{
|
|
|
|
|
if (!IsFirebaseReady) return;
|
|
|
|
|
CrashlyticsAgent.SetCustomKey(key, value);
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
2023-12-26 03:40:48 +00:00
|
|
|
}
|
|
|
|
|
}
|