GameKit GKMatchMaker inviteHandler在iOS7中被弃用,有什么替代品?

时间:2013-09-19 20:44:58

标签: game-center ios7 gamekit

[GKMatchmaker sharedMatchmaker] .inviteHandler在iOS 7中已弃用,但GameKit指南仍然说要以这种方式设置它。有谁知道我们应该在iOS 7实时游戏邀请中使用什么?有几个监听器类的新类/方法,但没有一个特别针对我所见过的。

'inviteHandler' is deprecated: first deprecated in iOS 7.0

3 个答案:

答案 0 :(得分:4)

所以我开始对此感到非常沮丧(几乎神奇地,昨天我的控制台中出现了弃用警告)。 Apple似乎没有说明如何将对象设置为实现新GKLocalPlayerListener协议的东西。

我是这样做的。在对本地播放器进行身份验证之后,我将实现GKLocalPlayerListener协议(在本例中为self)的对象注册为监听器。我测试了我的应用程序如何响应相同的Game Center事件,并且已做出相应的响应。我相信这是正确的方法,尽管我仍在质疑哪个地方最适合注册听众。我认为在播放器通过身份验证后进行此操作是有道理的,但它可能比这更微妙。

NSLog(@"Authenticating local user...");
__weak GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];

localPlayer.authenticateHandler =
^(UIViewController *viewController,
  NSError *error) {

    [self setLastError:error];

    if (localPlayer.isAuthenticated) {

        [localPlayer registerListener:self];

    } else if(viewController) {

        [self presentViewController:viewController];
    } else {


    }
};

您还希望避免多次注册侦听器。这有点像为本地通知注册观察者。如果你不止一次这样做,你的监听器方法最终会被多次调用。

我相信替换的方法:

-(void)handleInviteFromGameCenter:(NSArray *)playersToInvite;

以下是:

-(void)player:(GKPlayer *)player didRequestMatchWithPlayers:(NSArray *)playerIDsToInvite;

通过阅读文档,可以看到在调用它时创建一个GKMatchMakerViewController(或类似的东西,更多一些定制)。我知道这就是我在我的应用程序的早期版本中所做的事情,所以它不会那么遥远。该方法的结构也非常相似。

更多测试将确认这是否确实是接近新协议的正确方法,但到目前为止似乎是正确的。我将继续这样做,直到另有指示。

答案 1 :(得分:1)

看起来预期的替换是GKInviteEventListener协议。您可以在GKLocalPlayer.h中看到对它的引用; GKLocalPlayerListener协议扩展了它。

但是,这个协议的文档有限(您可以在Xcode 5的文档窗口中搜索它,但我没有在网上看到它。)

鉴于缺少文档,现在继续使用已弃用的方法可能是最安全的。无论如何,你还需要继续使用iOS6。

答案 2 :(得分:0)

如果你正在运行GKTurnBasedMatch,这是一个特例。对于GKTurnBasedMatch,邀请被视为转弯事件,并由函数中已注册的GKLocalPlayerListener收到:

player(_ player: GKPlayer, receivedTurnEventFor match: GKTurnBasedMatch, didBecomeActive: Bool)

我正在尝试运行GKTurnBasedMatch,我花了几天时间才找到这些信息,所以我希望通过在此处发布此信息来帮助其他人。