com.guru.unity.sdk/Runtime/Code/Core/GuruSDK.cs

175 lines
4.3 KiB
C#

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;
/// <summary>
/// 单利引用
/// </summary>
public static GuruSDK Instance
{
get
{
if(null == _instance)
{
_instance = CreateInstance();
}
return _instance;
}
}
private GuruSDKInitConfig _initConfig;
private Action<bool> _onCompleteCallback;
private static GuruSDKModel _model;
internal static GuruSDKInitConfig InitConfig => Instance._initConfig;
internal static GuruSDKModel Model => GuruSDKModel.Instance;
/// <summary>
/// Debug Mode
/// </summary>
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<GuruSDK>();
return _instance;
}
public static void Init(Action<bool> onComplete)
{
Init(GuruSDKInitConfig.Build(), onComplete);
}
public static void Init(GuruSDKInitConfig config, Action<bool> onComplete)
{
LogI($"---- Guru SDK init ----");
LogI(config.ToString());
Instance.StartWithConfig(config, onComplete);
}
/// <summary>
/// 启动SDK
/// </summary>
/// <param name="config"></param>
/// <param name="onComplete"></param>
private void StartWithConfig(GuruSDKInitConfig config, Action<bool> 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();
}
/// <summary>
/// 开始各种组件初始化
/// </summary>
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
/// <summary>
/// 打开页面
/// </summary>
/// <param name="url"></param>
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
}
}