启用“ setTimestampsInSnapshotsEnabled”后的服务帐户身份验证警告

时间:2018-12-11 02:27:41

标签: java firebase google-cloud-firestore

问题

按照Firebase 时间戳警告将我的AppEngine托管应用的日期对象更新为时间戳对象并启用setTimestampsInSnapshotsEnabled新警告后正在显示有关使用服务身份验证帐户的信息。

但是,根据Initialize Cloud Firestore小节“ 在您自己的服务器上初始化”下的文档初始化Firebase时,我目前正在使用服务身份验证帐户。尽管有 new 警告消息,该应用仍能按预期运行。

原始“ setTimestampsInSnapshotsEnabled”警告

  

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]"
        )

0 个答案:

没有答案