iOS 7:如何为Game Center媒人设置邀请处理程序

在iOS 7中处理其他玩家邀请的正确方法是什么?

在我的视图加载到我的根视图控制器之后,我打电话给一个游戏中心authentication方法,之后我设置了一个如下所示的邀请处理程序:

[[GKLocalPlayer localPlayer] registerListener:self]; 

我的视图控制器采用GKLocalPlayerListenerGKInviteEventListener协议,顺便说一下,注册一个监听器AppDelegate的最佳位置是什么? 也许或者也许我的自定义游戏中心单身?

我添加一个在GKInviteEventListener描述的方法

 -(void)player:(GKPlayer *)player didAcceptInvite:(GKInvite *)invite { NSLog(@"Invite accepted!"); GKMatchmakerViewController *mmvc = [[GKMatchmakerViewController alloc] initWithInvite:invite]; mmvc.matchmakerDelegate = self; [self presentViewController:mmvc animated:YES completion:nil]; } 

但是,游戏中心媒– matchForInvite:completionHandler:有这样的话题:接受来自其他玩家的邀请和方法– matchForInvite:completionHandler:我不明白如何使用它。

那么,我必须使用什么?

我想你正在做的事情。 我以同样的方式做了事,对我也有效。 – matchForInvite:completionHandler在iOS 7中不推荐使用,所以我不做任何事情。

首先我设置身份validation处理程序。 这是我的应用程序第一次加载时调用的,你可以将它设置在任何你喜欢的地方,但最好尽快设置处理程序。

 -(void)authenticateLocalPlayer { GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; __weak GKLocalPlayer *blockLocalPlayer = localPlayer; //Block is called each time GameKit automatically authenticates localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error) { [self setLastError:error]; if (viewController) { self.authenticationViewController = viewController; [self disableGameCenter]; } else if (blockLocalPlayer.isAuthenticated) { [self authenticatedPlayer:blockLocalPlayer]; } else { [self disableGameCenter]; } }; } 

如果authentication成功,那么我调用这个方法:

 -(void)authenticatedPlayer:(GKLocalPlayer*)localPlayer { self.isAuthenticated = YES; [[NSNotificationCenter defaultCenter]postNotificationName:AUTHENTICATED_NOTIFICATION object:nil]; [[GKLocalPlayer localPlayer]registerListener:self]; } 

然后我实现了两个监听器方法:

 (void)player:(GKPlayer *)player didAcceptInvite:(GKInvite *)invite { //.... insert some cleanup code here to manage view controllers etc before presenting the matchmakerviewcontroller. [self presentMatchmakerViewControllerWithInvite:invite]; } -(void)player:(GKPlayer *)player didRequestMatchWithPlayers:(NSArray *)playerIDsToInvite { //......insert some cleanup code for managing view controllers GKMatchRequest *match = [[GKMatchRequest alloc]init]; match.playersToInvite = playerIDsToInvite; GKMatchmakerViewController *mmvc = [[GKMatchmakerViewController alloc]initWithMatchRequest:match]; mmvc.matchmakerDelegate = root.viewControllers[0]; [[[[[UIApplication sharedApplication]delegate]window]rootViewController]presentViewController:mmvc animated:YES completion:nil]; }