我有一個使用 firebase 反應原生的聊天應用程式,對我來說至關重要的是時間戳全部同步并在服務器端創建,而不是來自客戶端。根據手機上的設定,客戶端可以有不同的時間。
我嘗試了以下功能來證明我的觀點:
const comparetimes = async () => {
const timezone1 = firebase.firestore.Timestamp.now();
const timezone2 = (firebase.firestore.Timestamp.now()).toMillis();
const timezone3 = Date.now();
console.log(timezone1);
console.log(timezone2);
console.log(timezone3)
}
令我震驚的是這個函式的結果:
{"nanoseconds": 79000000, "seconds": 1641054839}
1641054839080
1641054839080
顯然,firebase 時間戳與Date.now()從手機中獲取的直接時間戳完全相同,因此不準確。
在這個示例 firebase 中,我該怎么做才能讓時間戳不是由客戶端創建,而是由服務器創建?我需要檢查一些 API 還是我錯過了什么?
uj5u.com熱心網友回復:
當您呼叫 時Timestamp.now(),它實際上只是在客戶端設備上獲取時間戳。這是預期的。
閱讀有關如何使用服務器時間戳的檔案。您必須使用 回傳的令牌值firestore.FieldValue.serverTimestamp()才能告訴 Firestore 在請求到達服務器時使用當前時刻。
存盤時間戳時,建議您使用 FieldValue 類上的 serverTimestamp 靜態方法。當寫入資料庫時??,Firebase 服務器將根據它們的時間而不是客戶端寫入一個新的時間戳。這有助于解決不同客戶端時區的任何資料一致性問題:
firestore().doc('users/ABC').update({ createdAt: firestore.FieldValue.serverTimestamp(), });
另請閱讀:
- https://medium.com/firebase-developers/the-secrets-of-firestore-fieldvalue-servertimestamp-revealed-29dd7a38a82b
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/400276.html
標籤:javascript 火力基地 反应原生 谷歌云firestore 时间戳
下一篇:Firebase身份驗證隨機令牌
