Приглашение друга Game Center программно - PullRequest
8 голосов
/ 10 декабря 2011

Позволяет ли 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.

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

1 Ответ

7 голосов
/ 17 февраля 2012

Хотел поделиться тем, что я узнал по этому поводу: Начиная с iOS 5, нет способа пригласить друга из игрового центра сыграть в игру, не пройдя предварительно заданный поток GKTurnBasedMatchmakerViewController, который оптимизирован для начала матча в реальном времени. время, проводя пользователя через три разных экрана.

После того, как меня поддержала поддержка Apple Dev, я отправил запрос на добавление функции, чтобы иметь возможность вызвать простой одностраничный контроллер просмотра, который позволил бы пользователю отправлять сообщение с приглашением / "рекомендовать игру" через игру. центр.

ОБНОВЛЕНИЕ ДЛЯ iOS 6: Рад сообщить, что, похоже, это было решено в iOS 6. Мой оригинальный программный пример (не для пользовательского интерфейса), приведенный выше, теперь работает, как и ожидалось.

...