Xcode GameKit匹配-邀请iOS5和iOS6之间的朋友
我正在尝试在两人实时游戏中实现游戏中心邀请。因为在模拟器中不支持邀请,所以我在一个运行iOS5的设备和另一个运行iOS6的设备上测试它(这是特意做的) 如果我在任何一台设备上使用老式的内置Xcode GameKit匹配-邀请iOS5和iOS6之间的朋友,xcode,ios5,ios6,game-center,gkmatchmaker,Xcode,Ios5,Ios6,Game Center,Gkmatchmaker,我正在尝试在两人实时游戏中实现游戏中心邀请。因为在模拟器中不支持邀请,所以我在一个运行iOS5的设备和另一个运行iOS6的设备上测试它(这是特意做的) 如果我在任何一台设备上使用老式的内置GKMatchmakerViewControllerUI来启动invite,那么无论是iOS5设备启动invite还是iOS6设备启动invite,它都可以正常工作 但是,在iOS6中,我希望使用自己的UI选择要邀请的播放器,因此我使用GKMatchRequest以编程方式发出邀请,设置playersToInv
GKMatchmakerViewController
UI来启动invite,那么无论是iOS5设备启动invite还是iOS6设备启动invite,它都可以正常工作
但是,在iOS6中,我希望使用自己的UI选择要邀请的播放器,因此我使用GKMatchRequest
以编程方式发出邀请,设置playersToInvite
属性
问题是,另一台(iOS5)设备收到推送通知,启动应用程序,运行[GKMatchmaker sharedMatchmaker].inviteHandler
,显示带有邀请详细信息的游戏中心UI,但即使iOS6设备发送finishMatchmakingForMatch
请求,iOS5设备也不会继续。iOS5机器上没有调用其他处理程序/委托,也没有返回GKMatch
对象,它继续显示Game Center 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]
}
}
顺序如下:
- iOS6发送一个带有iOS5播放器id的
请求findMatchForRequest
- 推送通知显示在iOS5计算机上
- 应用程序在iOS5机器上启动,并调用
inviteHandler
显示在iOS5机器上,其中包含invite详细信息,iOS6用户具有旋转的“连接”状态GKMatchmakerViewController
- 调用iOS6计算机上的
,并发送invitereResponseHandler
请求finishMatchmakingForMatch
- iOS5游戏中心屏幕上iOS6用户的状态从旋转的“连接”变为“准备就绪”,此时两名玩家都被标记为“准备就绪”
- iOS6机器获得一个
回调,将iOS5玩家显示为match:player:didChangeState:
,因此就iOS6机器而言,匹配过程已经完成,游戏可以开始GKPlayerStateConnected
- 从现在起,iOS5机器上不会发生任何事情。它一直处于“等待[iOS6用户]开始游戏”状态,直到超时取消。它在任何时候都不会收到任何
对象,因此无法启动游戏GKMatch
有人来帮忙吗?我也有类似的问题。我所做的一件部分解决的事情是为ios6用户使用编程,为ios5用户使用viewController。我认为您也在这样做,但您的inviteHandler代码似乎只有viewController代码。你能完全解决你的问题吗