我有一個應用程序嚴重依賴當前時間戳。目前,當用戶提交請求時,我使用System.currentTimeMillis()
以UTC獲得當前時間戳。雖然這可以正常工作,但當用戶開始在其設備上操作其Date/Time
並導致不準確的時間戳時,就會出現問題。以UTC計時的Android時間同步
爲什麼在客戶端呢?爲什麼不直接在服務器上處理呢?那麼,我的應用程序需要脫機工作。當連接到互聯網不可用時,我的所有請求都被推入jobQueue
。在這種情況下,我必須有原來的時間,其中用戶所做的動作,所以如果我在4:02pm
提交請求,但由於網絡問題,服務器將只接收它周圍7:30pm
,服務器必須知道,我發送請求的4:02pm
。
現在我已考慮哪些選擇?
- 在用戶登錄後,我將設備時間與服務器時間同步,並將該時間存儲在本地。如果在用戶登錄時出現的任何用戶的操作,我將有一個
BroadcastReceiver
收聽到Date/Time
操作的任何意圖,然後存儲偏移,這樣每當用戶提交的請求,我將計算時間同步與偏移確保時間戳準確無誤。 - 有一臺服務器同步API在後臺完成,建立了我的應用程序內的服務與服務器時間同步持續向上,並尋找任何漂移,同時監聽到任何用戶操作。
- 使用推送通知並監聽下游進行時間同步調整,同時還監聽任何用戶操作。
- 我也可以利用
NTP
服務器與我的設備同步時間。
我不完全確定哪個是最優的(假設我列出了所有可能的解決方案)。如果還有其他解決方案我沒有想到,請讓我知道。
P.S.如果我碰巧使用BroadcastReceiver
來聆聽設備上的任何日期時間操縱,那麼我將如何計算該設備的偏移?
使用移動應用程序的本地時區。 – koa73