iphone - 警报式 iOS 通知(如消息)导致实时 Game Center 匹配停止接收消息

标签 iphone ios objective-c

由于某些原因,当在实时比赛中弹出 iOS 警报样式通知(消息、警报等)时,比赛将停止接收来自对手的数据。应用程序本身可以运行,但玩家之间没有数据传输。

委托(delegate)没有收到来自match:(GKMatch *)match player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)stateauthenticationChanged 的回调,所以它看来这两名球员仍然与比赛保持联系。

无论用户是关闭还是打开警报样式通知,都会出现此问题。

关于为什么/如何发生这种情况以及我如何预防/恢复的任何想法?

最佳答案

经过数小时的调试、研究和挫败,我发现了我的问题。

由于断开连接和退出事件状态很可能是移动设备和游戏中心的事件,因此我使用数据队列发送消息。它的工作原理是将当前消息堆叠在队列中(如果它是唯一的消息,则发送该消息)并运行以下数据传输步骤:1)发送队列中最旧的消息,2)等待对方接收确认,3)删除最旧的消息来自队列的消息,4) 如果队列计数仍然 > 0,发送队列中最早的消息...

然而,对于某些数据类型,我们希望绕过队列并且不要求接收确认。一个这样的例子是当我们向对手发送有关应用程序通知 UIApplicationWillResignActiveNotificationUIApplicationDidBecomeActiveNotification 的消息时。然而,即使消息没有要求回执确认,我也忘了绕过队列。由于对手从未发回回执确认,UIApplicationWillResignActiveNotification 消息无限期地阻塞队列。

我适本地绕过了队列,游戏现在可以毫无问题地恢复。如果有人想查看涉及的实际代码,我很乐意分享。

关于iphone - 警报式 iOS 通知(如消息)导致实时 Game Center 匹配停止接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15169207/

相关文章:

ios - 使用 swift 4.2 动画 UIView

iphone - 如何使用 Storyboard从 Masterview 推送到详细 View ?

ios - UIPageViewController 转换 'Unbalanced calls to begin/end appearance transitions for '

ios - 为什么 iOS 中的 slider 最小值图像变得模糊?

ios - 在 iOS 应用程序中使用 Instagram sdk 获取标记的人

javascript - 如何在iPhone应用程序中集成javascript?

iphone - Rechability.m 中的错误

ios - iOS中需要将UITextField的字符输入限制为两个字符

objective-c - 关于GNUstep AutoReleasePool的Objective-C未声明的问题

ios - 这个Sqlite3语句可以吗?