2 인 실시간 게임으로 Game Center 초대를 구현하려고합니다. 초대장은 시뮬레이터에서 지원되지 않으므로 iOS5를 실행하는 하나의 기기와 iOS6을 실행하는 두 번째 기기에서이를 테스트하고 있습니다 (이는 의도 한대로 수행되었습니다).GameKit 경기 - iOS5와 iOS6 사이에 친구 초대
어느 기기에서든지 기존의 GKMatchmakerViewController
UI를 사용하여 초대를 시작하면 iOS5 기기가 초대를 시작할 때뿐만 아니라 iOS6 기기가 초기화 할 때도 두 가지 방법으로 잘 작동합니다.
그러나 iOS6에서는 초대 할 플레이어를 직접 선택하기 위해 GKMatchRequest
을 사용하여 프로그래밍 방식으로 초대를 실행하고 playersToInvite
속성을 설정합니다.
문제는 다른 (iOS5를) 장치가 초대 세부 게임 센터 UI를 보여주고 있지만, iOS6의 장치가 finishMatchmakingForMatch
요청을 보낼 경우에도 [GKMatchmaker sharedMatchmaker].inviteHandler
실행, 푸시 알림을 얻는 응용 프로그램을 시작,합니다 - iOS5를 장치가 더 이상 진행되지 않습니다. iOS5 컴퓨터에서 다른 핸들러/델리게이트가 호출되지 않으며 GKMatch
객체가 반환되지 않으며 "준비 완료"표시가있는 게임 플레이어 UI와 "[iOS6 플레이어 대기 중]이 시작될 때까지 계속 기다리고 있습니다."라는 메시지가 계속해서 나타납니다. 경기". 이 UI의 유일한 버튼은 취소 버튼입니다. 여기
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를 기계에 초대 처리기에 대한 코드입니다 :
다음과[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 컴퓨터에 표시되며 iOS6 사용자는 회전 중 "연결 중"상태입니다.- iOS6 시스템에있는 이 호출되어
finishMatchmakingForMatch
요청을 보냅니다. - iOS5 게임 센터 화면의 iOS6 사용자 상태가 "연결 중"에서 "준비 중"으로 변경되며이 시점에서 두 플레이어는 모두 "준비 됨"으로 표시됩니다.
- iOS6 컴퓨터는
match: player: didChangeState:
콜백을 받고 iOS5 플레이어가GKPlayerStateConnected
으로 표시되므로 iOS6 컴퓨터가 관련 프로세스가 완료되고 게임을 시작할 수있는 한 관련이 있습니다. - iOS5 시스템에서 아무 것도 일어나지 않습니다. 타임 아웃으로 취소 될 때까지 "[iOS6 사용자가 게임을 시작하기를 기다리는 중"으로] 붙어 있습니다. 언제든지
GKMatch
개체를받지 못하기 때문에 게임을 시작할 수 없습니다.
프로그래밍 가능한 초대장이 아닌 iOS6 컴퓨터에서 표준 게임 센터 UI를 사용하면 정상적으로 작동하므로 게임을 시작해야한다는 것을 다른 컴퓨터에 알리기 위해 표준 UI가 더 많은 작업을 수행해야합니다. 그러나 관련 게임 센터 개체를 모두 탐색하여 보낼 항목을 찾을 수 없었습니다.
역 구성 (표준 UI를 사용하여 초대를 시작하는 iOS5)이 두 시스템에서 모두 잘 작동한다는 점을 다시 언급해야합니다.
도움, 누구?