Java 启用'后的服务帐户身份验证警告;SetTimeStampsSinSnapshot已启用'; 问题
将我的AppEngine托管应用程序的日期对象更新为每个Firebase时间戳的时间戳对象后,会显示警告并启用Java 启用'后的服务帐户身份验证警告;SetTimeStampsSinSnapshot已启用'; 问题,java,firebase,google-cloud-firestore,Java,Firebase,Google Cloud Firestore,将我的AppEngine托管应用程序的日期对象更新为每个Firebase时间戳的时间戳对象后,会显示警告并启用setTimeasSinSnapshotEnabled有关使用服务身份验证帐户的新警告 但是,在根据“在您自己的服务器上初始化”小节下的文档初始化Firebase时,我当前正在使用service auth帐户。尽管出现了新的警告消息,但该应用程序仍按预期工作 原始“SetTimestampsSinSnapshotSenabled”警告 Firestore中存储的java.util.Dat
setTimeasSinSnapshotEnabled
有关使用服务身份验证帐户的新警告
但是,在根据“在您自己的服务器上初始化”小节下的文档初始化Firebase时,我当前正在使用service auth帐户。尽管出现了新的警告消息,但该应用程序仍按预期工作
原始“SetTimestampsSinSnapshotSenabled”警告
Firestore中存储的java.util.Date对象的行为将发生变化,您的应用程序可能会中断。
要隐藏此警告并确保应用程序不会中断,您需要在调用任何其他云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 PM com.google.auth.oauth2.DefaultCredentialsProvider警告关于问题凭证
警告:您的应用程序已使用来自Google Cloud SDK的最终用户凭据进行身份验证。我们建议大多数服务器应用程序改用服务帐户。如果您的应用程序继续使用云SDK中的最终用户凭据,您可能会收到“超出配额”或“API未启用”错误。有关服务帐户的详细信息,请参阅
安装程序
初始化Firebase
FirebaseApp.initializeApp(FirebaseOptions.Builder()
.setCredentials(
fromStream(Gson().toJson(FirebaseCredentialsHelper.get()).byteInputStream()))
.setFirestoreOptions(FirestoreOptions.newBuilder()
.setTimestampsInSnapshotsEnabled(true).build())
.build())
服务凭据对象
FirebaseCredentialsHelper返回服务帐户凭据,具体取决于应用程序是在暂存模式还是生产模式下构建的
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]"
)