Compare commits

...

3 Commits

Author SHA1 Message Date
胡宇飞 257f9796a5 update: 自打点升级 1.1.1, 外层代码优化
--story=1021175 --user=yufei.hu 【中台】【自打点】自打点升级 1.1.1, 并添加云控数据获取逻辑 https://www.tapd.cn/33527076/s/1161159
2024-08-01 12:45:33 +08:00
胡宇飞 fd01939a5f update: 重构 networkstatus 方法和规范值 2024-08-01 00:17:01 +08:00
胡宇飞 48c5235335 update: 优化 GuruSDK 初始化配置。 添加 Builder 模式 2024-07-31 20:59:36 +08:00
5 changed files with 233 additions and 173 deletions

View File

@ -7,7 +7,7 @@ namespace Guru
/// <summary>
/// 启动参数配置
/// </summary>
public partial class GuruSDKInitConfig
public class GuruSDKInitConfig
{
/// <summary>
/// 使用自定义的ConsentFlow启动流程
@ -65,51 +65,6 @@ namespace Guru
public byte[] GoogleKeys; // 数据取自 GooglePlayTangle.Data();
public byte[] AppleRootCerts; // 数据取自 AppleTangle.Data();
#region Initialization
/// <summary>
/// 构建启动配置
/// </summary>
/// <returns></returns>
public static GuruSDKInitConfig Build(
bool useCustomConsent = false,
bool autoLoadAds = true,
bool iapEnabled = true,
bool autoRecordFinishedLevels = true,
bool isBuyNoAds = false,
string bannerBackgroundColor = "#00000000",
bool debugMode = false,
Action<string> onAdjustDeeplinkCallback = null,
Dictionary<string, object> defaultRemoteData = null,
byte[] googleKeys = null,
byte[] appleRootCerts = null,
bool debugEnableEventLog = false)
{
// 创建启动用参数
GuruSDKInitConfig config = new GuruSDKInitConfig()
{
UseCustomConsent = useCustomConsent,
AutoLoadWhenAdsReady = autoLoadAds,
IAPEnabled = iapEnabled,
AutoRecordFinishedLevels = autoRecordFinishedLevels,
IsBuyNoAds = isBuyNoAds,
BannerBackgroundColor = bannerBackgroundColor,
DebugMode = debugMode,
OnAdjustDeeplinkCallback = onAdjustDeeplinkCallback,
GoogleKeys = googleKeys,
AppleRootCerts = appleRootCerts,
DefaultRemoteData = defaultRemoteData ?? new Dictionary<string, object>(),
EnableDebugLogEvent = debugEnableEventLog,
};
#if UNITY_EDITOR
config.DebugMode = true;
#endif
return config;
}
#endregion
#region Print
public override string ToString()
@ -134,4 +89,95 @@ namespace Guru
#endregion
}
/// <summary>
/// 构建器
/// </summary>
public class GuruSDKInitConfigBuilder
{
private GuruSDKInitConfig _config = new GuruSDKInitConfig();
/// <summary>
/// 构建配置
/// </summary>
/// <returns></returns>
public GuruSDKInitConfig Build()
{
return _config;
}
public GuruSDKInitConfigBuilder SetUseCustomConsent(bool value)
{
_config.UseCustomConsent = value;
return this;
}
public GuruSDKInitConfigBuilder SetAutoLoadWhenAdsReady(bool value)
{
_config.AutoLoadWhenAdsReady = value;
return this;
}
public GuruSDKInitConfigBuilder SetIAPEnabled(bool value)
{
_config.IAPEnabled = value;
return this;
}
public GuruSDKInitConfigBuilder SetAutoRecordFinishedLevels(bool value)
{
_config.AutoRecordFinishedLevels = value;
return this;
}
public GuruSDKInitConfigBuilder SetIsBuyNoAds(bool value)
{
_config.IsBuyNoAds = value;
return this;
}
public GuruSDKInitConfigBuilder SetBannerBackgroundColor(string value)
{
_config.BannerBackgroundColor = value;
return this;
}
public GuruSDKInitConfigBuilder SetDebugMode(bool value)
{
_config.DebugMode = value;
return this;
}
public GuruSDKInitConfigBuilder SetOnAdjustDeeplinkCallback(Action<string> callback)
{
_config.OnAdjustDeeplinkCallback = callback;
return this;
}
public GuruSDKInitConfigBuilder SetGoogleKeys(byte[] value)
{
_config.GoogleKeys = value;
return this;
}
public GuruSDKInitConfigBuilder SetAppleRootCerts(byte[] value)
{
_config.AppleRootCerts = value;
return this;
}
public GuruSDKInitConfigBuilder SetDefaultRemoteData(Dictionary<string, object> value)
{
_config.DefaultRemoteData = value;
return this;
}
public GuruSDKInitConfigBuilder SetEnableDebugLogEvent(bool value)
{
_config.EnableDebugLogEvent = value;
return this;
}
public GuruSDKInitConfigBuilder SetCustomServiceKey(string value)
{
_config.CustomServiceKey = value;
return this;
}
public GuruSDKInitConfigBuilder SetAutoNotificationPermission(bool value)
{
_config.AutoNotificationPermission = value;
return this;
}
}
}

