2013-03-07 54 views
2

我試圖在2人即時遊戲中實現Game Center邀請。由於模擬器不支持邀請,因此我正在一臺運行iOS5的設備上測試此功能,另一臺運行iOS6(這是有意完成的)。GameKit Match - 邀請iOS5和iOS6之間的朋友

如果我在任一設備上使用舊式內置GKMatchmakerViewController用戶界面來發起邀請,它可以兩種方式正常工作 - 當iOS5設備啓動邀請時以及iOS6設備啓動邀請時。

但是,在iOS6中,我想使用自己的用戶界面來選擇要邀請的玩家,所以我使用GKMatchRequest以編程方式發出邀請,設置playersToInvite屬性。

問題是,另一個(iOS5)設備獲取推送通知,啓動應用程序,運行[GKMatchmaker sharedMatchmaker].inviteHandler,向Game Center UI顯示邀請詳細信息,但即使iOS6設備發送finishMatchmakingForMatch請求 - iOS5設備不會繼續進行。在iOS5機器上沒有其他處理程序/代理被調用,沒有GKMatch對象返回,並且它繼續顯示Game Center用戶界面,這兩個玩家都標記爲「就緒」,並顯示一條消息「等待[iOS6 player]啓動遊戲」。此UI上唯一的按鈕是取消按鈕。

下面的代碼片段,發送iOS6的機器上的邀請:

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機器上的inviteeResponseHandler併發送finishMatchmakingForMatch請求。
  • iOS5用戶在iOS5 Game Center屏幕中的狀態從旋轉「正在連接」變爲「就緒」,此時兩個玩家都被標記爲「就緒」。
  • iOS6機器獲得match: player: didChangeState:回調,顯示iOS5播放器爲GKPlayerStateConnected,因此就iOS6機器而言,匹配過程結束並且遊戲可以開始。
  • 從現在起在iOS5機器上沒有任何事情發生。它停留在「等待[iOS6用戶]開始遊戲」,直到它被超時取消。它在任何時候都不會收到任何GKMatch對象,所以無法啓動遊戲。

因爲事情正常工作,如果我用的是標準的遊戲中心的用戶界面在iOS6的機器上,而不是一個可編程的邀請,這意味着標準的UI必須做更多的事情告訴其他機器的遊戲開始。但是,我瀏覽了所有相關的Game Center對象,並找不到其他任何內容發送。

我應該再次提到,反向配置(iOS5啓動使用標準UI的邀請)在兩臺機器上都能正常工作。

幫助,任何人?

回答

0

我有類似的問題。我所做的部分解決之一是爲ios6用戶使用programmatic,爲ios5用戶使用viewController。我想你也是這樣做的,但你的inviteHandler代碼似乎只有viewController代碼。你能完全解決你的問題嗎?