3

[GKMatchmaker sharedMatchmaker].inviteHandler 在 iOS 7 中已弃用,但 GameKit 指南仍然说要这样设置。有谁知道我们应该为 iOS 7 实时游戏邀请使用什么?有几个侦听器类的新类/方法,但没有一个专门解决我所看到的这个问题。

'inviteHandler' is deprecated: first deprecated in iOS 7.0
4

3 回答 3

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 (或类似的更定制的东西)。我知道这就是我在以前版本的应用程序中所做的事情,所以不会那么遥远。该方法的结构也非常相似。

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

于 2013-10-06T22:27:11.207 回答
1

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

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

鉴于缺乏文档,现在继续使用已弃用的方法可能是最安全的。无论如何,您都需要在 iOS6 上继续使用它。

于 2013-09-19T20:59:26.483 回答
0

如果您正在运行 a GKTurnBasedMatch,这是一种特殊情况。对于 a GKTurnBasedMatch,邀请被视为回合事件,并由GKLocalPlayerListener函数中的注册者接收:

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

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

于 2017-03-11T14:32:28.600 回答