iOS 7:如何为Game Center媒人设置邀请处理程序
在iOS 7中处理其他玩家邀请的正确方法是什么?
在我的视图加载到我的根视图控制器之后,我打电话给一个游戏中心authentication方法,之后我设置了一个如下所示的邀请处理程序:
[[GKLocalPlayer localPlayer] registerListener:self];
我的视图控制器采用GKLocalPlayerListener
和GKInviteEventListener
协议,顺便说一下,注册一个监听器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]; }