【问题标题】:Firestore Options - setTimestampsInSnapshotsEnabled() is deprecatedFirestore 选项 - setTimestampsInSnapshotsEnabled() 已弃用
【发布时间】:2020-01-10 20:07:27
【问题描述】:

我在后端使用以下代码按照文档初始化 Firestore:

// Use the application default credentials
GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
FirebaseOptions options = new FirebaseOptions.Builder()
    .setCredentials(credentials)
    .setProjectId(projectId)
    .build();
FirebaseApp.initializeApp(options);

Firestore db = FirestoreClient.getFirestore();

但是当我从后端写入 Firestore 时,我收到了以下警告:

存储在 Firestore 中的 java.util.Date 对象的行为正在发生 更改,您的应用程序可能会中断。 (FirestoreImpl.java:90) 隐藏这个 警告并确保您的应用不会中断,您需要添加 在调用任何其他 Cloud Firestore 之前将代码添加到您的应用中 方法:

FirestoreOptions options =   
FirestoreOptions.newBuilder().setTimestampsInSnapshotsEnabled(true).build();
Firestore firestore = options.getService();

通过此更改,将读取存储在 Cloud Firestore 中的时间戳 返回为 com.google.cloud.Timestamp 对象而不是系统 java.util.Date 对象。所以你还需要更新期望的代码 一个 java.util.Date 来代替期望一个时间戳。例如:

// Old: java.util.Date date = (java.util.Date)
snapshot.get("created_at"); 
// New: Timestamp timestamp = (Timestamp)
snapshot.get("created_at"); java.util.Date date = timestamp.toDate();

请在启用时审核 java.util.Date 的所有现有用法 新行为。在未来的版本中,行为将更改为 新行为,因此如果您不遵循这些步骤,您的应用程序可能会中断。

这个警告让我相信,由于我使用的是 Firestore,我应该使用 FirestoreOptions 来启动 Admin SDK。然而,当我尝试使用 FirestoreOptions 初始化 Admin SDK 时,setTimestampsInSnapshotsEnabled() 被标记为已弃用。

我被告知我需要使用 FirebaseOptions

从这里到哪里去?

【问题讨论】:

  • 您使用的是什么版本的 Admin SDK?
  • @FrankvanPuffelen 6.10.0
  • 嗯...在那种情况下我不知道。希望其他人发现问题。
  • @FrankvanPuffelen 也许可以在 google 提交错误?

标签: java google-cloud-firestore firebase-admin


【解决方案1】:

您的类路径中似乎有两个不同版本的 google-cloud-firestore。您看到的警告在 setTimestampsInSnapshotsEnabled() 方法被弃用的同时被删除:https://github.com/googleapis/google-cloud-java/pull/4353

检查你的类路径。您可能同时拥有 0.x 和 1.x 版本的 Firestore。

【讨论】:

  • 我不这么认为。我唯一的进口是:import com.google.firebase.FirebaseApp; import com.google.firebase.FirebaseOptions;,唯一的依赖是com.google.firebase:firebase-admin:6.10.0
  • 你能确认google-cloud-firestore 的哪个版本在你的类路径中吗?
  • Firestore 1.x.x 不会记录上述警告。该代码在 1.0.0 版本中被完全删除。如果您仍然看到警告,那么您的运行时不知何故选择了旧 (0.x.x) 版本的 Firestore 库。
  • 那就不知道了。不知道该怎么办。不过感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多