diff --git a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.5.aar b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.5.aar deleted file mode 100644 index 229ba41..0000000 Binary files a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.5.aar and /dev/null differ diff --git a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.5.aar.meta b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.5.aar.meta deleted file mode 100644 index dcbb5be..0000000 --- a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.5.aar.meta +++ /dev/null @@ -1,32 +0,0 @@ -fileFormatVersion: 2 -guid: 32eda01e213614348899eefe856392d3 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs b/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs index 5a63b54..930b53e 100644 --- a/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs +++ b/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs @@ -19,7 +19,6 @@ namespace Guru public string[] uploadIpAddress = null; public bool enableErrorLog = false; public bool isDebug = false; - public Action onInitComplete = null; } @@ -117,7 +116,7 @@ namespace Guru /// /// 初始化接口 /// - public static void Init(string appId, string deviceInfo, GuruAnalyticsInitConfig initConfig, Action onInitComplete = null) + public static void Init(string appId, string deviceInfo, GuruAnalyticsInitConfig initConfig, Action onInitComplete) { Debug.Log($"{Tag} --- Guru Analytics [{Version}] initialing..."); if (_instance == null) diff --git a/Runtime/GuruNetworkMonitor/Runtime/NetworkStatusMonitor.cs b/Runtime/GuruNetworkMonitor/Runtime/NetworkStatusMonitor.cs index 96353bd..17e2b93 100644 --- a/Runtime/GuruNetworkMonitor/Runtime/NetworkStatusMonitor.cs +++ b/Runtime/GuruNetworkMonitor/Runtime/NetworkStatusMonitor.cs @@ -1,13 +1,17 @@ + namespace Guru.Network { using Guru; using System; using UnityEngine; - + using System.Collections; + public class NetworkStatusMonitor { private const string Tag = "[NET]"; + private const string NETWORK_STATUS_NOT_SET = "not_set"; + private const string NETWORK_STATUS_NONE = "none"; private const string NETWORK_STATUS_MOBILE = "mobile"; private const string NETWORK_STATUS_WIFI = "wifi"; @@ -16,6 +20,31 @@ namespace Guru.Network private const string NETWORK_STATUS_TETHER = "tether"; private const string NETWORK_STATUS_BLUETOOTH = "bluetooth"; private const string NETWORK_STATUS_OTHER = "other"; + + private const int CHECK_STATUS_INTERVAL_SECOND = 10; + + private DateTime _lastReportTime; + // TODO: 最好做一下持久化存储 + private string LastNetworkStatus + { + get => PlayerPrefs.GetString(nameof(LastNetworkStatus), NETWORK_STATUS_NOT_SET); + set => PlayerPrefs.SetString(nameof(LastNetworkStatus), value); + } + + private readonly Action _onNetworkStatusChanged; + private readonly Action _onReportOffline; + + /// + /// 构造函数 + /// + /// + /// + public NetworkStatusMonitor(Action onNetworkStatusChanged, Action onReportOffline) + { + _onNetworkStatusChanged = onNetworkStatusChanged; + _onReportOffline = onReportOffline; + CoroutineHelper.Instance.StartCoroutine(OnCheckingNetworkStatus(CHECK_STATUS_INTERVAL_SECOND)); + } /// /// 获取网络状态 @@ -33,5 +62,62 @@ namespace Guru.Network return NETWORK_STATUS_NONE; } + /// + /// 用户是否已经失去了链接 + /// + /// + private bool IsUserOffline() => Application.internetReachability == NetworkReachability.NotReachable; + + /// + /// 当前是可以打点上报 + /// + /// + private bool CanSendReport() => DateTime.UtcNow.DayOfYear != _lastReportTime.DayOfYear && DateTime.UtcNow.Year != _lastReportTime.Year; + + /// + /// 设置打点时间 + /// + private void SetReportTime() => _lastReportTime = DateTime.UtcNow; + + private bool NeedReportOffline() + { + return IsUserOffline() && CanSendReport(); + } + + private void UpdateNetworkStatus() + { + var status = GetNetworkStatus(); +#if DEBUG + Debug.Log($"{Tag} --- Update network status:{status}"); +#endif + if (status != LastNetworkStatus) + { + _onNetworkStatusChanged(status); + } + + if (NeedReportOffline()) + { + SetReportTime(); + _onReportOffline?.Invoke(LastNetworkStatus); + Debug.Log($"{Tag} --- Report Offline: {LastNetworkStatus}"); + } + + LastNetworkStatus = status; + } + + /// + /// 每隔一段时间检测一次网络状态 + /// + /// + /// + private IEnumerator OnCheckingNetworkStatus(float interval) + { + while (true) + { + UpdateNetworkStatus(); + yield return new WaitForSeconds(interval); + } + } + } } \ No newline at end of file