update: 优化 NetworkStatusMonitor 的代码
--story=1021173 --user=yufei.hu 【中台】【BI】上报用户离线打点 guru_offline https://www.tapd.cn/33527076/s/1161347 Signed-off-by: huyufei <yufei.hu@castbox.fm>
							parent
							
								
									719be42b59
								
							
						
					
					
						commit
						9cf0dd5801
					
				|  | @ -19,8 +19,9 @@ namespace Guru | |||
| 	    private static bool _hasGotUid; // 已取得UID | ||||
| 	    private static DateTime _lastReportRateDate; //上次上报信息的日期 | ||||
| 	    private static double _reportSuccessInterval; // 上报频率 | ||||
| 	     | ||||
| 	    // private const string VALUE_NOT_FOR_IOS = "not_support_for_ios"; | ||||
| #if UNITY_IOS | ||||
| 		private const string VALUE_NOT_FOR_IOS = "not_support_for_ios"; | ||||
| #endif | ||||
| 	    // private const string VALUE_ONLY_FOR_IOS = "idfa_only_for_ios"; | ||||
| 	     | ||||
| 	    private static bool _isGuruAnalyticInitOnce = false; | ||||
|  |  | |||
|  | @ -22,7 +22,7 @@ namespace Guru.Network | |||
| 
 | ||||
|         private const int CHECK_STATUS_INTERVAL_SECOND = 10; | ||||
| 
 | ||||
|         private DateTime LastReportDate | ||||
|         private DateTime LastTriggerDate | ||||
|         { | ||||
|             get => _saveData.LastReportDate; | ||||
|             set => _saveData.LastReportDate = value; | ||||
|  | @ -35,21 +35,22 @@ namespace Guru.Network | |||
|         } | ||||
| 
 | ||||
|         private readonly Action<string> _onNetworkStatusChanged; | ||||
|         private readonly Action<string> _onReportOffline; | ||||
|         private readonly Action<string> _onFirstOfflineToday; | ||||
|         private readonly NetworkMonitorData _saveData; | ||||
|          | ||||
|         /// <summary> | ||||
|         /// 构造函数 | ||||
|         /// </summary> | ||||
|         /// <param name="onNetworkStatusChanged"></param> | ||||
|         /// <param name="onReportOffline"></param> | ||||
|         public NetworkStatusMonitor(Action<string> onNetworkStatusChanged, Action<string> onReportOffline) | ||||
|         /// <param name="onFirstOfflineToday"></param> | ||||
|         public NetworkStatusMonitor(Action<string> onNetworkStatusChanged, Action<string> onFirstOfflineToday) | ||||
|         { | ||||
|             _onNetworkStatusChanged = onNetworkStatusChanged; | ||||
|             _onReportOffline = onReportOffline; | ||||
|             _onFirstOfflineToday = onFirstOfflineToday; | ||||
| 
 | ||||
|             _saveData = new NetworkMonitorData(); // 读取数据 | ||||
|              | ||||
|             //TODO: 此处不应使用协程实现, 协程只用在 UI 上。  | ||||
|             CoroutineHelper.Instance.StartCoroutine(OnCheckingNetworkStatus(CHECK_STATUS_INTERVAL_SECOND)); | ||||
|         } | ||||
|          | ||||
|  | @ -80,16 +81,16 @@ namespace Guru.Network | |||
|         /// 当前是可以打点上报 | ||||
|         /// </summary> | ||||
|         /// <returns></returns> | ||||
|         private bool CanSendReport() => DateTime.UtcNow.DayOfYear != LastReportDate.DayOfYear && DateTime.UtcNow.Year != LastReportDate.Year; | ||||
|         private bool IsSameDay(DateTime date) => DateTime.UtcNow.DayOfYear != date.DayOfYear && DateTime.UtcNow.Year != date.Year; | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// 设置打点时间 | ||||
|         /// </summary> | ||||
|         private void SetReportTime() => LastReportDate = DateTime.UtcNow; | ||||
|         private void SetTriggerFirstOfflineDate() => LastTriggerDate = DateTime.UtcNow; | ||||
|          | ||||
|         private bool NeedReportOffline() | ||||
|         private bool ShouldTriggerFirstOffline() | ||||
|         { | ||||
|             return IsUserOffline() && CanSendReport(); | ||||
|             return IsUserOffline() && IsSameDay(LastTriggerDate); | ||||
|         } | ||||
|          | ||||
|         private void UpdateNetworkStatus() | ||||
|  | @ -103,11 +104,11 @@ namespace Guru.Network | |||
|                 _onNetworkStatusChanged(status); | ||||
|             } | ||||
|              | ||||
|             if (NeedReportOffline()) | ||||
|             if (ShouldTriggerFirstOffline()) | ||||
|             { | ||||
|                 Debug.Log($"{Tag} --- Report Offline: {LastNetworkStatus}"); | ||||
|                 _onReportOffline?.Invoke(LastNetworkStatus); | ||||
|                 SetReportTime(); | ||||
|                 _onFirstOfflineToday?.Invoke(LastNetworkStatus); | ||||
|                 SetTriggerFirstOfflineDate(); | ||||
|             } | ||||
|              | ||||
|             LastNetworkStatus = status; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue