【问题标题】:Unity Firebase realtime database internal exceptionUnity Firebase 实时数据库内部异常
【发布时间】:2018-09-13 10:52:22
【问题描述】:

我使用 firebase 实时数据库来保存我的游戏数据。当没有互联网并且我尝试发送 JSON 数据时,它经常给我内部错误。似乎它无休止地尝试发送数据,但我只调用了一次。这会导致控制台内出现错误日志垃圾。

    FirebaseDatabase.DefaultInstance.RootReference
        .Child("users")
        .Child(GetUserID())
        .SetRawJsonValueAsync(json)
        .ContinueWith(task => {
            if (task.Exception != null || task.IsCanceled || task.IsFaulted) {
                Debug.LogError("FirebaseStorageService - Upload User Data - FAILED!");
            } else {
                Debug.Log("FirebaseStorageService - Upload User Data - DONE");
            }
        });

我希望进入传递给 ContinueWith 的回调方法并能够在那里处理异常。我应该拥有的似乎是“task.Exception”。我也不能去那个街区。

我反复收到的错误信息:

09-13 11:50:51.777 30555 31681 E Unity   : 09/13/2018 08:50:51 [Error] WebSocket: ws_5 - WebSocketException during handshake
09-13 11:50:51.777 30555 31681 E Unity   : Firebase.Database.Internal.TubeSock.WebSocketException: unknown host: cooking-game-88ssd.firebaseio.com ---> System.Net.Sockets.SocketException: No such host is known
09-13 11:50:51.777 30555 31681 E Unity   :   at System.Net.Dns.GetHostByName (System.String hostName) [0x00000] in <filename unknown>:0
09-13 11:50:51.777 30555 31681 E Unity   :   at System.Net.Dns.GetHostEntry (System.String hostNameOrAddress) [0x00000] in <filename unknown>:0
09-13 11:50:51.777 30555 31681 E Unity   :   at Firebase.Database.Internal.TubeSock.WebSocket.GetIpAddress (System.String hostName) [0x00000] in <filename unknown>:0
09-13 11:50:51.777 30555 31681 E Unity   :   --- End of inner exception stack trace ---
09-13 11:50:51.777 30555 31681 E Unity   :   at Firebase.Database.Internal.TubeSock.WebSocket.CreateSocket () [0x00000] in <filename unknown>:0
09-13 11:50:51.777 30555 31681 E Unity   :   at Firebase.Database.Internal.TubeSock.WebSocket.RunReader () [0x00000] in <filename unknown>:0

更新 1: 我刚刚发现这不仅仅是发送或检索。即使有以下声明,我也收到了这些信息:

DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference;

更新 2:

Firebase 4.2 版

【问题讨论】:

    标签: c# firebase unity3d firebase-realtime-database firebase-authentication


    【解决方案1】:

    这是按预期工作的,但显然不是您预期的那样。 :-)

    任务仅在以下情况下完成:

    • 要么将写入提交到服务器上的磁盘。
    • 或者写入被(服务器上的安全规则)拒绝。

    Firebase SDK 不会将丢失的连接视为致命错误。它保留一个挂起的写操作队列,并重试它们,直到它们在服务器上成功/失败。只有这样才能完成任务。

    当您的连接偶尔断开(即移动时在移动设备上)时,这通常非常有用,因为 Firebase 会自动处理间歇性连接断开。

    如果您希望您的代码在没有连接的情况下甚至不尝试编写,您需要使用您平台的互联网检测 API 或 listen to Firebase's .info/connected 路径以确保您已连接到 Firebase 后端在尝试写之前。您通常会将后者置于全局状态,然后在写入数据库之前对其进行检查。

    【讨论】:

    • 所有版本的 Firebase 都一样吗?
    • 完成侦听器的处理,以及.info/connected 的逻辑自引入以来并未发生实质性变化。
    【解决方案2】:

    也可能是由于您的路径 (.Child) 名称中存在无效字符

    您可以通过手动添加数据来测试无效字符。如果您看到“路径包含无效字符”,则会抛出内部异常


    在我的例子中,我必须将House-content-324xn4.txt 之类的字符串更改为简单的House-content-324xn4

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 2017-07-02
      • 1970-01-01
      • 2023-03-28
      相关资源
      最近更新 更多