Android Firebase可以在Servlet上工作吗?
我试图在一个Servlet上使用FirebaseAdmin,该Servlet在appengine(谷歌云平台)上进行通信。我使用Servlet是因为我需要生成一个令牌来验证我对正在使用的另一个API的访问 有没有人在Servlet上使用Firebase取得过这样的成功 我正在使用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
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,是的,但我没有发送电子邮件,我正在检索一个值并试图在交易请求上使用它。