我正在尝试在App引擎标准Java中使用Firebase Auth来验证来自Android的令牌。
但是,当我尝试初始化Firebase管理员时,我会收到异常。
这是例外:
java.lang.NoSuchMethodError:
com.google.common.base.Preconditions.checkState
(ZLjava/lang/String;Ljava/lang/Object;)V
at com.google.firebase.FirebaseApp.checkNotDeleted (FirebaseApp.java:352)
at com.google.firebase.FirebaseApp.getOptions (FirebaseApp.java:267)
at com.google.firebase.FirebaseApp$TokenRefresher.<init> (FirebaseApp.java:434)
at com.google.firebase.FirebaseApp$TokenRefresher$Factory.create (FirebaseApp.java:535)
at com.google.firebase.FirebaseApp.<init> (FirebaseApp.java:113)
at com.google.firebase.FirebaseApp.initializeApp (FirebaseApp.java:201)
at com.google.firebase.FirebaseApp.initializeApp (FirebaseApp.java:188)
at com.google.firebase.FirebaseApp.initializeApp (FirebaseApp.java:175)
极有可能,因为Guava版本存在冲突
这是我的傻瓜:
dependencies {
appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.60'
compile 'com.google.appengine.tools:appengine-gcs-client:0.7'
compile ('com.google.firebase:firebase-admin:5.7.0') {
exclude group: 'com.google.guava'
}
compile 'com.google.guava:guava:23.0'
compile 'javax.servlet:servlet-api:2.5'
}
以下是代码:
InputStream in = filterConfig.getServletContext()
.getResourceAsStream("/WEB-INF/PRIVATE_KEY_JSON.json");
FirebaseOptions options = null;
try {
options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(in))
.build();
} catch (IOException e) {
e.printStackTrace();
}
FirebaseApp.initializeApp(options);
答案 0 :(得分:0)
解决方案是在链接中添加jar文件
答案 1 :(得分:0)
由于该问题与将Firebase admin SDK初始化到App Engine Java环境有关,因此有人可能遇到例外:
java.lang.IllegalStateException:名称为[DEFAULT]的FirebaseApp已经存在。
如果您的所有依存关系都正确(如上述答案所述),那么您仍然可能会遇到此异常。
一个例外的答案是“您必须只初始化一次Firebase sdk”,或者在初始化期间需要提供唯一的应用程序名称。
现在将只能执行一次的初始化代码放在哪里,以便在使用firebase资源之前必须先对sdk进行初始化。
答案正在使用 ServletContextListener docs
如果您有要在调用任何servlet之前运行的自定义逻辑:
在您的web.xml文件中注册一个ServletContextListener。
PlyrAudio
在Servlet和过滤器代码旁边提供一个类:
<listener>
<listener-class>com.company.MyListener</listener-class>
</listener>
ServletContextListener在预热请求期间运行。如果没有预热请求,它将在对新实例的第一个请求上运行。这可能会导致加载请求