update: 重构 networkstatus 接口和逻辑
Signed-off-by: huyufei <yufei.hu@castbox.fm>
parent
3f0f13be6c
commit
b4fbb5d3da
Binary file not shown.
|
|
@ -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:
|
|
||||||
|
|
@ -19,7 +19,6 @@ namespace Guru
|
||||||
public string[] uploadIpAddress = null;
|
public string[] uploadIpAddress = null;
|
||||||
public bool enableErrorLog = false;
|
public bool enableErrorLog = false;
|
||||||
public bool isDebug = false;
|
public bool isDebug = false;
|
||||||
public Action onInitComplete = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -117,7 +116,7 @@ namespace Guru
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 初始化接口
|
/// 初始化接口
|
||||||
/// </summary>
|
/// </summary>
|
||||||
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...");
|
Debug.Log($"{Tag} --- Guru Analytics [{Version}] initialing...");
|
||||||
if (_instance == null)
|
if (_instance == null)
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,17 @@
|
||||||
|
|
||||||
|
|
||||||
namespace Guru.Network
|
namespace Guru.Network
|
||||||
{
|
{
|
||||||
using Guru;
|
using Guru;
|
||||||
using System;
|
using System;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using System.Collections;
|
||||||
|
|
||||||
public class NetworkStatusMonitor
|
public class NetworkStatusMonitor
|
||||||
{
|
{
|
||||||
private const string Tag = "[NET]";
|
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_NONE = "none";
|
||||||
private const string NETWORK_STATUS_MOBILE = "mobile";
|
private const string NETWORK_STATUS_MOBILE = "mobile";
|
||||||
private const string NETWORK_STATUS_WIFI = "wifi";
|
private const string NETWORK_STATUS_WIFI = "wifi";
|
||||||
|
|
@ -17,6 +21,31 @@ namespace Guru.Network
|
||||||
private const string NETWORK_STATUS_BLUETOOTH = "bluetooth";
|
private const string NETWORK_STATUS_BLUETOOTH = "bluetooth";
|
||||||
private const string NETWORK_STATUS_OTHER = "other";
|
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<string> _onNetworkStatusChanged;
|
||||||
|
private readonly Action<string> _onReportOffline;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 构造函数
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="onNetworkStatusChanged"></param>
|
||||||
|
/// <param name="onReportOffline"></param>
|
||||||
|
public NetworkStatusMonitor(Action<string> onNetworkStatusChanged, Action<string> onReportOffline)
|
||||||
|
{
|
||||||
|
_onNetworkStatusChanged = onNetworkStatusChanged;
|
||||||
|
_onReportOffline = onReportOffline;
|
||||||
|
CoroutineHelper.Instance.StartCoroutine(OnCheckingNetworkStatus(CHECK_STATUS_INTERVAL_SECOND));
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取网络状态
|
/// 获取网络状态
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -33,5 +62,62 @@ namespace Guru.Network
|
||||||
return NETWORK_STATUS_NONE;
|
return NETWORK_STATUS_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用户是否已经失去了链接
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
private bool IsUserOffline() => Application.internetReachability == NetworkReachability.NotReachable;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 当前是可以打点上报
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
private bool CanSendReport() => DateTime.UtcNow.DayOfYear != _lastReportTime.DayOfYear && DateTime.UtcNow.Year != _lastReportTime.Year;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置打点时间
|
||||||
|
/// </summary>
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 每隔一段时间检测一次网络状态
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="interval"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private IEnumerator OnCheckingNetworkStatus(float interval)
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
UpdateNetworkStatus();
|
||||||
|
yield return new WaitForSeconds(interval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue