Unity + Firebase-Database [错误] WebSocket:ws_0-无法连接

N1T*_*Y3R 3 c# unity-game-engine firebase firebase-realtime-database

我似乎无法找出解决此错误的更完整的解决方案:

018-06-01 10:33:09 PM [错误] WebSocket:ws_0-无法连接 System.Net.Sockets.SocketException(0x80004005):主机没有路由

2018-06-01 10:33:09 PM [错误] WebSocket:ws_0- 握手过程中的WebSocketException Firebase.Database.Internal.TubeSock.WebSocketException:未知主机:########。firebaseio.com-> System.Net.Sockets.SocketException:没有路由到主机

请注意,上述错误每秒重复几次,并且ws_#每次递增1

Unity 2018.1.1f1

Firebase-Database:几天前获得的最新信息

代码位:

void Start() {
    FirebaseApp.LogLevel = LogLevel.Verbose;
    FirebaseDatabase.DefaultInstance.LogLevel = LogLevel.Verbose; // Or your database instance, if not using the default.

    FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
        var dependencyStatus = task.Result;
        if (dependencyStatus == Firebase.DependencyStatus.Available) {
            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.
            app.SetEditorDatabaseUrl("https://########.firebaseio.com/");
            if (app.Options.DatabaseUrl != null) app.SetEditorDatabaseUrl(app.Options.DatabaseUrl);
        } else {
            Debug.LogError(System.String.Format(
                "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
            // Firebase Unity SDK is not safe to use here.
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

以下是我尝试访问Firebase数据库的尝试

DatabaseReference mDatabaseRef = FirebaseDatabase.DefaultInstance.RootReference;
staticLocalData.thisUser = new UserData();
staticLocalData.thisUser.userID = newUser.UserId;
staticLocalData.thisUser.email = email;
staticLocalData.thisUser.firstName = firstName;
staticLocalData.thisUser.lastName = lastName;
registerData temp = new registerData();
temp.firstName = firstName;
temp.lastName = lastName;
temp.email = email;
temp.userName = userName;

Debug.Log(JsonUtility.ToJson(temp));
mDatabaseRef.Child("users").SetValueAsync("saddsa:23");  
//mDatabaseRef.Child("users").Child(newUser.UserId).SetRawJsonValueAsync(JsonUtility.ToJson(temp));
Run Code Online (Sandbox Code Playgroud)

规则集:(应允许所有)

{
  "rules": {
    ".read": true,
    ".write": true
  }
}
Run Code Online (Sandbox Code Playgroud)

附加条款:

pau*_*ler 7

使用方法:

OSX Sierra 10.12.6上的Unity Editor 2018.2.5f1

脚本运行时4.x

脚本后端IL2CPP

API等级4.x

Firebase插件版本5.2.1

发生了完全相同的问题。这似乎与Mono Websocket的实现有关,如以下问题所示:

https://github.com/firebase/quickstart-unity/issues/106

https://github.com/firebase/quickstart-unity/issues/162

Firebase开发团队通过为每个平台提供自己的本机websocket实现来解决此处描述的问题。显然,Unity Editor的实现滞后了。

解决此问题的方法是通过在编辑器平台的../Firebase/Plugins/Mono/下禁用FirebaseDatabase.dll,然后直接在../Firebase/Plugins/下启用一个FirebaseDatabase.dll。

到目前为止,一切都很好。