按照Firebase 时间戳警告将我的AppEngine托管应用的日期对象更新为时间戳对象并启用setTimestampsInSnapshotsEnabled
新警告后正在显示有关使用服务身份验证帐户的信息。
但是,根据Initialize Cloud Firestore小节“ 在您自己的服务器上初始化”下的文档初始化Firebase时,我目前正在使用服务身份验证帐户。尽管有 new 警告消息,该应用仍能按预期运行。
Firestore中存储的java.util.Date对象的行为将更改,并且您的应用可能会崩溃。 要隐藏此警告并确保您的应用不会中断,您需要在调用任何其他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的所有现有用法。在将来的版本中,该行为将更改为新行为,因此,如果不执行这些步骤,则您的应用可能会崩溃。
2018年12月9日12:54:39 com.google.auth.oauth2.DefaultCredentialsProvider提供者warnAboutProblematicCredentials 警告:您的应用已使用Google Cloud SDK中的最终用户凭据进行了身份验证。我们建议大多数服务器应用程序改为使用服务帐户。如果您的应用程序继续使用Cloud SDK中的最终用户凭据,则可能会收到“超出配额”或“未启用API”错误。有关服务帐户的更多信息,请参见https://cloud.google.com/docs/authentication/。
初始化Firebase
FirebaseApp.initializeApp(FirebaseOptions.Builder()
.setCredentials(
fromStream(Gson().toJson(FirebaseCredentialsHelper.get()).byteInputStream()))
.setFirestoreOptions(FirestoreOptions.newBuilder()
.setTimestampsInSnapshotsEnabled(true).build())
.build())
服务凭证对象
FirebaseCredentialsHelper 返回服务帐户凭据,具体取决于应用是在 Staging 还是 Production 模式下构建的。
return FirebaseCredentials(
"service_account",
"[project-id]",
"[private-key-id]",
"[private-key]",
"[client-email]",
"[client-id]",
"https://accounts.google.com/o/oauth2/auth",
"https://accounts.google.com/o/oauth2/token",
"https://www.googleapis.com/oauth2/v1/certs",
"[client-x509-cert-url]"
)