update: 优化 GuruSDK 初始化配置。 添加 Builder 模式
							parent
							
								
									42c7302ea3
								
							
						
					
					
						commit
						48c5235335
					
				|  | @ -7,7 +7,7 @@ namespace Guru | |||
|     /// <summary> | ||||
|     /// 启动参数配置 | ||||
|     /// </summary> | ||||
|     public partial class GuruSDKInitConfig | ||||
|     public class GuruSDKInitConfig | ||||
|     { | ||||
|         /// <summary> | ||||
|         /// 使用自定义的ConsentFlow启动流程 | ||||
|  | @ -58,6 +58,10 @@ namespace Guru | |||
|         /// 启用 AdjustDeeplink | ||||
|         /// </summary> | ||||
|         public Action<string> OnAdjustDeeplinkCallback = null; | ||||
|         /// <summary> | ||||
|         /// 自打点启动参数 | ||||
|         /// </summary> | ||||
|         public GuruAnalyticsInitConfig CustomAnalyticsInitConfig = null; | ||||
|          | ||||
|         /// <summary> | ||||
|         /// 支付初始化Keys | ||||
|  | @ -65,51 +69,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 +93,100 @@ 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 SetCustomAnalyticsInitConfig(GuruAnalyticsInitConfig value) | ||||
|         { | ||||
|             _config.CustomAnalyticsInitConfig = value; | ||||
|             return this; | ||||
|         } | ||||
|         public GuruSDKInitConfigBuilder SetCustomServiceKey(string value) | ||||
|         { | ||||
|             _config.CustomServiceKey = value; | ||||
|             return this; | ||||
|         } | ||||
|         public GuruSDKInitConfigBuilder SetAutoNotificationPermission(bool value) | ||||
|         { | ||||
|             _config.AutoNotificationPermission = value; | ||||
|             return this; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -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 回调  | ||||
|  |  | |||
|  | @ -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> | ||||
|  | @ -798,6 +705,132 @@ namespace Guru | |||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         #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); | ||||
|              | ||||
|             // 初始化自打点 | ||||
|             var config = InitConfig.CustomAnalyticsInitConfig; // 获取外置的启动配置 | ||||
|             if (config == null) | ||||
|             { | ||||
|                 // 创建默认的配置 | ||||
|                 config = new GuruAnalyticsInitConfig(); | ||||
|             } | ||||
| 
 | ||||
|             Analytics.InitGuruAnalyticService(config, 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 | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue