Позволяет ли GameKit пригласить конкретного друга Game Center на матч программным способом, то есть без представления GC ViewController? Следующая документация handleInviteFromGameCenter предполагает, что вы можете заполнить GKMatchRequest.playersToInvite и использовать его с [GKTurnBasedMatch findMatchForRequest]:
Когда ваш делегат получает это сообщение, ваше приложение должно создать новый объект GKMatchRequest и назначить параметр PlayersToInvite для свойства PlayersToInvite запроса на совпадение. Затем ваше приложение может либо вызвать метод класса GKTurnBasedMatch findMatchForRequest: withCompletionHandler: чтобы найти совпадение программно , либо оно может использовать запрос для создания нового GKTurnBasedMatchmakerViewController, чтобы показать пользовательский интерфейс для игрока.
Но я обнаружил, что когда findMatchForRequest вызывает мой блок завершения с заполненным совпадением, идентификатор GameCenter, который я ему передал, не назначается вторым игроком. Вместо этого он пуст и статус «совпадает». И поэтому, когда я вызываю endTurnWithNextParticipant, это успешно, но приглашение не получено на моем втором устройстве. Это иллюстрирует то, что я делаю:
GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease];
request.minPlayers = 2;
request.maxPlayers = 2;
request.playersToInvite = [NSArray arrayWithObjects: otherPlayerGCID,nil ];
[GKTurnBasedMatch findMatchForRequest:request
withCompletionHandler:^(GKTurnBasedMatch *match, NSError *error)
{
if (error)
NSLog(@"returned from fimdmatch but with error");
else if (match != nil) {
NSLog(@"match returned success and match populated");
NSArray* otherPlayers = [match participants];
if (otherPlayers.count>1) {
NSData* placeholder = [@"no data" dataUsingEncoding:NSUTF8StringEncoding];
[match endTurnWithNextParticipant:[otherPlayers objectAtIndex:1]
matchData:placeholder
completionHandler:^(NSError *error)
{
if (error)
NSLog(@"returned from END TURN but with error");
else
NSLog(@"returned from END TURN successfully");
}];
}
}
else
System::log("match returned success but match NOT populated");
}];
И, как у человека, который, похоже, сталкивается с подобной проблемой здесь Game Center приглашает друзей программно , если я вставлю вызов в контроллер представления, в моем случае, GKTurnBasedMatchmakerViewController, все работает.
Спасибо.
ОБНОВЛЕНИЕ:
Я видел в презентации Apple Developer о пошаговом GC упоминание чего-то вроде: «Если вы хотите пригласить друга GC, мы просим вас пройти через контроллер представления GC.
Любое понимание приветствуется. Еще раз спасибо.