4

感谢 iOS 6 中 GameKit API 的更新,我终于能够以应有的方式实现我的回合制棋盘游戏,包括回合超时和更好的程序化比赛创建。但是,我遇到了一个似乎无法解决的问题。我的愿望是让最终用户完全看不到 Game Center 的运行,这样一切都可以编程并使用我自己的自定义界面。因此,我使用自己的自定义表格视图来显示匹配项,而不是默认的 GKTurnBasedMatchmakerViewController。现在,使用 -loadMatchesWithCompletionHandler: 方法显示打开的比赛没有问题。我还使用自定义屏幕来创建匹配,直接创建自动匹配(不是问题)和加载 localPlayer 的 Game Center 好友以进行邀请的表格视图。

我的主要问题是处理接收方的邀请。我使用以下代码发送邀请

-(void)invitarAmigoMio:(NSArray*)losAmigos
{

    GKMatchRequest *request = [[GKMatchRequest alloc] init];
    request.minPlayers = 2;
    request.maxPlayers = 2;
    request.defaultNumberOfPlayers=2;
    request.playersToInvite = losAmigos;
    request.inviteMessage = @"Your Custom Invitation Message Here";



    request.inviteeResponseHandler = ^(NSString *playerID, GKInviteeResponse
                                       response)
    {

        if (response==GKInviteeResponseAccepted)
        {
            NSLog(@"INVITACION ACEPTADA");
        }
        else
        {
            NSLog(@"INVITACION RECHAZADA");

        }
    };

}

我有一个处理通知的代表。以下代码在用户通过身份验证时启动

-(void)registroNotificaciones
{
    NSLog(@"registroNotificaciones");

    [GKMatchmaker sharedMatchmaker].inviteHandler = ^(GKInvite* acceptedInvite, NSArray *playersToInvite)
    {
        if(acceptedInvite != nil)
        {
            // Get a match for the invite we obtained...
            [[GKMatchmaker sharedMatchmaker] matchForInvite:acceptedInvite completionHandler:^(GKMatch *match, NSError *error)
             {
                 if(match != nil)
                 {
                     NSLog(@"match != nil: ");

                 }
                 else if(error != nil)
                 {
                     NSLog(@"ERROR: From matchForInvite: %@", [error description]);
                 }
                 else
                 {
                     NSLog(@"ERROR: Unexpected return from matchForInvite...");
                 }
             }];
        }
    };
    NSLog(@"FIN registroNotificaciones");

}

为什么没有发送通知?或者没有收到通知?还有其他发送通知邀请玩游戏的方法吗?我查了一下,我的游戏中心沙盒帐户允许邀请,我不知道发生了什么

4

2 回答 2

3

您几乎完成了创建邀请所需的所有工作;您只需要使用以下代码发送它:

[[GKMatchmaker sharedMatchmaker] findMatchForRequest:request withCompletionHandler:^(GKMatch* match, NSError *error) {
        if (error)
        {
           //Invite has not been sent
        }
        else if (match != nil)
        {
          //whatever you want to do when the receiver accepts the invite
        }
}];
于 2013-11-18T20:55:08.887 回答
0

我知道您正在寻找使用自定义显示,但我没有为此制作自己的视图控制器,而是使用 GKMatchmakerViewController 为我处理“发送”邀请,我认为这就是您的代码中缺少的内容。

这是我的代码,也许您可​​以尝试一下并检查 GKMatchmakerViewController 如何在内部工作(如果可能):

GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease]; 
request.minPlayers = minPlayers;     
request.maxPlayers = maxPlayers;
request.playersToInvite = pendingPlayersToInvite;
GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithMatchRequest:request] autorelease];
mmvc.matchmakerDelegate = self;
[myPresentingViewController presentModalViewController:mmvc animated:YES];

我有几乎相同的代码来处理通知(registroNotificaciones),它会在用户通过 GameCenter 进行身份验证后立即执行,这也是应用程序在启动时首先要做的事情之一,从你所说的来看,它看起来像这样代码工作正常,只是 . 希望能帮助到你!

于 2013-04-30T19:51:03.350 回答