2017-10-11 5 views
0

Firebase를 사용하여 Android 앱을 개발 중이며 Firebase Admin SDK를 사용하여 간단한 관리 응용 프로그램을 만들기로 결정했습니다. IDE (IntelliJ IDEA)를 시작하고 Admin SDK를 통해 데이터베이스에 연결하면 문제가 없지만 내 보낸 .jar 파일을 실행하면 Admin SDK를 데이터베이스에 연결할 수 없습니다. 중포 기지에 대한 연결을 초기화하기 위해, 나는 다음 (코 틀린) 코드를 사용 Firebase Admin SDK가 jar 파일 내부의 데이터베이스에 연결할 수 없습니다.

//Initialize the Firebase Admin SDK. 
val serviceAccount = 
this.javaClass.classLoader.getResourceAsStream("fen/ftcConsole/control/flip-the-classroom-app-firebase-adminsdk.json") 
    val options = FirebaseOptions.Builder() 
     .setCredential(FirebaseCredentials.fromCertificate(serviceAccount)) 
     .setDatabaseUrl("https://flip-the-classroom-app.firebaseio.com/") 
     .setStorageBucket("flip-the-classroom-app.appspot.com") 
     .build() 
FirebaseApp.initializeApp(options) 

//Get the connections to the database and the cloud storage. 
database = FirebaseDatabase.getInstance() 
storage = StorageClient.getInstance().bucket() 

나는 몇 콘솔 출력을 추가하고 코드는 단지이 줄 번번이 않는 것을 발견 : "데이터베이스 = FirebaseDatabase.getInstance() ". 그냥 스레드를 차단하고 아무 일도 일어나지 않습니다. 또한 예외가 발생하지 않습니다. 내가 말했듯이, 내 보낸 jar 파일에서만 발생합니다. IDE로 시작하면 모든 것이 잘 작동하여 테스트가 매우 어려워집니다.

IntelliJ 및 gradle로 .jar 파일을 만들고, .jar 파일 내부의 의존성을 압축하고 외부에 남겨두고 .jar 파일 내부에서 admin 키를 사용하여 .json 파일을로드하거나 밖에서는 문제가 항상 발생합니다.

jar { 
    manifest { 
     attributes 'Main-Class': 'fen.ftcConsole.gui.GUIStarterKt' 
    } 
    //adding project files/resources to the jar file 
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 
} 

"Gradle을 단지"나에게 올바르게 안에 넣어 모든 종속성과 자원을 가진 .jar 파일을 제공합니다 : Gradle을 가진 .JAR를 만들기위한

는 build.gradle 파일은 다음 항아리 블록을 포함 파일. 또한 응용 프로그램에는 올바르게 시작되는 JavaFX GUI가 포함되어 있습니다. Firebase 연결 만 작동하지 않습니다. "gradle jar"대신 응용 프로그램 플러그인을 사용할 때도 마찬가지입니다.

+0

이 병을 내보내려면 정확히 무엇을하고 있습니까? –

+0

jar 파일의 build.gradle 콘텐츠로 질문을 업데이트했습니다. 앞서 언급했듯이 Admin SDK 데이터베이스 연결을 제외한 모든 것이 작동합니다. –

+0

이것을 관리하기 위해 Gradle 용 애플리케이션 플러그인을 사용해 보셨습니까? https://docs.gradle.org/current/userguide/application_plugin.html –

답변

0

Deprecated 클래스 :이 클래스는 사용되지 않습니다

FirebaseCredentials

.... GoogleCredentials를 사용하십시오. 빠른 시작 example에서

:

public static void main(String[] args) { 
     // Initialize Firebase 
     try { 
      // [START initialize] 
      FileInputStream serviceAccount = new FileInputStream("service-account.json"); 
      FirebaseOptions options = new FirebaseOptions.Builder() 
        .setCredentials(GoogleCredentials.fromStream(serviceAccount)) 
        .setDatabaseUrl(DATABASE_URL) 
        .build(); 
      FirebaseApp.initializeApp(options); 
      // [END initialize] 
     } catch (IOException e) { 
      System.out.println("ERROR: invalid service account credentials. See README."); 
      System.out.println(e.getMessage()); 

      System.exit(1); 
     } 

     // Shared Database reference 
     database = FirebaseDatabase.getInstance().getReference(); 

     // Start listening to the Database 
     startListeners(); 

     // Kick off weekly email task 
     startWeeklyTopPostEmailer(); 
} 

대신 GoogleCredentials 사용.

관련 문제