Apple在iOS 7中为基于回合制的多人游戏引入了“交流”。他们提到的一个可能的应用是聊天功能。所以我一直在尝试使用交换来为我的游戏实现聊天功能,但交换似乎并不适合这个。由于Apple专门提到它,我想也许我的方法是错的。
我的方法是为每条聊天消息发送一个交换请求,并在请求中嵌入消息文本。另一个玩家收到请求,提取消息并在本地保存,然后回复交换以完成它。最后,即将发送转弯的玩家需要首先检查是否有任何已完成的交换并解决它们。我对这种方法的一些问题是:
- 游戏中心发送
回复交换请求时的通知。所以如果玩家1
向播放器2发送聊天消息,然后播放器1将接收到
播放器2收到消息时的通知。没有
似乎是一种禁用回复事件通知的方法,因此如果应用程序关闭或在后台播放器1将获得游戏中心横幅。
- 为了解决交换,我需要致电
saveMergedMatchData:withResolvedExchanges:completionHandler:
,将更新的游戏数据发送到游戏中心。但在这种情况下,游戏数据保持不变,因此我不得不不必要地上传额外的数据,这在玩家网络连接不良时可能会很昂贵。
- 在解决所有打开的交换之前向游戏中心发送转弯会导致错误。所以所有交易都需要先解决。 GKTurnBasedMatch对象包含一个包含所有未解析的交换的数组“交换”,但如果另一个玩家已经回复到我们的某个交易所,则此数据可能已过时。所以我需要再次下载当前比赛的matchData以检查未解决的交换,然后才能转弯。
使用交换机实现聊天功能有更好的方法吗?