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

Posted

技术标签:

【中文标题】Unity+Firebase-Database [错误] WebSocket:ws_0 - 无法连接【英文标题】:Unity+Firebase-Database[Error] WebSocket: ws_0 - could not connect 【发布时间】:2018-11-12 02:15:19 【问题描述】:

我似乎无法找到解决此错误的有效解决方案,更完整:

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

团结 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.
        
    );

以下是我访问 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));

规则集:(应该允许所有人)


  "rules": 
    ".read": true,
    ".write": true
  

补充说明:

使用 Firebase 身份验证并且工作正常,我只是无法操作/访问数据库 一直以此作为我的主要参考: https://firebase.google.com/docs/database/unity/save-data 使用 net 3x AND 4x,结果相同 还有单声道

【问题讨论】:

您的代码适用于 Firebase 实时数据库,但您显示的安全规则适用于 Cloud Firestore。两个数据库是完全独立的,所以要确保安全规则和数据库匹配。 @FrankvanPuffelen 抱歉,我发错了,我用 Firebase 更新了它 @FrankvanPuffelen 话虽这么说,我最初确实将项目设为 firestore,但我可以在项目页面中在 firestore 和 firebase 之间切换。这会对局势有什么影响吗? 消息“No route to host”似乎表明客户端无法访问 Firebase 服务器。这可能表明客户端本身存在问题(例如代理)或客户端和服务器之间存在问题(例如防火墙)。 @FrankvanPuffelen 我想在哪里调试这个?请记住,firebase 的身份验证部分可以完美运行。此外,一旦我退出 Unity 编辑器播放模式,就会继续弹出错误。只有当我再次在编辑器中点击播放时才会停止 【参考方案1】:

使用:

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 .

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

【讨论】:

“禁用” dll 是什么意思?我一直在重命名/删除它们,但没有成功 当你点击上面提到的dll文件时,你会看到禁用和启用的复选框。但是禁用 dll uder mono 会影响我项目的数据库调用【参考方案2】:

在新的 firebase_sdk_v6.2.1 7 月版本中已修复

【讨论】:

以上是关于Unity+Firebase-Database [错误] WebSocket:ws_0 - 无法连接的主要内容,如果未能解决你的问题,请参考以下文章

如何归功于 Firebase 和 Android 支持库?

Firebase android:更新依赖项后的Multidex错误

无法从 Android 将数据发布到 Firebase 数据库

unity怎么保存 unity保存的教程

unity怎么unity判断动画结束

unity和unity3D的区别