2017-12-11 7 views
1

私はUnity 2017.2.0f3とFirebase SDK 4.2.1で作業しています。Unity Editor環境でPC上で実行すると、apkにビルドしてAndroidデバイスで実行するとFirebaseが私にエラー。Firebaseを搭載したUnity 2017 4.2。 AppはUnity Editorで動作しますが、Androidでアプリケーションを実行すると失敗します。 Firebaseの接続エラー

マイコード:

FirebaseApp.DefaultInstance.SetEditorP12FileName("xxxxxxxxxxxxxxx-admin-sdk.p12"); 
FirebaseApp.DefaultInstance.SetEditorServiceAccountEmail("xxxxxxxxxxxxxxx.iam.gserviceaccount.com"); 
    FirebaseApp.DefaultInstance.SetEditorP12Password("notasecret"); 
    FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => { 
    dependencyStatus = task.Result; 
    if (dependencyStatus == DependencyStatus.Available) { 
    InitializeFirebase(); 
    } else { 
    Debug.LogError(
    "Could not resolve all Firebase dependencies: " + dependencyStatus); 
    } 
    }); 

私はアプリを実行するときには、ユニティ・エディタ上で完璧に動作し、接続するためのサービスアカウントを使用しています。

11-22 21:23:58.819: E/Unity(5835): Firebase.Database.Internal.Core.ValueEventRegistration:FireCancelEvent(DatabaseError) 
11-22 21:23:58.819: E/Unity(5835): Firebase.Database.Internal.Core.View.CancelEvent:Fire() 
11-22 21:23:58.819: E/Unity(5835): Firebase.Database.Internal.Core.View.Runnable30:Run() 

エラーもこのリンクで報告されています:https://github.com/firebase/quickstart-unity/issues/120

私はAPKを生成し、Androidデバイスにインストールするとき、私はアプリを実行したときにでも(サムスンS7を、7.0アンドロイド)、LogCatは私に、このエラーを与えます

助けを歓迎します....

答えて

1

まあ...私は結婚の間違いを犯しました。何らかの理由で、Firebase Real-Time Databaseからデータを読み書きするためのサービスアカウントを設定するだけでは不十分です。これは、ゲームを実行するときにUnity Editorで機能します。しかし、モバイルデバイス(Android)のAPKを終了するとき、App(Game)は有効なFirebaseユーザを認証する必要があります。

FirebaseコンソールでEMAIL/PASSWORDというユーザ署名方法を作成しました。その後、私はFirabase Authetication Unity Packageを使ってmayアプリで認証を行いました。そして、それは動作します。

:ユーザーがFirebase上で認証されてされている場合 は、Firebaseシステムが自動的にさえユニティ・エディタ上で、モバイルデバイス上で、TRUE

{ 
    "rules": { 
    ".read": "auth != null", 
    ".write": "auth != null" 
    } 
} 

https://firebase.google.com/docs/database/unity/start

私の作業コードにリアルタイムのデータベースルールを変更します

private Firebase.Auth.FirebaseAuth auth; 
private Firebase.Auth.FirebaseUser newUser; 

void Awake() { 
    //Using Firebase SDK 
    //This is needed only for the unity editor 
    FirebaseApp.DefaultInstance.SetEditorP12FileName("xxxxxxxxxxxxxxxxxxx-admin-sdk.p12"); 
    FirebaseApp.DefaultInstance.SetEditorServiceAccountEmail("[email protected]"); 
    FirebaseApp.DefaultInstance.SetEditorP12Password("notasecret"); 
    //-------------------------------------- 

    FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => { 
     dependencyStatus = task.Result; 
     if (dependencyStatus == DependencyStatus.Available) { 
      InitializeFirebase(); 
     } else { 
      Debug.LogError(
       "Could not resolve all Firebase dependencies: " + dependencyStatus); 
     } 
    }); 
} 

// Initialize the Firebase database: 
protected virtual void InitializeFirebase() { 
    FirebaseApp app = FirebaseApp.DefaultInstance; 
    // NOTE: You'll need to replace this url with your Firebase App's database 
    // path in order for the database connection to work correctly in editor 

    //This is needed only for the unity editor 
    app.SetEditorDatabaseUrl("https://xxxx.yyyyyyyyy.com/"); 
    if (app.Options.DatabaseUrl != null) app.SetEditorDatabaseUrl(app.Options.DatabaseUrl); 
    //-------------------------------------- 
    Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance; 
    auth.SignInWithEmailAndPasswordAsync("[email protected]", "strongpassword").ContinueWith(task => { 
     if (task.IsCanceled) { 
      Debug.LogError("SignInWithEmailAndPasswordAsync was canceled."); 
      return; 
     } 
     if (task.IsFaulted) { 
      Debug.LogError("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception); 
      return; 
     } 
     Firebase.Auth.FirebaseUser newUser = task.Result; 
     Debug.LogFormat("User signed in successfully: {0} ({1})", 
      newUser.DisplayName, newUser.UserId); 
     //Getting client id for FB using device id 
     FirebaseDatabase.DefaultInstance.GetReference("node1").Child(node2).Child("node3") 
     .ValueChanged += HandleChanged; 
    }); 
} 

注:パスワードは強くする必要があります。 destroyメソッドでサインアウトするのを忘れないでください。そうしないと、次に接続しようとするとエラーが発生し、エラーになります。

auth.SignOut(); 
関連する問題