火力地堡的docs about presence说,“客户端的时钟偏斜”是一个值“火力地堡将添加到本地报告的时间(以毫秒为单位划时代的时间)来估计服务器时间”。登陆火力地堡的时钟歪斜
然后,在实施例中,它说例如:
@Override
public void onDataChange(DataSnapshot snapshot) {
double offset = snapshot.getValue(Double.class);
double estimatedServerTimeMs = System.currentTimeMillis() + offset;
}
在我使用用于测试一个Android装置,我已经改变了时钟,使得它由4分钟(大约)快。现在,当我得到通过Java SDK的时钟偏差,我得到的值如下:
232599.0
由于这是毫秒,它对应于3.87665
分钟。
但是为了得到服务器的时间估计,我必须将加到本地时间戳(System.currentTimeMillis()
)。是对的吗?
如果客户端的时钟已经快了4分钟,而我加上那3.9分钟,我估计快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分钟前(四分钟前)获得服务器时间。您必须添加4才能使其8:08(现在)。我已经与Firebase开发者讨论了setPriority()错误,他们将为此进行修复。 – Kato