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:更新依赖项后的Multidex错误