Проблемы с игровым центром в iOS 10

Я реализовал функции Game Center, такие как достижения и списки лидеров, и теперь я работаю над проблемами. У меня создалось впечатление, что мне не нужно было добавлять дополнительный код - если бы у меня были достижения или рейтинги, игроки могли бы отправлять вызовы своим друзьям. Но теперь, в iOS10, у вас больше нет возможности добавлять игроков в качестве друзей - проблемы решаются через iMessages. Проблема в том, что я не вижу эту функцию в любом месте экрана GKViewController. Если вы выберете оценку достижения /leaaderboard, вы можете нажать "Challenge Friends", но она предлагает только тех игроков, которые у вас уже есть в списке друзей, а не в вашем списке контактов. Apple также отказалась от GKChallengesViewController, поэтому я не уверен, где искать, как это сделать.

Кто-нибудь знает, как добавить функцию iMessage Challenges в Game Center в iOS 10?

Обновление: я видел, что эта функция живет в GKMatchmakerViewController, но это похоже на многопользовательские вещи. Я все еще не уверен, как использовать это, чтобы просто отправлять вызовы.

Ответы

Ответ 1

Из Apple Docs:

Выдача вызова не отображает пользовательский интерфейс для игрока, выдавшего вызов; это код, который вам нужно реализовать.

Есть также несколько примеров того, как создавать проблемы и как найти игроков, которых вы можете пригласить, например:

- (void) challengePlayersToCompleteAchievement: (GKAchievement*) achievement
{
    [achievement selectChallengeablePlayers:[GKLocalPlayer localPlayer].friends withCompletionHandler:^(NSArray *challengeablePlayerI, NSError *error) {
        if (challengeablePlayers)
        {
            [self presentChallengeWithPreselectedPlayers: challengeablePlayers];
        }
    }];
}

... или:

- (void) challengeLesserMortalsForScore: (int64_t) playerScore inLeaderboard: (NSString*) leaderboard
{
    GKLeaderboard *query = [[GKLeaderboard alloc] init];
    query.leaderboardIdentifier = leaderboard;
    query.playerScope = GKLeaderboardPlayerScopeFriendsOnly;
    query.range = NSMakeRange(1,100);
    [query loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) {
        NSPredicate *filter = [NSPredicate predicateWithFormat:@"value < %qi",playerScore];
        NSArray *lesserScores = [scores filteredArrayUsingPredicate:filter];
        [self presentChallengeWithPreselectedScores: lesserScores];
    }];
}

По внешнему виду вы по-прежнему можете приглашать игроков, которые уже являются частью игрового центра, то есть никаких произвольных "контактов" из списка контактов (что имеет смысл), но это только предположение.