当前位置: 首页 > 知识库问答 >
问题:

Firebase可以在servlet上工作吗?

翟泰
2023-03-14

我试图在一个在App Engine(Google Cloud Platform)上通信的Servlet上使用Firebase Admin。我之所以使用Servlet,是因为我需要生成一个令牌来验证我对正在使用的另一个API的访问。

有人在servlet上使用Firebase时有过这种成功的历史吗?

App Engine SDK

com.google.appengine:appengine-java-sdk:1.9.50
com.google.appengine:appengine-api-1.0-sdk:1.9.54

在GET中,我使用令牌访问Merchant API。

    String mToken = gateway.clientToken().generate();

    JSONObject jsonObject = new JSONObject();
    jsonObject.put("nonce", mToken);
    resp.getWriter().println(jsonObject.toString());

内部的POST Firebase管理完全特权。

 FileInputStream serviceAccount = new FileInputStream("/WEB-INF/...json");
 FirebaseOptions options = new FirebaseOptions.Builder()
         .setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
         .setDatabaseUrl("https://MyProject.firebaseio.com/")
         .build();

 FirebaseApp.initializeApp(options);

具有事务的Firebase数据库引用

DatabaseReference ref = FirebaseDatabase
                .getInstance()
                .getReference("price");


ref.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
            String res = (String) dataSnapshot.getValue();
try {
        TransactionRequest request = new TransactionRequest()

                .amount(new BigDecimal(res)) //Res doesn't show any error but it also doesn't work
                .paymentMethodNonce(nonce)
                .options()
                .submitForSettlement(true)
                .storeInVaultOnSuccess(true)
                .done();


        Result<Transaction> result = gateway.transaction().sale(request);

多谢了。

共有1个答案

谭飞掣
2023-03-14

Firebase Java Admin SDK经常在servlet中使用。您将需要使用手动缩放的实例来部署到App Engine上。Firebase数据库客户机启动长时间运行的线程,因此无法对自动缩放的实例进行操作(新的GAE java8运行时在这方面似乎更加宽松,但我现在无法确认这一点)。

我建议您对每个应用程序只调用FirebaseApp.InitializeApp()一次,最好是在ServletContextListener中。那么在servlet中,您应该能够像现在这样执行事务。

 类似资料:
  • 我是android新手,我能够在kotlin中为我的应用程序设置firebase。如果我在Nexus 5X API 27 emulator中运行该应用程序,我就能够获取数据库,但当我在实际设备三星S5(Google play Services V 12.5.29,android V 5.0)中运行该应用程序时,我无法获得addValueEventListener回调。 Gradle文件: 我知道这

  • 我试图制作一个跨平台的JavaFX应用程序,它在Windows和OSX机器上工作得很好,但在Linux上不行。 jar是在Intellij思想中使用基本的JavaFX配置构建的。 有人帮忙吗?

  • 我正在自学servlet,找到了一些非常好的教程,并在Eclipse Neon EE中取得了巨大成功。(非常基本的servlet,只提供一个简单的静态网页) 在安装Eclipse Neon EE之前,我安装了Tomcat standalone,并对其进行了测试,得到了regulat apache Tomcat页面。我找到的教程还指导我如何在Eclipse中设置tomcat服务器。他们还向我展示了如

  • 与/user/login?_format=json完全相同的POST在Postman中不起作用(错误403禁止),但在curl中使用相同的参数可以正常工作。 这个Curl的工作原理是:Curl--header“content-type:application/json”--request POST--data“{”name“:”bobo“,”pass“:”xxx“}”http://[domain]

  • 服务器是Glassfish 错误404页找不到或您没有连接到网络 您没有连接到网络 结果应该是好的+名称+文件路径

  • 问题内容: 如果我在Spring bean的私有方法上有一个@Transactional -annotation,该注释有什么作用吗? 如果注释位于公共方法上,则它将起作用并打开一个事务。 问题答案: 问题不是私有的还是公共的,问题是:如何调用它以及你使用哪种AOP实现! 如果你使用(默认)Spring Proxy AOP,则仅当调用通过代理时,才会考虑Spring提供的所有AOP功能(如)。-如