在应用程序引擎标准Java中初始化Firebase管理
我正在尝试使用Firebase Auth in-App engine标准Java验证来自Android的令牌 但是,当我尝试初始化Firebase admin时,会出现异常 例外情况如下:在应用程序引擎标准Java中初始化Firebase管理,java,google-app-engine,firebase-admin,Java,Google App Engine,Firebase Admin,我正在尝试使用Firebase Auth in-App engine标准Java验证来自Android的令牌 但是,当我尝试初始化Firebase admin时,会出现异常 例外情况如下: java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState (ZLjava/lang/String;Ljava/lang/Object;)V at com.google.firebase.FirebaseApp.c
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)
代码如下:
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);
解决方案是在链接中添加jar文件
由于该问题与将firebase admin SDK初始化为app engine java环境有关,因此可能有人遇到异常: java.lang.IllegalStateException:名为[DEFAULT]的FirebaseApp已存在。 如果您的所有依赖项都是正确的,如上述答案所述,那么您仍然可能会遇到此异常 对此异常的回答是“您必须仅初始化firebase sdk一次”,或者您需要在初始化过程中提供唯一的应用程序名称 现在,将只执行一次的初始化代码放在何处,以便在使用firebase资源之前,必须初始化sdk 答案是使用ServletContextListener 如果要在调用任何servlet之前运行自定义逻辑: 在web.xml文件中注册ServletContextListener
<listener>
<listener-class>com.company.MyListener</listener-class>
</listener>
ServletContextListener在预热请求期间运行。如果没有预热请求,它将在向新实例发出第一个请求时运行。这可能会导致加载请求您需要检查依赖关系树,并找出冲突的Guava版本来自何处。AdminSDK使用Guava 20.0。
<listener>
<listener-class>com.company.MyListener</listener-class>
</listener>
public class MyListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
// This will be invoked as part of a warmup request, or
// the first user request if no warmup request was invoked.
}
public void contextDestroyed(ServletContextEvent event) {
// App Engine does not currently invoke this method.
}
}