2017-10-24 11 views
1

App Engine (Google Cloud Platform)에서 통신중인 서블릿에 Firebase Admin을 사용하려고합니다. 내가 사용하고있는 다른 API에 대한 나의 접근을 확인하기 위해 토큰을 생성해야하기 때문에 Servlet을 사용하고있다.Firebase가 서블릿에서 작동 할 수 있습니까?

서블릿에서 Firebase를 사용하여 성공한 기록을 가진 사람이 있습니까?

나는 상인의 API에 액세스 토큰을 복용하고있는 내부 com.google.firebase:firebase-admin: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 사용하고 있습니다. POST 중포 기지 관리 전체 권한 내부

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

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

.

모든 firebase가 하나의 try 내부에 있고 Transaction Request가 다른 시도에 있습니다.

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은 이미 읽기 권한을 부여합니다. 트랜잭션

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

감사와

중포 기지 데이터베이스 참조.

+0

동일한 것을 다루는 임! – Andrea

+0

이 https://cloud.google.com/solutions/mobile/firebase-app-engine-android-studio#writing_the_servlet_code – Krutik

+0

을 찾으십니까? 정확히 무엇을하려고 하시겠습니까? 저는 Google App Engine에서 Firebase Admin을 사용하고 있습니다. 그래서 당신의 문제는 무엇입니까? –

답변

0

Firebase Java Admin SDK는 서블릿에서 자주 사용됩니다. App Engine에 배포하려면 manually scaled 인스턴스를 사용해야합니다. Firebase 데이터베이스 클라이언트는 장시간 실행되는 스레드를 시작하므로 자동 확장 인스턴스에서 작동 할 수 없습니다 (새로운 GAE java8 런타임은이 점에서 더 관대 해 보이지만 지금은 확인할 수 없습니다).

FirebaseApp.initializeApp()은 앱당 한 번만 (이상적으로는 ServletContextListener) 전화하는 것이 좋습니다. 그런 다음 서블릿에서 지금과 같이 트랜잭션을 수행 할 수 있어야합니다.