繁体   English   中英

Firebase Unity:如何处理没有互联网连接的情况

[英]Firebase Unity: How to handle no internet connection situations

我想做的事

我有一个Unity的小游戏,我在firebase实时数据库中存储了一个用户分数,以便稍后显示排行榜,当用户第一次进入游戏时,我也会询问用户名并用deviceId保存(用于识别设备)。 所以现在我想处理当用户没有连接到互联网时的情况,我想将该数据存储在设备中,当用户获得连接或再次进入游戏时,我将更新 firebase 实时数据库中的数据。

我的问题是什么

这里的问题是 firebase 没有抛出任何没有连接的异常,它只是一直尝试连接到互联网,直到有连接。 您可能会建议在用户进入游戏时检查互联网连接,但我也想在用户开始连接互联网并假设在游戏期间用户将失去互联网的情况下处理它,如果发生这种情况我想如上所述,将数据存储在设备中。 所以我需要捕捉没有互联网连接的情况才能在设备中存储数据。

我试过的

1)

DatabaseReference connectedRef = FirebaseDatabase.DefaultInstance.GetReference(".info/connected");
    connectedRef.ValueChanged += (object sender, ValueChangedEventArgs a) => {
    bool isConnected = (bool)a.Snapshot.Value;
    Debug.Log(isConnected);
};

当用户在游戏过程中失去互联网连接时不会触发,所以我无法捕捉到没有互联网连接异常

2)

Task timeoutTask = Task.Delay(1000);
Task firebaseConnection = await database.Child("users").GetValueAsync();
if (await Task.WhenAny(firebaseConnection, timeoutTask) == firebaseConnection) {
    Debug.Log("timeout");
} else {
    Debug.Log("completed");
}

我认为在 firebase 连接上设置超时将是目前唯一的解决方案,但这也不起作用Debug.Log("timeout"); 没有互联网连接时从不登录。

我一直在为此寻找解决方案,只找到了那些似乎可行的 2 个答案,但没有运气,我没有想法,不知道如何解决这个问题。 期待您的帮助,谢谢。

编辑:

以下代码我的机器上运行于 MacOS 上 Unity SDK 6.15.1 和 6.13 的编辑器中:

FirebaseDatabase.DefaultInstance.GetReference(".info/connected").ValueChanged += HandleConnectedChanged;
FirebaseDatabase.DefaultInstance.GetReference(".info/serverTimeOffset").ValueChanged += HandleServerTimeOffsetChanged;
private void HandleServerTimeOffsetChanged(object sender, ValueChangedEventArgs e)
{
    Debug.Log($"Offset: {e.Snapshot.Value}");
}

private void HandleConnectedChanged(object sender, ValueChangedEventArgs e)
{
    Debug.Log($"Connected: {e.Snapshot.Value}");
}

虽然输入“无连接”state 可能需要一些时间(例如,当您关闭 WiFi 时它不会立即触发),但会立即响应GoOffline()GoOnline

总结评论:

".info/connected"在 iOS 和 Android SDK 中实现,因此在设备上可用。 在 Unity 编辑器中进行测试时,使用C++ 编写的平台特定后端 SDK的重新实现,它没有完全实现".info/connected"等特殊节点(截至 6.15.1)。 要测试与当前连接的实时数据库 state 相关的逻辑,您必须部署到物理设备。

此外,尝试以一种主要依靠ValueChanged读取数据和RunTransaction写入数据的方式设计您的游戏。 这将为您提供在各种网络条件下的弹性,并帮助您在竞争条件下加强您的游戏,如果您需要它们以进行快速测试,这些将在 Unity 编辑器中工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM