プレゼンスに関するFirebase のドキュメントによると、「クライアントのクロック スキュー」は「Firebase がサーバー時間を推定するために、ローカルで報告された時間 (ミリ秒単位のエポック時間) に追加する」値です。
次に、例では、たとえば次のように述べています。
@Override
public void onDataChange(DataSnapshot snapshot) {
double offset = snapshot.getValue(Double.class);
double estimatedServerTimeMs = System.currentTimeMillis() + offset;
}
テストに使用する 1 台の Android デバイスで、時計を変更して 4 分 (およそ) 速くしました。Java SDK を介してクロック スキューを取得すると、次のような値が得られます。
232599.0
これはミリ秒単位なので、3.87665
分に相当します。
しかし、サーバーの時刻を推定するには、それをローカルのタイムスタンプ ( ) に追加System.currentTimeMillis()
する必要があります。そうですか?
クライアントのクロックがすでに 4 分進んでいる場合、その 3.9 分を追加すると、約 8 分速い見積もりが得られませんか?
ちなみに、サーバーのタイムスタンプが使えれば完璧ですsetPriority()
。現在、プリミティブな値ではないServerValue.Timestamp
ため、 でのみ使用できます。setValue()
で時刻を使用したいので、 とクロックのずれsetPriority()
を使用してサーバーの時刻を計算する必要があります。System.currentTimeMillis()