Posted at

Unity+Firebase RealTimeDatabase Editor上で環境によっては突然接続できなくなる


経緯

コワーキングスペース的な所でドヤリングしながら、Unity+FirebaseRealtimeDatabaseでゲーム作ろうとしたら

「[Error] WebSocket: ws_0 - could not connect」

「[Error] WebSocket: ws_0 - WebSocketException during handshake
Firebase.Database.Internal.TubeSock.WebSocketException: unknown host: ****.firebaseio.com ---> System.Net.Sockets.SocketException: No route to host」

みたいに怒られてなんで?となったので記録しときます


結論


Realtime Database connection is flakey on desktop

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


desktop上(Unity Editor)だとネット環境によっては上手く接続できない事があるみたいです。

対策は以下

*利用している環境を変える(違うwifiやネット環境を利用する)

*「Firebase/Plugins/FirebaseDatabase.dll」をEditor上で有効にする(但し動作が不安定)


再現環境

MacBook Pro (15-inch, 2017)

OS:10.13.6(17G5019) High Sierra

Unity: 2018.3.0f2

Scripting Runtime Version: .NET 4.x Equivalent


まずそもそも読み書き権限つけ忘れてないか確認

RealtimeDatabaseはルールを設定して読み書きの権限を設定できます。

うっかり

{

"rules": {
".read": false,
".write": "auth != null && auth.isAdmin == true"
}
}

なんてしてたら当然読み込みできません。(自分はうっかりしてたけど・・・)

ちなみにその場合はこういう警告がEditorのコンソールに出力されます。

[Warn] SyncTree: Listen at /******* failed: DatabaseError: Permission denied

UnityEngine.Debug:LogWarning(Object)


権限ちゃんとついてるのに何故かエラーになるんだけど・・・

で、うっかり権限を修正した後に冒頭のエラーに出くわして、なんでえええええっとなってたわけでした。

ネットの海を泳いで、結論のページにたどり着きました。

実際にやって見た所

1.ポケットwifiを持っていたので、コワーキングスペースのwifiからそちらを利用するように切り替えるとちゃんと応答返ってきてデータ取れました。

→お家に帰った後に有線、無線両方の環境で再度確認した所両方データ取れました。

 ピンポイントでハズレ引いたみたい・・・

2.コワーキングスペースのwifiに戻して、「Firebase/Plugins/FirebaseDatabase.dll」をEditor上で有効にしたら同様にデータ取れました

 →Import時に特に設定を変更していない場合「Assets/Firebase/Plugins/FirebaseDatabase.dll」に対象のファイルがいます。

スクリーンショット 2019-02-03 19.51.27.png

但しissueに記載の通り動作は不安定で、時々UnityEditor毎落ちます


However, if you have to use it, you should expect the instability. This is why it is disabled for Editor by default.

↓↓↓Google 翻訳

しかし、あなたがそれを使わなければならないなら、あなたは不安定さを期待するべきです。エディターではデフォルトで無効になっているのはこのためです。



感想

もし、制作する側の立場の場合、こういう環境に依存するようなやつが一番めんどくさいだろうなとは思います。

そもそもFirestore使えと言われたら、ハイ、スイマセンって感じですが・・・


参考

https://stackoverflow.com/questions/50651865/unityfirebase-databaseerror-websocket-ws-0-could-not-connect

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