GKMatch - В режиме реального времени - приглашение обработчика

Я пытаюсь создать многопользовательскую игру в реальном времени, используя игровой центр, программно. Моя проблема заключается в отсутствии документации, так как старый inviteHandler был объявлен устаревшим

Первое, что я делаю, это аутентификация:

- (void) authenticateLocalPlayer
{
    GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
    __weak GKLocalPlayer *blockLocalPlayer = localPlayer;
    localPlayer.authenticateHandler = ^(UIViewController *receivedViewController, NSError *error)
    {
        if (receivedViewController != nil)
        {
            [self presentViewController:receivedViewController animated:YES completion:nil];
        }
        else if (blockLocalPlayer.isAuthenticated)
        {
            [blockLocalPlayer registerListener:self];
        }
    };
}

После этого я начинаю процесс приглашения, как написано на Apple Docs.

- (void)invitePlayers:(NSArray *)friendsArray
{
    GKMatchRequest *request = [[GKMatchRequest alloc] init];
    request.minPlayers = 2;
    request.maxPlayers = 2;
    request.playersToInvite = friendsArray;
    request.inviteMessage = @"Your Custom Invitation Message Here";
    request.inviteeResponseHandler = ^(NSString *playerID, GKInviteeResponse response)
    {
        [self updateUIForPlayer: playerID accepted: (response == GKInviteeResponseAccepted)];
    };
}

Я реализовал следующие методы, но они никогда не называются:

- (void)player:(GKPlayer *)player didAcceptInvite:(GKInvite *)invite
- (void)player:(GKPlayer *)player didRequestMatchWithPlayers:(NSArray *)playerIDsToInvite

Как я могу позволить другому игроку получить приглашение и ответить на него? На Apple Docs демонстрируется старый устаревший способ.

1 ответ

Попробуйте сначала зарегистрироваться на GKLocalPlayer слушатель для того, чтобы получить вызов через эти методы:

- (void)registerListener:(id<GKLocalPlayerListener>)listener 

который должен соответствовать этому протоколу:GKLocalPlayerListener

Другие вопросы по тегам