2017-10-11 21 views
0

Firebaseを使用してAndroid Appを開発しています.Firebase Admin SDKを使用して簡単な管理アプリケーションを作成することにしました。 IDE(IntelliJ IDEA)を起動し、Admin SDK経由でデータベースに接続すると問題なく動作しますが、エクスポートされた.jarファイルを起動するとAdmin SDKはデータベースに接続できません。 Firebaseへの接続を初期化するために、私は次の(Kotlin)のコードを使用します。 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ファイルをロードするか、問題が常に発生します。 Gradleのでの.jarを作成するための

、build.gradleファイルには、次のjarブロックが含まれています

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ファイルを提供しますファイル。このアプリケーションには、正しく起動するJavaFX GUIも含まれています。 Firebase接続のみが動作しません。 「gradle jar」の代わりにアプリケーションプラグインを使用しても同じことが起こります。

+0

このjarをエクスポートするために正確に何をしていますか? –

+0

jarファイルのbuild.gradleの内容で質問を更新しました。前述のとおり、Admin SDKデータベース接続を除いてすべて動作します。 –

+0

これを管理するためにGradleのアプリケーションプラグインを使用することを検討しましたか? https://docs.gradle.org/current/userguide/application_plugin.html –

答えて

0

Deprecatedクラス:

FirebaseCredentials

...

このクラスは廃止されました。 GoogleCredentialsを使用します。代わりにGoogleCredentialsを使用して

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

:クイックスタートexampleから

関連する問題