【发布时间】: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