Unity 2017与Firebase 4.2。应用程序在Unity Editor中工作,但在Android上运行时失败。Firebase连接错误

Unity 2017与Firebase 4.2。应用程序在Unity Editor中工作,但在Android上运行时失败。Firebase连接错误,firebase,unity3d,Firebase,Unity3d,我正在使用Unity 2017.2.0f3和Firebase SDK 4.2.1。当我在Unity编辑器环境下在PC上运行它时,它工作正常。当我将它构建到apk并在Android设备上运行时,Firebase给我一个错误 我的代码: FirebaseApp.DefaultInstance.SetEditorP12FileName("xxxxxxxxxxxxxxx-admin-sdk.p12"); FirebaseApp.DefaultInstance.SetEditorService

我正在使用Unity 2017.2.0f3和Firebase SDK 4.2.1。当我在Unity编辑器环境下在PC上运行它时,它工作正常。当我将它构建到apk并在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);
    }
    });
我正在使用服务帐户进行连接,当我运行应用程序时,它在Unity Editor上运行得非常完美。但当我生成APK并将其安装在android设备(三星S7,android 7.0)上时,当我运行应用程序时,LogCat会给我以下错误:

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()
此链接上还报告了错误:


欢迎任何帮助……

好吧。。。我犯了几个错误,最后我改正了。由于某些原因,仅在项目上设置服务帐户以从Firebase实时数据库读取/写入数据是不够的。运行游戏时,它在Unity Editor上工作。但当您在移动设备(Android)上安装APK时,应用程序(游戏)必须验证有效的Firebase用户

我在Firebase控制台上创建了用户签名方法电子邮件/密码。然后我用Firabase authentication Unity软件包在may应用程序上进行了身份验证,瞧,它起作用了。 当用户在Firebase上进行身份验证时,Firebase系统会自动将实时数据库规则更改为TRUE

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

我的工作代码,即使在Unity Editor和移动设备上:

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("xxxxxxxxxxxxxxxx@yyyyyyyyyyyyyyyyy.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);
        }
    });
}

// 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("mail@mail.com", "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();