Firebase의 docs about presence "클라이언트의 시계 왜곡"은 "서버 시간을 예측하기 위해 Firebase가 현지보고 시간 (에포크 시간 (밀리 초))에 추가하는 값"이라고 말합니다.Firebase의 시계 왜곡의 표시
그런 다음 예에서, 그것은 예를 들어 말한다 :
@Override
public void onDataChange(DataSnapshot snapshot) {
double offset = snapshot.getValue(Double.class);
double estimatedServerTimeMs = System.currentTimeMillis() + offset;
}
내가 테스트에 사용할 하나의 안드로이드 장치에서 나는 시계를 변경 있도록 사분 (대략)에 의해 빠르게. 나는 자바 SDK를 통해 클럭 스큐를 얻을 때 지금, 내가 할 값은 다음과 같습니다
232599.0
이 밀리 초 단위이기 때문에, 그것은 3.87665
분에 해당합니다.
그러나 서버 시간에 대한 추정치를 얻으려면 을 로컬 타임 스탬프 (System.currentTimeMillis()
)에 추가해야합니다. 그게 맞습니까?
클라이언트의 시계가 이미 4 분 빠르며 I 에을 추가하면 약 8 분이 소요됩니다.
그런데 setPriority()
에서 서버 타임 스탬프를 사용할 수 있다면 완벽 할 것입니다. 현재 ServerValue.Timestamp
은 원시 값이 아니기 때문에 setValue()
에서만 사용할 수 있습니다. setPriority()
에서 시간을 사용하려면 System.currentTimeMillis()
및 시계 왜곡을 사용하여 서버의 시간을 계산해야합니다.
예, 감사합니다 :) 이것은 내가 잘하고있는 일이지만, 문서에서 인용 한'onDataChange()'에서 어떻게 잘못되었는지 보지 않으시겠습니까? 그들은 본질적으로'estimatedServerTimeMs = System.currentTimeMillis() + offset'을 잘못 수행합니다. 그렇지 않습니까? – caw
그건 그렇고,'ServerValue.Timestamp'를 사용할 때, 당신은 열쇠를 직접 지정할 수 없습니다.이 권리를 얻었습니까? 그 타입은'java.util.Map'입니다. 따라서 Java에서 다음과 같은 것은 불가능합니다 : https://www.firebase.com/docs/javascript/servervalue /TIMESTAMP.html –
caw
Marco, 서버 시간 (당장)이 오전 8:04이고 클라이언트에서 4 분 빠르면 8:04 (4 분 전)입니다. 8:08 (지금 당장)하려면 4를 더해야합니다. 나는 Firebase devs와 setPriority() 버그에 대해 이야기 해왔다. – Kato