Android 实时多人游戏:onRoomCreated 变得不稳定 STATUS_NETWORK_ERROR_NO_DATA

Posted

技术标签:

【中文标题】Android 实时多人游戏:onRoomCreated 变得不稳定 STATUS_NETWORK_ERROR_NO_DATA【英文标题】:Android real-time multiplayer: onRoomCreated gets erratic STATUS_NETWORK_ERROR_NO_DATA 【发布时间】:2016-05-18 10:21:27 【问题描述】:

问题:onRoomCreated 返回 STATUS_NETWORK_ERROR_NO_DATA 的几率为 5%,我们无法弄清楚。

该游戏在大约 16 个月的开发中运行良好(清单或 Google Play 控制台中没有缺少“权限”的问题),但从 Google Play 服务 29 开始(“据称”...可能无关) ,这种不可预知的行为开始了,它阻止了任何进一步的创建房间的尝试(同样的错误 statusCode 再次出现,即使在重新启动游戏之后也是如此)。

让它再次工作的唯一方法是在 10-15 分钟后重新启动游戏或重新启动设备(通常可以,但并非总是如此)。

问题在 3 个不同的设备上是相同的(这里没有模拟器)。

我们发现这个问题(在 SO 和其他地方)可能与在尝试创建新房间之前未离开房间 (RealTimeMultiplayer.leave(...)) 有关。因此,在尝试创建新房间之前,我们至少要等待“onLeftRoom”结束(加上 3 秒,以防万一)。无济于事。

显然,我们遵循推荐的准则:在 onCreate 中实例化 GoogleApiClient,在 onStart 中实例化 .connect,在 onStop 中实例化 .disconnect(即使 .connect 正在进行中)...

还要注意,因为它应该是“NETWORK_ERROR”,所以我们在每次尝试创建房间之前都会验证 Internet 连接(通过 ping)。

如果您有关于此问题的任何信息,或者如果您知道如何让 Google Play 在此状态代码之后创建房间而不重新启动设备,请告诉我们,因为在此之前我们的发布日期将永远推迟。非常感谢。

【问题讨论】:

【参考方案1】:

[更新 2]:应用程序被重写以停止自动创建房间(因此请求频率较低),并且......没有......仍然是相同的错误/问题/你命名它......一遍又一遍...然后 Google Play 更新了应用程序“Google Play 游戏”(也许还有“服务”),它有点工作:2 周内只有一个 STATUS_NETWORK_ERROR_NO_DATA ......现在我要睡 2 个月,因为我 [编辑]。

[UPDATE]:根据this post,STATUS_NETWORK_ERROR_NO_DATA 用于限制请求的频率。因为我们确实自动创建和关闭房间,这可能是明确的答案。当它被验证或没有被验证时,我会再次更新。 我留下这个答案的其余部分,因为虽然它没有直接关系,但不关闭房间也会导致错误。[END OF UPDATE]

这是对这种不可预测的行为的答案(不是来自 SO,但你们中的一些人可能仍然感兴趣):在“onStart”和“onStop”中,对 Google Play 服务的所有调用/请求(是否使用 mGoogleApiClient)必须在“super.onStart();”之前进行和“super.onStop();”。

否则“super.onStop();”之后的内容将在结束之前被中断(设备的速度和负载会增加一些随机性),这意味着任何对“.leave”打开房间的调用都将失败,然后阻止创建新房间(因此出现 STATUS_NETWORK_ERROR_NO_DATA 错误)。

还要注意变量 mGoogleApiClient 不应该被声明为静态的,记得调用“mGoogleApiClient.disconnect();”在“onStop”中(示例“ButtonClicker”在其他地方推荐时不会这样做)。

【讨论】:

如何在 onstop 被调用时等待回调 onleftroom()? “所以在尝试创建新房间之前,我们至少要等待“onLeftRoom”结束(加上 3 秒,以防万一)。” @skymedium: 当“onStop”被调用时,房间是“左”的(带有.leave(...))但我们不等待 onleftroom() 因为它变得无用创建一个新房间...只有当两个玩家中的一个离开房间(并且应用程序继续运行)时,我们才会等待 onleftroom,因为它是这个特定房间一切都已完成并结束的信号。 我遵循了您的所有指示,但仍然收到 NETWORK_ERROR。您还有其他建议吗?你能分享你的答案的来源吗? 问题(对我们而言)是当您退出应用程序或尝试创建另一个房间时,房间已创建但未正确关闭(使用 .leave(...))。确保在离开房间后等待“onLeftRoom”,以创建一个新房间。在 onDisconnectedFromRoom 之后不要离开房间。很遗憾,我无法分享我们的来源,抱歉。 好的,抱歉,这不是一个有效的答案......问题又回来了......除了这次是设备在一段时间内无法访问互联网,以及何时应用程序启动房间创建失败(尽管互联网访问已通过 2 种不同方式进行验证)。这意味着我们仍然不可能发布我们的游戏,而 2 年的工作对垃圾箱来说是件好事。请帮忙!!!!

以上是关于Android 实时多人游戏:onRoomCreated 变得不稳定 STATUS_NETWORK_ERROR_NO_DATA的主要内容,如果未能解决你的问题,请参考以下文章

Android 上的 Google 实时多人游戏

我可以在 Unity Android Free 中使用 Google Play 游戏服务 - 实时多人游戏吗?

Google Play 游戏服务 (GPGS) 实时多人游戏 (RTMP) 在 Android 上永远无法匹配(iOS 工作)

实时多人游戏或回合制多人游戏 API? [关闭]

Android 实时多人游戏:onRoomCreated 变得不稳定 STATUS_NETWORK_ERROR_NO_DATA

Google Play 实时多人游戏问题