当前时间戳与数据库时间戳错误之间存在 Firebase 时间戳差异



我写了一个TimeValidityCheckUtil,用于确定来自特定侦听器的快照是否在设备当前时间的给定时间范围内。这有这种方法,checkIfTImeValid

public static boolean checkIfTimeValid(Timestamp dbTimestamp)
{    
Timestamp currentTimestamp = Timestamp.now();    
Long seconds = currentTimestamp.getSeconds() - dbTimestamp.getSeconds();  
if(seconds> 10)
{
return false;
}    
return true;    
}

数据库结构在 Firestore 中,如下所示:

"ABC"-|
|
|-"documentId"-|
|
|-"some_key" - "string"
|-"timestamp" - timestamp

这就是发生的情况,设备 A 创建一个 documentId 和带有时间戳的对象。

设备 B 侦听此 documentId 并调用checkIfTimeValid以检查文档 A 的操作是否在当前时间戳的 10 秒内(以检查它是否是最近的(

即使这个过程是立即发生的,设备也会将时间戳之间的差异显示为~57-62s,根据我的说法,它不应该超过1-5s。

为什么会这样?

Timestamp.now()

是使用本地设备的时间计算的。如果设备时钟与 Firebase 不同步,则此处会反映该差异。

我不知道 Firestore 等价物,但在 RTDB 中,您可以使用特殊的位置/.info/serverTimeOffset来估计时钟之间的差异(以毫秒为单位(。

firebase.database().ref('/.info/serverTimeOffset').once('value')
.then((snap) => {
var offset = snap.val();
console.log('Server time delta in ms: ', offset);
// var estimatedServerTimeMs = new Date().getTime() + offset;
})
.catch(console.error)

RTDB 文档

相关内容

最新更新