有没有办法在GKTurnBasedMatch中更新matchData而不发送“您的轮到”推送通知?
如果我的理解是正确的,更新GKTurnBasedMatch中途转弯的matchData属性的唯一方法是[_currentMatch endTurnWithNextParticipant:_currentParticipant matchData:matchData completionHandler:nil]。有没有办法在GKTurnBasedMatch中更新matchData而不发送“您的轮到”推送通知?
如果Game Center播放器只在一个设备上安装了游戏,因为通知作为消息发送到应用程序,所以这很有效。因此,当用户正在轮到他时,可以隐藏通知。但是,如果用户将游戏安装在多个设备上,则其他设备将会收到“您的轮到”推送通知。这让用户感到困惑,特别是我多次更新matchData。顺便说一句,我明白,我可能不会使用endTurnWithNextParticipant:matchData:completionHandler:函数,因为它的意图(因为我不是,实际上,结束比赛......但只是更新matchData)。但是,似乎没有其他的办法来更新比赛状态。
中期转环保已经在iOS 6中被加入的:
-[GKTurnBasedMatch saveCurrentTurnWithMatchData:completionHandler:]
在回合中不应该有更新比赛数据的理由。其他玩家都不会在他们回合之前做出反应,所以数据只需要在玩家从一名玩家转换到另一名玩家时通过。
总有一个原因:)。我的理由是:设备之间的数据持久性和防止作弊,比如在转身完成之前强行退出,如果你知道自己会输。 – jonsibley 2012-04-01 19:27:24
基于回合的游戏通常需要额外的数据发送,而另一位玩家轮到他们。例如,聊天消息可以作为匹配数据发送,并且在利用派对或基于小队的游戏玩法的基于回合的游戏中非常常见。即使是像Words With Friends这样的头对头游戏也允许在轮流之间发送聊天消息。 – 2012-04-11 03:39:50
有趣的是,为解决你原来的问题,看来saveCurrentTurnWithMatchData仍然发出推通知给其他玩家,即使当前玩家的回合尚未结束!
在我看来,这看起来像是一个GameKit的设计缺陷 - 当它还没有轮到它时,在对手的应用图标上出现徽章似乎具有内在的误导性。多么无助地打开它,发现这只是一次又一次的虚惊!
如果有人想出一个办法来抑制这些推送通知调用saveCurrentTurnWithMatchData的时候,我很想听听你是怎么做到的。
UPDATE:我开始new thread来解决这个问题。
看起来你发送转的方法是正确的想法。这与[你的其他问题的答案](http://stackoverflow.com/a/9267616/868193)给了我我需要的一切! – 2012-04-11 03:52:45