2013-04-28 1 views
4

iOS 6의 GameKit API에 대한 업데이트 덕분에 마침내 턴 시간 초과 및 더 나은 프로그래밍 방식의 성냥 생성을 통해 턴 기반 보드 게임을 구현할 수있게되었습니다. 그러나 나는 해결할 수없는 문제에 직면 해있다. 내 목표는 Game Center를 최종 사용자가 완전히 볼 수 없도록 실행하여 모든 것이 프로그래밍 방식이며 내 자신의 사용자 지정 인터페이스를 사용하는 것입니다. 따라서 기본 GKTurnBasedMatchmakerViewController가 아닌 일치하는 항목을 표시하기 위해 자체 사용자 정의 테이블보기를 사용합니다. 바로 지금, -loadMatchesWithCompletionHandler : 메소드를 사용하여 오픈 매치를 표시하는 데 아무런 문제가 없습니다. 나는 또한 자동 매치 (문제가 아님)를위한 직접 생성과 초대를 위해 localPlayer의 Game Center 친구들을로드하는 테이블 뷰를 사용하여 일치를 만드는 맞춤 화면을 사용합니다. playersToInvite 속성을 이제 playerID로 채울 수 있으므로 iOS 6에서 가능합니다.GKMatchRequest 초대장이 다른 기기에 표시되지 않습니다.

내 주요 문제는 수신자 측에서 초대를 처리하는 것입니다. 다음 코드로 초대장을 보냅니다.

-(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"); 

} 

을 인증? 또는 통지가 수신되지 않을 때 시작인가? 게임을 초대 알림을 보낼 수있는 또 다른 방법이 있습니까? Game Center의 샌드 박스 계정에서 초대장을받을 수 있으며 진행 상황을 알 수 없습니다.

+0

왜 iOS 7에서는 '.inviteHandler'를 사용하지 않을까요? 'GKInvite * acceptedInvite'를 다른 방법으로 얻는 방법? –

답변

0

맞춤 디스플레이를 사용하고 싶지만 대신 내 자신의보기 컨트롤러를 만들지 않았습니다. 나를 위해 '보내기'초대를 처리하는 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를) 처리가 있고 다음은

어쩌면 당신이 그것을 시도하고 (가능한 경우) GKMatchmakerViewController가 내부적으로 어떻게 작동하는지 확인할 수 있습니다, 그 내 코드입니다 사용자가 GameCenter로 인증하자 마자 실행되고, 앱이 실행될 때 가장 먼저하는 일 중 하나입니다. 말하자면이 코드가 올바르게 작동하는 것처럼 보입니다. 희망이 도움이됩니다!

+0

게임 센터 초대장이 요즘 작동하지 않습니다. 게임 센터 샌드 박스 서버에서 무슨 일이 벌어지고 있는지 알지 못합니다. 나는이 포럼 개발자 포럼에서 그것에 대해 읽었습니다. – Aitul

+0

이 글을보세요 http://stackoverflow.com/a/4641232/941490 –

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 
     } 
}]; 
관련 문제