在 iOS 10 上,我尝试使用 GKTurnBasedMatchmakerViewController 创建匹配。我可以调出视图,以便用户可以选择匹配或邀请。我无法弄清楚如何可靠地确定为此创建了哪个匹配项。问题是,在 iOS 10 中,GKTurnBasedMatchmakerViewControllerDelegate 的 didFindMatch 方法已被弃用。该方法曾经与比赛一起调用。以前的日子很轻松!
弃用消息显示“使用 GKTurnBasedEventListener player:receivedTurnEventForMatch:didBecomeActive”。文档和堆栈溢出线程充满了调用该方法的原因。请参阅此线程以获得一个好的列表: Gamecenter ios 9 GameCenter GKLocalPlayerListener methods not called。如果你想象一个用户已经玩了几款游戏,你会看到这个方法会因为很多不同的原因被调用,据我所知,它可能随时发生。我的问题是:如何确定这些调用中的哪一个是“我刚刚为你创建了一个匹配,就在这里!” 称呼。
一些我认为行不通的例子:
- 简单地假设在您调出 GKTurnBasedMatchmakerViewController 之后发生的第一次调用 receivedTurnEventForMatch 似乎是错误的,因为 receivedTurnEventForMatch 可能会通知用户轮到他们在另一个游戏中。除非系统保证,当视图启动时,它们只会调用与视图对应的匹配项的此方法。这似乎是一个相当大的黑客,所以我假设他们不这样做。
- 对处于“匹配”状态且 didBecomeActive=true 的其他玩家调用 receivedTurnEventForMatch 似乎是比赛中第一个玩家的解决方案,但不是第二个(因为两个玩家都完成了匹配)。
- 查看 MatchID 并查看我们是否“以前见过”,如果没有,假设它是刚刚创建的匹配似乎不可靠,因为用户可能已经卸载了应用程序然后重新安装,而我们已经忘记了所有关于哪个我们“以前见过”的比赛。
我被卡住了,任何帮助表示赞赏。