火力地堡的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