- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想做什么
我有一个 Unity 的小游戏,我将用户分数存储在 firebase 实时数据库中以稍后显示排行榜,当用户第一次进入游戏时,我还会询问用户名并将其与 deviceId 一起保存(以识别设备).所以现在我想处理用户没有连接到互联网的情况,我想将该数据存储在设备中,当用户获得连接或再次进入游戏时,我将更新 firebase 实时数据库中的数据。
我的问题是什么
这里的问题是 firebase 不会抛出任何没有连接的异常,它只是一直尝试连接到 internet 直到有连接。您可能会建议在用户进入游戏时检查互联网连接,但我也想在用户开始使用互联网连接并假设在游戏过程中用户将失去互联网的情况下处理它,如果发生这种情况我想如上所述将数据存储在设备中。所以我需要捕获没有互联网连接的情况才能在设备中存储数据。
我尝试过的
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}");
}
虽然进入“无连接”状态可能需要一些时间(例如,当您关闭 WiFi 时它不会立即触发)但会立即响应 GoOffline()
和 GoOnline
.
总结评论:
.info/connected"
在 iOS 和 Android SDK 中实现,因此可在设备上使用。在 Unity 编辑器中测试时,重新实现了 platform specific backend SDKs written in C++而是使用没有完全实现的特殊节点,例如 ".info/connected"
(从 6.15.1 开始)。要测试与实时数据库当前连接状态相关的逻辑,您必须部署到物理设备。
此外,尝试以主要依赖 ValueChanged
的方式设计您的游戏读取数据和RunTransaction
写入数据。这将使您在各种网络条件下具有弹性,并有助于加强您的游戏以应对竞争条件,如果您需要它们以进行快速测试,这些将在 Unity 编辑器中发挥作用。
关于c# - Firebase 统一 : How to handle no internet connection situations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62723721/
之前没用过线程,但想我可能遇到了一个机会: 我编写了一个脚本,它可以读取大约 500 个 Excel 文件的数组,并使用 Parse::Excel 从工作簿中的特定工作表中提取值(平均每个工作簿有两张
我有一个表“客户”和一个子表“订单”。 对于特定 View ,我需要显示每个客户的最后订单。 由于您不能在联接中使用 LIMIT,我首先使用了一个复杂的解决方案,其中包含 LEFT JOIN、GROU
我使用 Farseer 已经有一段时间了,从事物理教学平台项目。我脑子里有几个关于引擎的问题很长一段时间都没有得到解答,其中很多是关于引擎的碰撞处理。 许多人似乎无法理解引擎的工作原理,部分原因是 F
对于表格: address: address_id, country, city user: user_id, username, address_id store: store_id, addres
mysqli_query($dbc, "DROP TABLE `applicants`") or die(mysqli_error($dbc)); mysqli_query($dbc, "DROP T
在我的情况下,更好的解决方案是什么?如何设计类以使它们不那么耦合? 我有一个库 (API),它提供了一些功能(例如,使用 subscribe 方法订阅流式外汇价格)。我有一个 API 客户端,它告诉
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我找不到正确的方法来让我的 GET 处理程序正常工作。在下面的代码中,当我向该端点发送 GET 请求时,我的数组元素全部显示为“Promise:Pending”。你能建议一种方法来解决它吗?我尝试使用
我目前已经构建了一个系统来检查用户 IP、浏览器和随机字符串 cookie 以确定他是否是管理员。 在最坏的情况下,有人会窃取我的 cookie,使用与我相同的浏览器,并掩盖他的 IP 以显示为我的
我的 C++ winAPI 应用程序需要在将文件上传到服务器之前创建一个临时文件。所以我搜索了创建临时文件的方法,发现有很多方法可以做到这一点。 您能告诉我吗:对于以下每种方法,我应该在哪种情况下使用
if (signal(SIGINT, SIG_IGN) != SIG_IGN) signal(SIGINT, sig_int); 这段代码我已经看过好几遍了。这让我很困惑。这样做,只有当信号当
编译器告诉我AnyObject?没有名为'count'的成员。对于以下代码。我想知道是否有一种方法可以将其强制转换为NSArray? if answer.objectForKey("
我有某种资源可以由两种类型的任务使用:由许多不同线程同时运行的普通任务和很少由单个线程运行的特殊任务。 我的目标是: 除非特殊任务正在运行,否则所有普通任务都应该能够正常访问此资源。 特殊任务还应等待
“特定情况”是指它使用一些它可以访问的数据,例如您当前的数据库设置、某些操作系统的版本等。 想象一下,如果编译器会检查您当前在应用中使用的数据库,并向您发出警告,说'让您知道,您数据库中的当前数据永远
在呈现列表时,我可以找到的所有信息都使用键突出显示,例如: {array.map((item, index) => {item})} 在列表以外的情况下,提供 key 是否也有帮助? 简单
我正在开发一个看起来像一本书的 SPA(单页应用程序)。 在书的一侧有标签,用户可以单击这些标签以导航到书的不同区域。 这些选项卡还使用 CSS3 转换对其应用了转换效果。 问题是,有时,当我单击其中
我有一个应用程序,我即将发布到应用程序商店。该应用程序与公司名称相同。我知道命名捆绑标识符的推荐方法是 com.yourcompanyname.appname 但是,例如,像这样命名它似乎很愚蠢且重复
我想做什么 我有一个 Unity 的小游戏,我将用户分数存储在 firebase 实时数据库中以稍后显示排行榜,当用户第一次进入游戏时,我还会询问用户名并将其与 deviceId 一起保存(以识别设备
我正在尝试在 R 中做一个简单的基因组轨道交叉,并遇到主要的性能问题,可能与我使用 for 循环有关。 在这种情况下,我以 100bp 的间隔预定义了窗口,并且我正在尝试计算 mylist 中的注释覆
由于代码的不同,g++ 处理这种情况的方式是否有所不同?对于初学者来说,这似乎是完全相同的代码。 我应该提一下,这两棵树的规模都很大,每棵树都包含大约十个张量,每个张量的估计元素数为 10^5 左右的
我是一名优秀的程序员,十分优秀!