我試圖在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的邀請)在兩臺機器上都能正常工作。
幫助,任何人?