gpt4 book ai didi

android - 如何使用 Firebase 服务器时间戳生成创建日期?

转载 作者:行者123 更新时间:2023-11-28 08:31:04 26 4
gpt4 key购买 nike

目前,Google 版本的 ServerValue.TIMESTAMP 返回 {".sv":"timestamp"} 用作 Firebase 的指令以填充该字段将数据保存到 Firebase 服务器后的服务器时间戳。

但是,当您在客户端创建数据时,您还没有实际的时间戳(即用作创建日期)。您只有在初始保存和随后的检索之后才能访问时间戳,我想这有时为时已晚而且不是很优雅。


在谷歌之前:

更新:忽略此部分,因为它不正确 - 我误解了示例。 ServerValue.TIMESTAMP 始终返回 {".sv":"timestamp"}

据我所知,在 pre-google Firebase 中似乎有一个服务器生成的时间戳可用,允许您获取实际时间戳:

import com.firebase.client.ServerValue;
ServerValue.TIMESTAMP // eg. 1466094046

( ref 1 , ref 2 )


问题:

  1. 这种保存/检索是在我的模型实例上获取服务器生成的创建日期的唯一方法吗?
  2. 如果是,您能提出一种实现这种模式的方法吗?
  3. 我对 ServerValue.TIMESTAMP 的理解是否正确?随着 Google 收购 Firebase,它发生了变化? 更新:没有,@FrankvanPuffelen 回答说在获取过程中没有任何改变。

注意:

我不考虑在客户端使用 new Date(),因为我一直在阅读它不安全,但如果您有不同的看法,请分享您的想法。

最佳答案

当您在写操作中使用 ServerValue.TIMESTAMP 常量时,您是说 Firebase 数据库服务器在执行写操作时应该确定正确的时间戳。

假设我们运行这段代码:

ref.addValueEventListener(new ValueEventListener() {
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println(dataSnapshot.getValue());
}

public void onCancelled(DatabaseError databaseError) { }
});
ref.setValue(ServerValue.TIMESTAMP);

这将执行如下:

  1. 你附加一个监听器
  2. 你用 ServerValue.TIMESTAMP 写一个值
  3. Firebase 客户端立即触发一个值事件,该事件具有它将写入服务器的时间戳的近似值
  4. 您的代码打印该值
  5. 写操作被发送到 Firebase 服务器
  6. Firebase 服务器确定实际时间戳并将值写入数据库(假设没有安全规则失败)
  7. Firebase 服务器将实际时间戳发回给客户端
  8. Firebase 客户端为实际值引发一个值事件
  9. 您的代码打印该值

如果您使用 ChildEventListener 而不是 ValueEventListener,则客户端将在步骤 3 中调用 onChildAddedonChildChanged 在第 8 步中。

自 Firebase 加入 Google 以来,我们生成 ServerValue.TIMESTAMP 的方式没有任何变化。以前有效的代码将继续有效。这也意味着 first answer you linked是处理它的有效方法。

关于android - 如何使用 Firebase 服务器时间戳生成创建日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38884445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com