为了验证从客户端应用发送的Firebase令牌,我使用以下代码:

Task<FirebaseToken> authTask = FirebaseAuth.getInstance().verifyIdToken("very long string token").addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(Object tr) { }
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception excptn) { }
}).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(Task task) { }
});
try {
Tasks.await(authTask);
} catch(ExecutionException | InterruptedException e ){
//handle error
}
FirebaseToken decodedToken = authTask.getResult();
String uid = decodedToken.getUid();


通过Maven / google后端api部署它时,出现以下错误:

java.lang.IllegalStateException:名称为[DEFAULT]的FirebaseApp不存在

我该如何解决?

最佳答案

您必须在Google Cloud Console上设置服务帐户。阅读Docs
将服务帐户密钥文件(.json)放在/resources/META-INF/目录中。
确保已将资源文件包含在appengine-web.xml


   

<!-- Include resource files -->
<resource-files>
    <include path="/**.json" />
    <include path="/**.xml" />
    <include path="/**.properties" />
</resource-files>



FirebaseOptions与生成的service_account_key.json文件一起传递以初始化FirebaseApp。您可以在Warmup Servlet中执行此操作。




public void init(ServletConfig config) throws ServletException {

    InputStream loadedServiceAccount = config
        .getServletContext()
        .getResourceAsStream("/WEB-INF/service_account_key.json");

    FirebaseOptions options = new FirebaseOptions.Builder()
        .setServiceAccount(loadedServiceAccount)
        .setDatabaseUrl("URL_FIREBASE_DATABASE").build();

    FirebaseApp firebaseApp = FirebaseApp.initializeApp(options);
    FirebaseAuth.getInstance(firebaseApp);

}



然后,您可以在代码内继续使用FirebaseAuth.getInstance()




当您的AppEngine实例运行测试版(可能为1.9.44)时,它将为您提供noMethodFoundError。然后,您可以继续执行此Question

10-02 06:45