namespace Guru { using UnityEngine; using System; public partial class GuruSDK: MonoBehaviour { public const string Version = "0.1.0"; public static readonly string Tag = "[Guru]"; private static GuruSDK _instance; /// /// 单利引用 /// public static GuruSDK Instance { get { if(null == _instance) { _instance = CreateInstance(); } return _instance; } } private GuruSDKInitConfig _initConfig; private Action _onCompleteCallback; private static GuruSDKModel _model; internal static GuruSDKInitConfig InitConfig => Instance._initConfig; internal static GuruSDKModel Model => GuruSDKModel.Instance; /// /// Debug Mode /// public static bool IsDebugMode { get { #if UNITY_EDITOR || DEBUG return true; #endif return false; } } #region 初始化 private static GuruSDK CreateInstance() { var go = new GameObject(nameof(GuruSDK)); DontDestroyOnLoad(go); _instance = go.AddComponent(); return _instance; } public static void Init(Action onComplete) { Init(GuruSDKInitConfig.Build(), onComplete); } public static void Init(GuruSDKInitConfig config, Action onComplete) { LogI($"---- Guru SDK init ----"); LogI(config.ToString()); Instance.StartWithConfig(config, onComplete); } /// /// 启动SDK /// /// /// private void StartWithConfig(GuruSDKInitConfig config, Action onComplete) { Model.PropBLevel.OnValueChanged += OnBLevelChanged; Model.PropBPlay.OnValueChanged += OnBPlayChanged; _initConfig = config; _onCompleteCallback = onComplete; //---------- Start Firebase ------------ FirebaseUtil.InitFirebase(OnFirebaseReady); FirebaseUtil.OnFetchRemoteSuccess += OnFetchRemoteSuccess; //---------- Start Facebook ------------ FBService.Instance.StartService(); } private void OnFetchRemoteSuccess() { Callbacks.Remote._onRemoteFetchComplete?.Invoke(); } /// /// 开始各种组件初始化 /// private void OnFirebaseReady() { LogI($"--- #1 SDK Init complete ---"); if (InitConfig.IAPEnabled) { LogI($"--- #2 Init IAP ---"); InitIAP(_initConfig.GoogleKeys, _initConfig.AppleRootCerts); // 初始化IAP } if (!InitConfig.UseCustomConsent) { LogI($"--- #3 Start Consent Flow ---"); StartConsentFlow(); } //TODO: 开始Remote初始化 if(!string.IsNullOrEmpty(IPMConfig.IPM_UID)) SetUID(IPMConfig.IPM_UID); _onCompleteCallback?.Invoke(true); } private void OnBLevelChanged(int blevel) { SetUserBLevel(blevel); } private void OnBPlayChanged(int bplay) { SetUserBPlay(bplay); } #endregion #region Misc /// /// 打开页面 /// /// public static void OpenURL(string url) { GuruWebview.OpenPage(url); } #endregion #region Logging public static void LogI(object message) { Debug.Log($"{Tag} {message}"); } public static void LogW(object message) { Debug.LogWarning($"{Tag} {message}"); } public static void LogE(object message) { Debug.LogError($"{Tag} {message}"); } #endregion } }