有没有办法在GKTurnBasedMatch中更新matchData而不发送“你的转弯”推送通知?

如果我的理解是正确的,那么更新GKTurnBasedMatch中间转弯的matchData属性的唯一方法是[_ currentMatch endTurnWithNextParticipant:_currentParticipant matchData:matchData completionHandler:nil]。

如果Game Center播放器仅在一台设备上安装了游戏,则效果很好,因为通知是作为消息发送到设备的。 因此,当用户当前正在播放时,可以隐藏通知。 但是,如果用户将游戏安装在多个设备上,则其他设备将获得“转向”推送通知。 这让用户感到困惑,特别是我多次更新matchData。

顺便说一句,我知道我可能没有使用endTurnWithNextParticipant:matchData:completionHandler:函数(因为我不是,实际上,结束匹配……但只是更新matchData)。 但是,似乎没有其他方法可以在赛道中更新比赛的状态。

在iOS 6中增加了转弯保存function:

-[GKTurnBasedMatch saveCurrentTurnWithMatchData:completionHandler:] 

来源: GKTurnBasedMatch类参考

有趣的是,为了解决你原来的问题,看来saveCurrentTurnWithMatchData 仍会向其他玩家发送推送通知,即使当前玩家还没有结束!

在我看来,这似乎是一个GameKit设计的缺陷 – 当一个对手的应用程序图标显示在尚未轮到它时,它似乎具有误导性。 多么糟糕的打开它,看到它只是一次又一次的误报!

如果有人在调用saveCurrentTurnWithMatchData时想出了一种抑制这些推送通知的方法 ,我很想知道你是怎么做到的。

更新 :我开始了一个新线程来解决这个问题。

转弯期间应该没有理由更新匹配数据。 其他玩家都不能在轮到他们之前作出反应,所以数据只需要作为从一个玩家到另一个玩家的游戏过渡而传递。