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