GameKit Match - 邀请iOS 5和iOS 6之间的朋友

时间:2013-03-07 19:17:21

标签: xcode ios5 ios6 game-center gkmatchmaker

我试图在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]
}];

序列如下:

  • iOS6使用iOS5播放器ID发送[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] } } 请求。
  • 推送通知显示在iOS5机器上。
  • 应用程序在iOS5计算机上启动,并调用findMatchForRequest
  • iOS5计算机上显示inviteHandler,其中包含邀请详细信息,iOS6用户正在旋转"正在连接"状态。
  • 调用iOS6计算机上的GKMatchmakerViewController并发送inviteeResponseHandler请求。
  • iOS5 Game Center屏幕中iOS6用户的状态从旋转"正在连接"到" Ready",此时两个玩家都被标记为" Ready"。
  • iOS6机器获得finishMatchmakingForMatch回调,显示iOS5播放器为match: player: didChangeState:,因此就iOS6机器而言,匹配过程已完成且游戏可以开始。
  • 从现在开始,iOS5机器上什么都没发生。它坚持使用"等待[iOS6用户]启动游戏"直到它被超时取消。它在任何时候都不会收到任何GKPlayerStateConnected个对象,因此它无法启动游戏。

如果我使用iOS6机器上的标准Game Center UI而不是可编程的邀请,一切正常,这意味着标准用户界面必须做更多的事情来告诉另一台机器游戏必须启动。但是,我浏览了所有相关的Game Center对象,无法找到其他任何内容。

我应该再次提到反向配置(iOS5使用标准UI启动邀请)在两台机器上都能正常工作。

帮助,有人吗?

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题。我做部分解决的事情之一就是为ios6用户使用programmatic,为ios5用户使用viewController。我认为你也是这样做但你的inviteHandler代码似乎只有viewController代码。你能完全解决你的问题吗?