2017-10-24 1 views
1

Ich versuche zu verwenden Firebase Admin auf einem Servlet, das auf App Engine (Google Cloud Platform) kommuniziert. Ich verwende ein Servlet, weil ich ein Token erzeugen muss, um meinen Zugang zu einer anderen API zu validieren, die ich verwende.Kann Firebase auf einem Servlet arbeiten?

Hat jemand diesen erfolgreichen Verlauf mit Firebase auf einem Servlet?

Ich bin mit com.google.firebase:firebase-admin:5.2.0

App Engine SDK

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

Innerhalb des GET ich das Token nehme die Händler API zuzugreifen.

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

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

Innerhalb der POST Firebase Admin vollen Privilegien.

Alle Firebase ist in einem einzigen Versuch und die Transaktionsanfrage ist in einem anderen Versuch.

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 gewähren bereits die Leseberechtigung.

Firebase Database Reference mit der Transaktion

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); 

Dank.

+0

Im Umgang mit der gleichen Sache! – Andrea

+0

suchen Sie nach diesem https://cloud.google.com/solutions/mobile/firebase-app-engine-android-studio#writing_the_servlet_code – Krutik

+0

Können Sie bitte genau sagen, was Sie zu tun versuchen? Ich verwende Firebase Admin in Google App Engine. Also, was ist dein Problem? –

Antwort

0

Das Firebase Java Admin SDK wird häufig in Servlets verwendet. Sie müssen eine manually scaled Instanz für die Bereitstellung in App Engine verwenden. Der Firebase-Datenbankclient startet lange laufende Threads und kann daher nicht mit den automatisch skalierten Instanzen arbeiten (die neue GAE-java8-Laufzeit scheint in dieser Hinsicht milder zu sein, aber ich kann das jetzt nicht bestätigen).

Ich würde Ihnen empfehlen, FirebaseApp.initializeApp() nur einmal pro App anzurufen, idealerweise in einem ServletContextListener. Dann sollten Sie in Ihrem Servlet Ihre Transaktion wie jetzt durchführen können.

Verwandte Themen