首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GameKit匹配-邀请iOS5和iOS6之间的朋友

GameKit匹配-邀请iOS5和iOS6之间的朋友
EN

Stack Overflow用户
提问于 2013-03-07 19:17:20
回答 1查看 545关注 0票数 2

我正在尝试实现游戏中心邀请在一个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机器上发送邀请的代码片段:

代码语言:javascript
复制
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处理程序的代码片段:

代码语言:javascript
复制
[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
  • GKMatchmakerViewController显示在iOS5机器上,包含invite详细信息,iOS6用户具有旋转的“连接”状态。
  • 调用iOS6机器上的iOS6并发送finishMatchmakingForMatch请求。
  • iOS6用户在iOS5游戏中心屏幕上的状态从旋转“连接”变为“就绪”,此时两个玩家都被标记为“就绪”。
  • iOS6机器将得到一个match: player: didChangeState:回调,将iOS5播放器显示为GKPlayerStateConnected,因此就iOS6机器而言,匹配过程已经完成,游戏可以开始。
  • 从现在起,在iOS5机器上任何事情都不会发生。它被困在“等待iOS6用户开始游戏”,直到它被一个超时取消。它从来没有收到任何GKMatch对象在任何时间点,所以它不能开始游戏。

因为如果我在iOS6机器上使用标准的游戏中心UI而不是可编程的邀请,那么一切都很好,这意味着标准UI必须做更多的事情来告诉另一台机器游戏必须开始。然而,我浏览了所有相关的游戏中心对象,并没有找到任何其他发送。

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

有人帮忙吗?

EN

回答 1

Stack Overflow用户

发布于 2013-03-26 10:27:19

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15279836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档