我正在尝试实现游戏中心邀请在一个2人的实时游戏。由于模拟器中不支持邀请,所以我在运行iOS5的一个设备上和运行iOS6的另一个设备上测试这个邀请(这是故意的)。
如果我在任何一种设备上使用老式的内置GKMatchmakerViewController UI来启动invite,那么无论是在iOS5设备启动邀请时还是在iOS6设备启动时,这两种方式都能很好地工作。
但是,在iOS6中,我希望使用自己的UI来选择要邀请的播放器,因此我使用GKMatchRequest以编程方式发出invite,设置playersToInvite属性。
问题是,另一个( iOS5 )设备收到推送通知,启动应用程序,运行[GKMatchmaker sharedMatchmaker].inviteHandler,显示带有邀请细节的游戏中心UI,但即使iOS6设备发送finishMatchmakingForMatch请求--iOS5设备不再继续。在iOS5机器上没有调用其他处理程序/委托,也没有返回GKMatch对象,它继续显示游戏中心UI,两个玩家都标记为“就绪”,并带有一条消息,上面写着“等待iOS6玩家开始游戏”。此UI上的唯一按钮是“取消”按钮。
下面是在iOS6机器上发送邀请的代码片段:
GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease];
request.minPlayers = 2;
request.maxPlayers = 2;
request.playersToInvite = [NSArray arrayWithObject:playerID];
request.inviteMessage = message;
request.inviteeResponseHandler = ^(NSString *playerID, GKInviteeResponse response)
{
if (response == GKInviteeResponseAccepted)
[[GKMatchmaker sharedMatchmaker] finishMatchmakingForMatch:self.match];
};
[[GKMatchmaker sharedMatchmaker] findMatchForRequest:request withCompletionHandler:^(GKMatch *match, NSError *error)
{
... [whatever]
}];下面是iOS5机器上的invite处理程序的代码片段:
[GKMatchmaker sharedMatchmaker].inviteHandler = ^(GKInvite *acceptedInvite, NSArray *playersToInvite)
{
if (acceptedInvite)
{
GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithInvite:acceptedInvite] autorelease];
mmvc.matchmakerDelegate = self;
[navController presentModalViewController:mmvc animated:YES];
});
else if (playersToInvite)
{
... [whatever]
}
}顺序如下:
findMatchForRequest请求。inviteHandler。GKMatchmakerViewController显示在iOS5机器上,包含invite详细信息,iOS6用户具有旋转的“连接”状态。finishMatchmakingForMatch请求。match: player: didChangeState:回调,将iOS5播放器显示为GKPlayerStateConnected,因此就iOS6机器而言,匹配过程已经完成,游戏可以开始。GKMatch对象在任何时间点,所以它不能开始游戏。因为如果我在iOS6机器上使用标准的游戏中心UI而不是可编程的邀请,那么一切都很好,这意味着标准UI必须做更多的事情来告诉另一台机器游戏必须开始。然而,我浏览了所有相关的游戏中心对象,并没有找到任何其他发送。
我应该再次提到,反向配置(使用标准UI启动invite的iOS5)在两台机器上都能正常工作。
有人帮忙吗?
发布于 2013-03-26 10:27:19
我也有类似的问题。我所做的部分解决的事情之一是为ios6用户使用编程,为ios5用户使用viewController。我认为您也是这样做的,但是您的inviteHandler代码似乎只有viewController代码。你能完全解决你的问题吗?
https://stackoverflow.com/questions/15279836
复制相似问题