現在のタイムスタンプに大きく依存するアプリケーションがあります。現在、ユーザーがリクエストを送信すると、System.currentTimeMillis()
を使用してUTCで現在のタイムスタンプが取得されます。これは問題なく動作しますが、ユーザーがデバイス上でDate/Time
の操作を開始すると問題が発生し、タイムスタンプが不正確になります。UTCのAndroid時間同期
なぜクライアントでそれを行うのですか?なぜサーバー上でそれを処理しないのですか?さて、私のアプリケーションはオフラインで作業する必要があります。インターネットへの接続が利用できないとき、すべての私の要求はjobQueue
にプッシュされます。このような場合、私は4:02pm
でリクエストを提出すると、サーバーは7:30pm
を受信するだけで、サーバーは4:02pm
にリクエストを送信したことを知っていなければなりません。
私はどのようなオプションを検討しましたか?
- は、ユーザのログイン時には、私は、サーバー時間とデバイスの時刻を同期すると、ローカルにその時間を格納します。ユーザーがログインしている間にユーザーの操作が発生した場合は、
Date/Time
操作の目的にリッスンしてから、ユーザーがリクエストを送信するたびにオフセットとの同期時間を計算します。タイムスタンプが正確であることを確認してください。 - サーバの同期APIをバックエンドで実行し、アプリケーション内でサービスを設定して、サーバーの時間と同期をとり、ドリフトを探しながらユーザーの操作をリッスンします。
- プッシュ通知を使用して、時間同期の調整をダウンストリームでリッスンしながら、ユーザー操作をリッスンします。
NTP
サーバーを使用して、デバイスと時刻を同期させることもできます。
私は完全には最適ではないと思います(可能な解決策をすべて列挙したと仮定して)。私が考えていない他の解決策があるなら、私に知らせてください。
P.S. BroadcastReceiver
を使用してデバイス上の日時操作をリッスンすると、そのオフセットをどのように計算することができますか?
モバイルアプリのローカルタイムゾーンを使用します。 – koa73