View File

@ -1,8 +1,9 @@
using System;
using System.Collections.Generic;
namespace Guru
{
using System;
using UnityEngine.Serialization;
[Serializable]
public class GuruServicesConfig
@ -61,7 +62,7 @@ namespace Guru
public string DMAMapRule() => parameters?.dma_map_rule ?? "";
public bool UseUUID() => parameters?.using_uuid ?? false;
public bool KeywordsEnabled() => parameters?.enable_keywords ?? false;
public int TokenValidTime() => parameters?.token_vaild_time ?? 604800;
public int TokenValidTime() => parameters?.token_valid_time ?? 604800;
public int LevelEndSuccessNum() => parameters?.level_end_success_num ?? 50;
public string CdnHost() => parameters?.cdn_host ?? "";
public bool UsingUUID() => parameters?.using_uuid ?? true;
@ -91,7 +92,7 @@ namespace Guru
[Serializable]
public class GuruParameters
{
public int token_vaild_time = 604800;
public int token_valid_time = 604800;
public int level_end_success_num = 50;
public bool enable_keywords = false;
public double tch_020 = 0;

View File

@ -21,14 +21,7 @@ namespace Guru
/// <param name="priority"></param>
public static void LogEvent(string eventName, Dictionary<string, dynamic> data = null, int priority = -1)
{
// if (!IsInitialSuccess)
// {
// UnityEngine.Debug.LogError($"{Tag} :: LogEvent {eventName} :: Please call <GuruSDK.Start()> first, before you call <LogEvent>.");
// return;
// }
if(priority < 0) priority = GetEventPriorityInt(eventName);
Analytics.Track(eventName, data, null, priority);
}

View File

@ -334,25 +334,25 @@ namespace Guru
}
private static Action<bool> _onUserAuthResult;
public static event Action<bool> OnUserAuthResult
public static event Action<bool> OnGuruUserAuthResult
{
add => _onUserAuthResult += value;
remove => _onUserAuthResult -= value;
}
internal static void InvokeOnUserAuthResult(bool success)
internal static void InvokeOnGuruUserAuthResult(bool success)
{
_onUserAuthResult?.Invoke(success);
}
private static Action<bool> _onFirebaseAuthResult;
public static event Action<bool> OnFirebaseAuthResult
private static Action<bool> _onFirebaseUserAuthResult;
public static event Action<bool> OnFirebaseUserAuthResult
{
add => _onFirebaseAuthResult += value;
remove => _onFirebaseAuthResult -= value;
add => _onFirebaseUserAuthResult += value;
remove => _onFirebaseUserAuthResult -= value;
}
internal static void InvokeOnFirebaseAuthResult(bool success)
{
_onFirebaseAuthResult?.Invoke(success);
_onFirebaseUserAuthResult?.Invoke(success);
}
// DeepLink 回调

View File

@ -89,33 +89,10 @@ namespace Guru
}
// TODO : 下个版本需要将 整个 GuruSDK 做功能性的拆分
// GuruSDk.Callbacks -> GuruSDkCallbacks 所有的内置回调改为成员变量,
// 去掉所有的内部类, 去掉所有的 Static
// Static 只用于常量
// TODO: 下一个版本改为标准的 Builder 模式
public static GuruSDKInitConfig BuildConfig(
bool useCustomConsent = false,
bool autoLoadAds = true,
bool iapEnabled = true,
bool autoRecordFinishedLevels = true,
bool debugMode = false,
bool isBuyNoAds = false,
Action<string> onAdjustDeeplinkCallback = null,
string bannerColor = "#00000000",
Dictionary<string, object> defaultRemoteData = null,
byte[] googleKeys = null,
byte[] appleRootCerts = null,
bool debugEnableEventLog = false)
{
var config = GuruSDKInitConfig.Build(useCustomConsent, autoLoadAds, iapEnabled,
autoRecordFinishedLevels, isBuyNoAds, bannerColor,
debugMode, onAdjustDeeplinkCallback, defaultRemoteData, googleKeys, appleRootCerts, debugEnableEventLog);
return config;
}
public static void Init(Action<bool> onComplete)
{
Init(GuruSDKInitConfig.Build(), onComplete);
Init(new GuruSDKInitConfigBuilder().Build(), onComplete);
}
public static void Init(GuruSDKInitConfig config, Action<bool> onComplete)
@ -155,12 +132,11 @@ namespace Guru
private void InitServices()
{
Analytics.InitAnalytics(); // 打点提前初始化
Analytics.Init(); // 打点提前初始化
//---- Start All tools ----
LogI($"#2 --- InitFirebase ---");
//---------- Start Firebase ------------
StartFirebaseService();
LogI($"#2.1 --- InitFacebook ---");
//---------- Start Facebook ------------
FBService.Instance.StartService(Analytics.OnFBInitComplete);
@ -168,75 +144,6 @@ namespace Guru
IsInitialSuccess = true;
}
/// <summary>
/// 启动 Firebase 服务
/// </summary>
private void StartFirebaseService()
{
FirebaseUtil.onInitComplete += OnFirebaseReady;
FirebaseUtil.OnUserAuthResult += OnUserAuthResult;
FirebaseUtil.OnFirebaseAuthResult += OnFirebaseAuthResult;
if (InitConfig.OnAdjustDeeplinkCallback != null)
{
//TODO: 下个版本 AdjustService 和 Firebase 解耦
FirebaseUtil.OnAdjustDeeplinkCallback = InitConfig.OnAdjustDeeplinkCallback; // 挂载 Deeplink 的回调
}
FirebaseUtil.InitFirebase(Analytics.OnFirebaseInitCompleted); // 确保所有的逻辑提前被调用到
}
private void OnUserAuthResult(bool success)
{
if (success && string.IsNullOrEmpty(IPMConfig.IPM_UID))
{
success = false;
}
Callbacks.SDK.InvokeOnUserAuthResult(success);
if (success)
{
Model.UserId = IPMConfig.IPM_UID;
if (GuruIAP.Instance != null)
{
GuruIAP.Instance.SetUID(UID);
GuruIAP.Instance.SetUUID(UUID);
}
SetUID(UID);
}
}
private void OnFirebaseAuthResult(bool success)
{
Callbacks.SDK.InvokeOnFirebaseAuthResult(success);
}
/// <summary>
/// 开始各种组件初始化
/// </summary>
private void OnFirebaseReady(bool success)
{
FirebaseUtil.onInitComplete -= OnFirebaseReady;
LogI($"#3 --- On FirebaseDeps: {success} ---");
IsFirebaseReady = success;
Callbacks.SDK.InvokeOnFirebaseReady(success);
// LogFirebaseDeps(success);
LogI($"#3.5 --- Call InitRemoteConfig ---");
// 开始Remote Manager初始化
RemoteConfigManager.Init(BuildDefaultRemoteData(_initConfig.DefaultRemoteData));
RemoteConfigManager.OnFetchCompleted += OnFetchRemoteCallback;
LogI($"#4 --- Apply remote services config ---");
// 根据缓存的云控配置来初始化参数
InitAllGuruServices();
}
/// <summary>
/// 注入云控参数基础数据
/// </summary>
@ -264,8 +171,6 @@ namespace Guru
Callbacks.Remote.InvokeOnRemoteFetchComplete(success);
}
private void Update()
{
UpdateAllUpdates(); // 驱动所有的更新器
@ -274,6 +179,8 @@ namespace Guru
#endregion
#region App Remote Update
/// <summary>
@ -437,7 +344,6 @@ namespace Guru
#endif
LogI($"#5 --- sync sdk time ---");
// TODO: 本调用放在这里不合适, 应该和 Firebase 解耦
LogSDKInitTime((DateTime.Now.ToUniversalTime() - _initTime).TotalSeconds);
}
@ -780,24 +686,138 @@ namespace Guru
private NetworkStatusMonitor _networkStatusMonitor;
private string _networkStatus;
private string _lastNetworkStatus;
private void InitNetworkMonitor()
{
// SetUserProperty(Consts.PropertyNetwork, GetNetworkStatus());
// TODO: 下个版本加入真正的自动更新网络状态的实现
}
private string GetNetworkStatus()
{
if(_networkStatusMonitor == null)
_networkStatusMonitor = new NetworkStatusMonitor(status =>
{
_networkStatusMonitor = new NetworkStatusMonitor();
}
return _networkStatusMonitor.GetNetworkStatus();
SetUserProperty(Consts.PropertyNetwork, status);
}, lastStatus =>
{
LogEvent("guru_offline", new Dictionary<string, dynamic>()
{
["from"] = lastStatus
});
});
}
/// <summary>
/// 获取当前的网络状态
/// </summary>
/// <returns></returns>
private string GetNetworkStatus() => _networkStatusMonitor.GetNetworkStatus();
#endregion
#region Firebase 服务
/// <summary>
/// 启动 Firebase 服务
/// </summary>
private void StartFirebaseService()
{
FirebaseUtil.Init(OnFirebaseDepsCheckResult,
OnGetFirebaseId,
OnGetGuruUID,
OnFirebaseLoginResult); // 确保所有的逻辑提前被调用到
}
private void OnGetGuruUID(bool success)
{
Callbacks.SDK.InvokeOnGuruUserAuthResult(success);
if (success)
{
Model.UserId = IPMConfig.IPM_UID;
if (GuruIAP.Instance != null)
{
GuruIAP.Instance.SetUID(UID);
GuruIAP.Instance.SetUUID(UUID);
}
SetUID(UID);
}
}
private void OnGetFirebaseId(string fid)
{
// 初始化 Adjust 服务
InitAdjustService(fid, InitConfig.OnAdjustDeeplinkCallback);
// 初始化自打点
Analytics.InitGuruAnalyticService(fid);
}
private void OnFirebaseLoginResult(bool success)
{
Callbacks.SDK.InvokeOnFirebaseAuthResult(success);
}
/// <summary>
/// 开始各种组件初始化
/// </summary>
private void OnFirebaseDepsCheckResult(bool success)
{
LogI($"#3 --- On FirebaseDeps: {success} ---");
IsFirebaseReady = success;
Callbacks.SDK.InvokeOnFirebaseReady(success);
Analytics.OnFirebaseInitCompleted();
LogI($"#3.5 --- Call InitRemoteConfig ---");
// 开始Remote Manager初始化
RemoteConfigManager.Init(BuildDefaultRemoteData(_initConfig.DefaultRemoteData));
RemoteConfigManager.OnFetchCompleted += OnFetchRemoteCallback;
LogI($"#4 --- Apply remote services config ---");
// 根据缓存的云控配置来初始化参数
InitAllGuruServices();
}
#endregion
#region Adjust服务
/// <summary>
/// 启动 Adjust 服务
/// </summary>
private static void InitAdjustService(string firebaseId, Action<string> onDeeplinkCallback = null)
{
// 启动 AdjustService
string appToken = GuruSettings.Instance.AdjustSetting?.GetAppToken() ?? "";
string fbAppId = GuruSettings.Instance.IPMSetting.FacebookAppId;
if (!string.IsNullOrEmpty(IPMConfig.ADJUST_ID))
ReportAdjustId(IPMConfig.ADJUST_ID); // 二次启动后,若有值则立即上报属性
AdjustService.StartService(appToken, fbAppId, firebaseId, DeviceId,
OnGetAdjustId, onDeeplinkCallback);
}
private static void OnGetAdjustId(string adjustId)
{
// 获取 ADID
if (string.IsNullOrEmpty(adjustId))
{
adjustId = "not_set";
}
else
{
IPMConfig.ADJUST_ID = adjustId;
}
ReportAdjustId(adjustId);
Analytics.OnAdjustInitComplete();
}
private static void ReportAdjustId(string adjustId)
{
SetUserProperty("adjust_id", adjustId);
Debug.Log($"[SDK] --- Firebase + Adjust ID: {adjustId}");
}
#endregion
}
}