我终于找到了解决方法。
如果您删除匹配项,然后调用GKTurnBasedMatch:loadMatchesWithCompletionHandler
,则删除的匹配项不会出现(如预期的那样)。但是,事实证明,如果您碰巧还有已删除匹配的 ID,您仍然可以使用 重新下载已删除的匹配。GKTurnBasedMatch:LoadMatchWithID
我认为我们可以合理地假设 The Cheater 将再次玩这款游戏。否则,他们为什么会在意蒙受损失?因此,我实现了以下内容:
- 在设备上本地维护一个匹配表。
- 在启动时,从 Game Center 中提取本地玩家的比赛列表并与我的本地列表进行比较。
当 The Cheater 识别情况并使用 Game Center 界面删除比赛时,比赛将从 Game Center 中删除,但不会从我的本地数据库中删除。当 The Cheater 再次开始我的游戏时,我发现他们在本地的比赛比在 Game Center 上的比赛多。
然后,我酌情调用participantQuitInTurnWithOutcome
或participantQuitOutOfTurnWithOutcome
,结果为GKTurnBasedMatchOutcomeLost
。
这将转牌传递给下一位玩家并记录骗子的损失。但是,如果作弊者不再玩游戏,它就行不通了。(但是,如果他们不参加比赛,他们就不会再破坏比赛,所以混乱是可控的)