update: 完善 guru_offline 打点的本地持久化存储功能, CodeReview
--story=1021173 --user=yufei.hu 【中台】【BI】上报用户离线打点 guru_offline https://www.tapd.cn/33527076/s/1161158 Signed-off-by: huyufei <yufei.hu@castbox.fm>
parent
720b47dcbf
commit
a768b1de90
|
@ -10,7 +10,6 @@ namespace Guru.Network
|
|||
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";
|
||||
|
@ -23,16 +22,21 @@ namespace Guru.Network
|
|||
|
||||
private const int CHECK_STATUS_INTERVAL_SECOND = 10;
|
||||
|
||||
private DateTime _lastReportTime;
|
||||
// TODO: 最好做一下持久化存储
|
||||
private DateTime LastReportDate
|
||||
{
|
||||
get => _saveData.LastReportDate;
|
||||
set => _saveData.LastReportDate = value;
|
||||
}
|
||||
|
||||
private string LastNetworkStatus
|
||||
{
|
||||
get => PlayerPrefs.GetString(nameof(LastNetworkStatus), NETWORK_STATUS_NOT_SET);
|
||||
set => PlayerPrefs.SetString(nameof(LastNetworkStatus), value);
|
||||
get => _saveData.LastReportStatus;
|
||||
set => _saveData.LastReportStatus = value;
|
||||
}
|
||||
|
||||
private readonly Action<string> _onNetworkStatusChanged;
|
||||
private readonly Action<string> _onReportOffline;
|
||||
private readonly NetworkMonitorData _saveData;
|
||||
|
||||
/// <summary>
|
||||
/// 构造函数
|
||||
|
@ -43,6 +47,9 @@ namespace Guru.Network
|
|||
{
|
||||
_onNetworkStatusChanged = onNetworkStatusChanged;
|
||||
_onReportOffline = onReportOffline;
|
||||
|
||||
_saveData = new NetworkMonitorData(); // 读取数据
|
||||
|
||||
CoroutineHelper.Instance.StartCoroutine(OnCheckingNetworkStatus(CHECK_STATUS_INTERVAL_SECOND));
|
||||
}
|
||||
|
||||
|
@ -52,12 +59,13 @@ namespace Guru.Network
|
|||
/// <returns></returns>
|
||||
public string GetNetworkStatus()
|
||||
{
|
||||
switch (Application.internetReachability)
|
||||
var internetReachability = Application.internetReachability;
|
||||
switch (internetReachability)
|
||||
{
|
||||
case NetworkReachability.ReachableViaLocalAreaNetwork:
|
||||
return NETWORK_STATUS_WIFI;
|
||||
case NetworkReachability.ReachableViaCarrierDataNetwork:
|
||||
return NETWORK_STATUS_MOBILE;
|
||||
case NetworkReachability.ReachableViaLocalAreaNetwork:
|
||||
return NETWORK_STATUS_WIFI;
|
||||
}
|
||||
return NETWORK_STATUS_NONE;
|
||||
}
|
||||
|
@ -72,12 +80,12 @@ namespace Guru.Network
|
|||
/// 当前是可以打点上报
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private bool CanSendReport() => DateTime.UtcNow.DayOfYear != _lastReportTime.DayOfYear && DateTime.UtcNow.Year != _lastReportTime.Year;
|
||||
private bool CanSendReport() => DateTime.UtcNow.DayOfYear != LastReportDate.DayOfYear && DateTime.UtcNow.Year != LastReportDate.Year;
|
||||
|
||||
/// <summary>
|
||||
/// 设置打点时间
|
||||
/// </summary>
|
||||
private void SetReportTime() => _lastReportTime = DateTime.UtcNow;
|
||||
private void SetReportTime() => LastReportDate = DateTime.UtcNow;
|
||||
|
||||
private bool NeedReportOffline()
|
||||
{
|
||||
|
@ -97,9 +105,9 @@ namespace Guru.Network
|
|||
|
||||
if (NeedReportOffline())
|
||||
{
|
||||
SetReportTime();
|
||||
_onReportOffline?.Invoke(LastNetworkStatus);
|
||||
Debug.Log($"{Tag} --- Report Offline: {LastNetworkStatus}");
|
||||
_onReportOffline?.Invoke(LastNetworkStatus);
|
||||
SetReportTime();
|
||||
}
|
||||
|
||||
LastNetworkStatus = status;
|
||||
|
@ -119,5 +127,68 @@ namespace Guru.Network
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
[Serializable]
|
||||
class NetworkMonitorData
|
||||
{
|
||||
private const string K_NETWORK_MONITOR_DATA = "guru_network_monitor_data";
|
||||
private const string NETWORK_STATUS_NOT_SET = "not_set";
|
||||
|
||||
private DateTime _lastReportDate;
|
||||
public DateTime LastReportDate
|
||||
{
|
||||
get => _lastReportDate;
|
||||
set
|
||||
{
|
||||
_lastReportDate = value;
|
||||
Save(true);
|
||||
}
|
||||
}
|
||||
|
||||
private string _lastReportStatus;
|
||||
public string LastReportStatus
|
||||
{
|
||||
get => _lastReportStatus;
|
||||
set
|
||||
{
|
||||
_lastReportStatus = value;
|
||||
Save();
|
||||
}
|
||||
}
|
||||
|
||||
public NetworkMonitorData()
|
||||
{
|
||||
Load(); // 立即加载数据
|
||||
}
|
||||
|
||||
private void Load()
|
||||
{
|
||||
var raw = PlayerPrefs.GetString(K_NETWORK_MONITOR_DATA, "");
|
||||
|
||||
_lastReportStatus = NETWORK_STATUS_NOT_SET;
|
||||
_lastReportDate = new DateTime(1970, 1, 1);
|
||||
if (!string.IsNullOrEmpty(raw))
|
||||
{
|
||||
try
|
||||
{
|
||||
var arr = raw.Split("|");
|
||||
if (arr.Length > 0) _lastReportStatus = arr[0];
|
||||
if (arr.Length > 1) _lastReportDate = DateTime.Parse(arr[1]);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Save(bool force = false)
|
||||
{
|
||||
var buffer = $"{_lastReportStatus}|{_lastReportDate:g}";
|
||||
PlayerPrefs.SetString(K_NETWORK_MONITOR_DATA, buffer);
|
||||
if(force) PlayerPrefs.Save();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue