Программное приглашение друга из Game Center на матч

Позволяет ли GameKit пригласить определенного друга из Game Center на матч программно, то есть без представления GC ViewController? Следующая документация handleInviteFromGameCenter, кажется, подразумевает, что вы можете заполнить GKMatchRequest.playersToInvite и использовать его с [GKTurnBasedMatch findMatchForRequest]:

Когда ваш делегат получит это сообщение, ваше приложение должно создать новый объект GKMatchRequestIn и назначить playerTo свойство playerToInvite запроса на совпадение. Затем ваше приложение может либо вызвать метод класса 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 по пошаговой сборке мусора упоминание чего-то вроде: «Если вы хотите пригласить друга сборщика мусора, мы просим вас пройти через контроллер представления сборщика мусора.

Любое понимание приветствуется. Еще раз спасибо .

8
задан Community 23 May 2017 в 12:31
поделиться