Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase可以在Servlet上工作吗?_Android_Google App Engine_Servlets_Firebase Admin - Fatal编程技术网

Android Firebase可以在Servlet上工作吗?

Android Firebase可以在Servlet上工作吗?,android,google-app-engine,servlets,firebase-admin,Android,Google App Engine,Servlets,Firebase Admin,我试图在一个Servlet上使用FirebaseAdmin,该Servlet在appengine(谷歌云平台)上进行通信。我使用Servlet是因为我需要生成一个令牌来验证我对正在使用的另一个API的访问 有没有人在Servlet上使用Firebase取得过这样的成功 我正在使用com.google.firebase:firebase管理员:5.2.0 应用程序引擎SDK com.google.appengine:appengine-java-sdk:1.9.50 com.google.appe

我试图在一个Servlet上使用FirebaseAdmin,该Servlet在appengine(谷歌云平台)上进行通信。我使用Servlet是因为我需要生成一个令牌来验证我对正在使用的另一个API的访问

有没有人在Servlet上使用Firebase取得过这样的成功

我正在使用
com.google.firebase:firebase管理员:5.2.0

应用程序引擎SDK

com.google.appengine:appengine-java-sdk:1.9.50
com.google.appengine:appengine-api-1.0-sdk:1.9.54
GET内,我正在使用令牌访问商户API

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

    JSONObject jsonObject = new JSONObject();
    jsonObject.put("nonce", mToken);
    resp.getWriter().println(jsonObject.toString());
后Firebase管理员完全权限内

所有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);
IAM已授予读取权限。

带有事务的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);
DatabaseReference=FirebaseDatabase
.getInstance()
.getReference(“价格”);
ref.addListenerForSingleValueEvent(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
String res=(String)dataSnapshot.getValue();
试一试{
TransactionRequest=新建TransactionRequest()
.amount(新的BigDecimal(res))//res不显示任何错误,但也不起作用
.paymentMethodNonce(nonce)
.options()
.submitForSettlement(真)
.StoreInvolutionSuccess(真)
.完成();
结果=gateway.transaction().sale(请求);

谢谢。

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


我建议您拨打
FirebaseApp.initializeApp()
每个应用程序只能执行一次,最好是在一个应用程序中。然后在你的servlet中,你应该能够像现在一样执行你的事务。

我正在处理同样的事情!你在找这个吗?你能准确地告诉我你想做什么吗?我在谷歌应用程序引擎上使用Firebase Admin。那么你有什么问题吗?@MichaelMeyer我已经编辑过了。我有一个我试图使用价值价格(res)并在交易请求的金额上使用它,它没有显示任何代码错误。Firebase和Transaction是异步线程。@Krutik,是的,但我没有发送电子邮件,我正在检索一个值并试图在交易请求上使用它。