我试图在2人实时游戏中实施游戏中心邀请。由于模拟器不支持邀请,因此我在一台运行iOS5的设备上测试此设置,第二台设备运行iOS6(这是故意的)。
如果我在任一设备上使用老式的内置GKMatchmakerViewController
用户界面来启动邀请,那么它可以正常工作 - 当iOS5设备启动邀请时以及iOS6时设备启动它。
但是,在iOS6中,我想使用自己的用户界面选择要邀请的播放器,因此我使用GKMatchRequest
以编程方式发出邀请,设置playersToInvite
属性。
问题是,其他(iOS5)设备获取推送通知,启动应用程序,运行[GKMatchmaker sharedMatchmaker].inviteHandler
,显示带有邀请详细信息的Game Center UI,但即使iOS6设备发送{{ 1}}请求 - iOS5设备不再继续。在iOS5机器上没有调用其他处理程序/委托,没有返回finishMatchmakingForMatch
对象,并且它继续显示游戏中心UI,其中两个玩家都被标记为" Ready"并有一条消息说"等待[iOS6播放器]开始游戏"。此UI上的唯一按钮是“取消”按钮。
这是在iOS6计算机上发送邀请的代码段:
GKMatch
这是iOS5机器上邀请处理程序的代码片段:
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]
}];
序列如下:
[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
,其中包含邀请详细信息,iOS6用户正在旋转"正在连接"状态。GKMatchmakerViewController
并发送inviteeResponseHandler
请求。finishMatchmakingForMatch
回调,显示iOS5播放器为match: player: didChangeState:
,因此就iOS6机器而言,匹配过程已完成且游戏可以开始。GKPlayerStateConnected
个对象,因此它无法启动游戏。如果我使用iOS6机器上的标准Game Center UI而不是可编程的邀请,一切正常,这意味着标准用户界面必须做更多的事情来告诉另一台机器游戏必须启动。但是,我浏览了所有相关的Game Center对象,无法找到其他任何内容。
我应该再次提到反向配置(iOS5使用标准UI启动邀请)在两台机器上都能正常工作。
帮助,有人吗?
答案 0 :(得分:0)
我遇到了类似的问题。我做部分解决的事情之一就是为ios6用户使用programmatic,为ios5用户使用viewController。我认为你也是这样做但你的inviteHandler代码似乎只有viewController代码。你能完全解决你的问题吗?