Работа с проигрывателями в игровом центре

Проигрыватели являются критической частью в любой игре, поддерживающей Игровой Центр, потому что все функции Game Center связаны с проигрывателями. Как разработчик игр, необходимо понять часть инфраструктуры, что Игровое использование Центра для поддержки учетных записей проигрывателя и как Вы реализуете ее в своем приложении. После чтения этой главы Вы поймете, как управлять информацией о проигрывателе в Вашей игре. В частности Вы будете учиться:

Игровой центр управляет учетными записями проигрывателя

Для использования в своих интересах Игровых функций Центра пользователь создает Игровую учетную запись Центра, идентифицирующую для идентификации себя как определенный пользователь. Тот пользователь известен как проигрыватель на Игровом Центре. Служба Game Center отслеживает критические сведения об аккаунте для того проигрывателя, такой как, кто тот проигрыватель, какие игры, в которые играл проигрыватель, что проигрыватель выполнил в каждой игре, и кто друзья того проигрывателя. Часть этой информации непосредственно доступна Вашей игре; обычно это - информация, в частности связанная с игрой и общей информацией о проигрывателе.

Когда проигрыватель хочет получить доступ к Игровому Центру на определенном устройстве, проигрыватель регистрируется или аутентифицирует на том устройстве. Проигрыватель аутентифицирует их учетную запись путем запуска Игрового приложения Центра или путем запуска любой игры, реализующей Игровую поддержку Центра. В любом случае проигрывателю дарят интерфейс для обеспечения их названия счета и пароля. После того, как аутентифицируемый, проигрыватель постоянно связывается с тем устройством, пока они явно не подписываются из Игрового Центра в Игровом приложении Центра. Только одному проигрывателю позволяют аутентифицироваться на устройстве за один раз; для нового проигрывателя, который будет аутентифицироваться на устройстве, существующий аутентифицируемый проигрыватель должен выписаться сначала.

Центр Гэйма предназначается, чтобы быть социальным опытом. Центр Гэйма позволяет проигрывателю приглашать другие проигрыватели быть друзьями. Когда два проигрывателя являются друзьями, они видят состояние друг друга в приложении Центра Гэйма, сравнивают очки и приглашают друг друга в соответствия более легко. Через Гэйма Кита Ваша игра может также получить доступ к некоторой информации о друзьях местного игрока или позволить проигрывателю приглашать проигрыватели становиться друзьями. Например, можно использовать эту функциональность, чтобы позволить проигрывателю отправлять другу приглашение на проигрыватель, который они просто встретили в матче, сыгранном в игре.

Строки идентификатора проигрывателя однозначно определяют проигрыватели

Каждая учетная запись проигрывателя однозначно определяется строкой идентификатора проигрывателя. Строка идентификатора создается, когда учетная запись проигрывателя сначала создается и никогда не изменяется, даже если изменяется другая информация в учетной записи. Таким образом идентификаторы проигрывателя являются единственным надежным способом отследить определенный проигрыватель. Поэтому Игровой API Набора использует идентификаторы проигрывателя везде, где должен быть идентифицирован определенный проигрыватель. Если Игровой Центр должен идентифицировать определенный проигрыватель в Вашей игре, Игровой Набор возвраты API что идентификатор проигрывателя. Ваша игра использует идентификатор проигрывателя для получения информации от Игрового Центра о том проигрывателе.

В дополнение к использованию идентификаторов проигрывателя в Ваших взаимодействиях с Игровым Центром Ваша игра должна также использовать идентификатор проигрывателя каждый раз, когда это хочет хранить данные локально об определенном проигрывателе. Например, если Ваша игра хранит данные для отслеживания прогресса проигрывателя (такой, поскольку на устройстве, на собственном сервере, или на iCloud), используйте идентификаторы проигрывателя для различения многократные проигрыватели, играющие на том же устройстве. Тот путь, если различный проигрыватель подписывается в устройство, можно сразу персонализировать опыт путем показа содержания, определенного для того проигрывателя.

Местный игрок является проигрывателем, регистрировался к устройству

При разработке игры Вы найдете, что Ваша игра часто знает о многократных проигрывателях одновременно. Например, при разработке игры с помощью многопользовательских сетей тогда у Вас есть информация — и идентификатор проигрывателя — для каждого проигрывателя в соответствии. Однако на любом определенном устройстве, один проигрыватель всегда имеет приоритет по другим проигрывателям. Местный игрок является проигрывателем, в настоящее время аутентифицирующимся для игры на том устройстве. На рисунке 3-1 два плеера подключаются в сетевом соответствии. На левом устройстве Боб является местным игроком, и Мэри является удаленным проигрывателем. На правильном устройстве Мэри является местным игроком, и Боб является удаленным проигрывателем.

Рисунок 3-1  Локальные и удаленные проигрыватели

Почти все классы в Гэйме Ките, отправляющие данные в или получающие информацию от Центра Гэйма, ожидают, что устройство будет иметь аутентифицируемого местного игрока. Работа, которую выполняют те классы, всегда от имени местного игрока. Например, если Ваша игра сообщает об очках списку лидеров, она может только сообщить о счете, заработанном местным игроком. Также, перед использованием любых функций Game Center Ваша игра должна сначала аутентифицировать это на устройстве существует местный игрок. Гэйм Кит возвращает ошибку Вашей игре, если она пытается выполнить задачи Гэйма Сентер-релэтеда, требующие аутентифицируемого проигрывателя, когда каждый не доступен на устройстве.

Объекты проигрывателя предоставляют подробную информацию о проигрывателях

Когда для Вашей игры нужны подробные данные для определенного проигрывателя, она получает те подробные данные путем создания запроса к Игровому Центру использованием идентификатора проигрывателя проигрывателя. Игровой Набор возвращает те подробные данные Вашей игре в a GKPlayer объект. Таблица 3-1 перечисляет некоторые более интересные свойства на объекте проигрывателя.

Табличные 3-1  свойства объектов важного игрока

Свойство

Описание

playerID

Строка, содержащая строку идентификатора проигрывателя, раньше получала эту информацию о проигрывателе.

displayName

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

isFriend

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

GKLocalPlayer класс является специальным подклассом GKPlayer класс, и включает дополнительные свойства, определенные для местного игрока:

  • friends свойство заполняется со строками идентификатора для других проигрывателей на Игровом Центре, отмеченных как друзья местного игрока.

  • underage свойство утверждает, является ли этот проигрыватель несовершеннолетним.

Табличные 3-2  свойства объектов местного игрока

Свойство

Описание

друзья

Массив идентификаторов проигрывателя для проигрывателей, кто друзья местного игрока. Это свойство заполняется только после того, как Ваша игра в частности запрашивает список идентификаторов для друзей местного игрока от Игрового Центра.

несовершеннолетний

Булево значение, утверждающее, является ли местный игрок несовершеннолетним. Когда значение этого свойства, отключены некоторые опции Game Center YES; Игровой Центр возвращает a GKErrorUnderage ошибка, при попытке использовать те функции. Ваша игра может также использовать это свойство, чтобы решить, должно ли это отключить некоторые свои собственные опции несовершеннолетнего проигрывателя.

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

Общие задачи при работе с проигрывателями

Аутентификация местного игрока на устройстве

Ваша игра должна начать аутентифицировать проигрыватель как можно раньше после запуска, даже перед представлением пользовательского интерфейса. Аутентификация является асинхронным процессом и не замедлит загрузку Вашего экрана заголовка. При ожидании, пока экран заголовка не представлен прежде, чем аутентифицировать пользователя, только увеличивает задержку, пока проигрыватель не может играть игру. Главная причина необходимо аутентифицировать проигрыватель как можно раньше, состоит в том так, чтобы iOS мог запустить игру в частности для обработки событий, которыми интересуется проигрыватель. Например, если Ваша игра поддерживает основанные на повороте соответствия, она могла бы быть запущена, потому что проигрыватель уже коснулся баннера уведомления. Таким образом необходимо аутентифицировать рано так, чтобы игра могла получить и обработать событие Game Center.

Когда Ваша игра аутентифицирует проигрыватель, Гэйм Кит сначала проверяет, чтобы видеть, существует ли уже аутентифицируемый проигрыватель на устройстве. Поскольку проигрыватель остается аутентифицируемым, пока они явно не подписываются из Центра Гэйма, довольно распространено, что аутентифицируемый проигрыватель уже находится на устройстве. В этой ситуации баннер, как кратко показывается, позволяет проигрывателю знать, что сразу уведомляется аутентификация, за которой следуют, и затем Ваша игра.

Если в настоящее время нет аутентифицируемого проигрывателя на устройстве, то диалог аутентификации должен быть выведен на экран так, чтобы проигрыватель мог регистрироваться с существующей учетной записью или создать новую Игровую учетную запись Центра. Это важно, потому что это означает, что поддержка аутентификации также означает прозрачно поддерживать создание учетной записи.

Фактический процесс отображения пользовательского интерфейса к проигрывателю зависит, на котором механизме Вы используете для аутентификации. Существует два способа, которыми можно аутентифицировать проигрыватель. Исходный механизм, сначала используемый в iOS 4.1 автоматически, выводит на экран пользовательский интерфейс к проигрывателю при необходимости, но это может произойти в необычное время во время последовательности запуска Вашей игры. Более новый механизм, сначала реализованный в iOS 6 и OS X v10.8.2, вручает Вашей игре контроллер представления для отображения во время выбора. Как правило, это означает, что Ваша игра может чисто приостановить свои собственные анимации и другие функции прежде, чем вывести на экран контроллер представления. Более новый механизм позволяет Вам создавать лучший пользовательский опыт для проигрывателя, и таким образом является предпочтительным способом реализовать аутентификацию.

Аутентифицируя Местного игрока (iOS 6, OS X v10.8.2)

Перечисление 3-1 показывает, как установить обработчик аутентификации. Метод получает совместно используемый экземпляр GKLocalPlayer класс и затем устанавливает тот объект authenticateHandler свойство для указания на блок возражает что события аутентификации дескрипторов. Как только Вы устанавливаете обработчик аутентификации, Гэйм Кит автоматически аутентифицирует проигрыватель асинхронно, вызывая Ваш обработчик аутентификации по мере необходимости для завершения процесса. Каждый раз Ваши игровые перемещения от фона до переднего плана, Гэйм Кит автоматически аутентифицирует местного игрока снова.

Перечисление 3-1  , Устанавливающее обработчик аутентификации

- (void) authenticateLocalPlayer
{
    GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
    localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){
         if (viewController != nil)
         {
             //showAuthenticationDialogWhenReasonable: is an example method name. Create your own method that displays an authentication view when appropriate for your app.
             [self showAuthenticationDialogWhenReasonable: viewController];
         }
         else if (localPlayer.isAuthenticated)
         {
             //authenticatedPlayer: is an example method name. Create your own method that is called after the loacal player is authenticated.
             [self authenticatedPlayer: localPlayer];
         }
         else
         {
             [self disableGameCenter];
         }
     };
}

Обработчик аутентификации показывает отличные условия, которые должен обработать Ваш код:

  • Если устройство не имеет аутентифицируемого проигрывателя, Гэйм Кит передает контроллер представления Вашему обработчику аутентификации. Когда представлено Вашей игрой, этот контроллер представления выводит на экран пользовательский интерфейс аутентификации. Вскоре после Ваша игра должна приостановить другие действия, требующие взаимодействия с пользователем и представляющие этот контроллер представления. Гэйм Кит отклоняет этот контроллер представления автоматически, когда завершенный и вызывает Ваш обработчик аутентификации снова.

  • Если процесс аутентификации успешно выполнился, viewController параметр, переданный в Ваш обработчик аутентификации, содержит nil. Объект местного игрока authenticated свойство содержит YES и его другие свойства установлены соответствовать те из подключенного плеера. Ваша игра должна завершить процесс аутентификации.

  • Если процесс аутентификации перестал работать, viewController параметр, переданный в Ваш обработчик аутентификации, содержит nil. Объект местного игрока authenticated свойство содержит NO и его другие свойства очищены. Ваша игра должна отключить все опции Game Center.

Всегда проверяйте authenticated свойство на местном игроке возражает, чтобы определить, смог ли Гэйм Кит аутентифицировать местного игрока. Не полагайтесь на ошибку, полученную Вашей игрой, чтобы определить, доступен ли аутентифицируемый проигрыватель на устройстве. Даже когда ошибка возвращается к Вашей игре, у Гэйма Кита может быть достаточная кэшируемая информация для обеспечения аутентифицируемого проигрывателя для игры. Кроме того, не необходимо для Вашей игры вывести на экран ошибки к проигрывателю, когда аутентификация перестала работать; Гэйм Кит уже выводит на экран важные ошибки к проигрывателю от Вашего имени. Большинство ошибок аутентификации возвращается к Вашей игре прежде всего для помощи Вам с отладкой.

Аутентифицируя Местного игрока (iOS 5, OS X v10.8)

Перечисление 3-2 показывает реализацию метода, аутентифицирующего местного игрока. Метод получает совместно используемый экземпляр GKLocalPlayer класс и вызовы, что объект authenticateWithCompletionHandler: метод. Аутентификация местного игрока происходит асинхронно; Ваша игра продолжает запускаться после инициирования аутентификации проигрывателя. Если необходимо, этот вызов метода выводит на экран пользовательский интерфейс аутентификации по Вашей игре. Когда аутентификация завершается, Гэйм Кит вызывает блочный объект, предоставленный Вашей игрой.

Если Ваша игра поддерживает многозадачность, Гэйм Кит сохраняет ссылку на этот обработчик завершения, пока Ваше приложение не завершается, и это не может быть изменено. Это означает, что любые объекты, на которые ссылаются в блоке, также сохранены в памяти неопределенно. Каждый раз Ваши игровые перемещения от фона до переднего плана, Гэйм Кит автоматически аутентифицирует местного игрока снова и вызывает Ваш обработчик завершения для предоставления обновленной информации о состоянии аутентифицируемого проигрывателя.

Перечисление 3-2  , Аутентифицирующее местного игрока

- (void) authenticateLocalPlayer
{
    GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
    [localPlayer authenticateWithCompletionHandler:^(NSError *error) {
         if (localPlayer.isAuthenticated)
         {
             // Player was successfully authenticated.
             // Perform additional tasks for the authenticated player.
         }
     }];
}

Ваша игра должна всегда проверять authenticated свойство на местном игроке возражает, чтобы определить, смог ли Гэйм Кит аутентифицировать проигрыватель. Не полагайтесь на ошибку, полученную Вашей игрой, чтобы определить, доступен ли аутентифицируемый проигрыватель на устройстве. Даже когда ошибка возвращается к Вашей игре, у Гэйма Кита может быть достаточная кэшируемая информация для обеспечения аутентифицируемого проигрывателя для игры. Кроме того, не необходимо для Вашей игры вывести на экран ошибки к проигрывателю, когда аутентификация перестала работать; Гэйм Кит уже выводит на экран важные ошибки к проигрывателю от Вашего имени. Большинство ошибок аутентификации возвращается к Вашей игре прежде всего для помощи Вам в отладке его.

Общие ошибки аутентификации и их значения

Две распространенных ошибки, которые могут быть получены Вашей игрой, стоит описать более подробно:

  • Получение a GKErrorGameUnrecognized ошибка означает, что Вы не включили Игровой Центр своего приложения в Подключении iTunes. Регистрируйтесь к своему Подключению iTunes, считают и проверяют, что Вашему приложению включили Игровой Центр. Кроме того, подтвердите, что идентификатор пакета в Вашем проекте XCode соответствует идентификатор пакета, который Вы присвоили своему приложению в Подключении iTunes.

  • Получение a GKErrorNotSupported ошибка означает, что устройство, на котором работает Ваша игра, не поддерживает Игровой Центр. Необходимо отключить связанные опции Центра всей Игры.

Включите другой игровой код центра сразу после того, как будет успешно аутентифицироваться проигрыватель

Как только проигрыватель успешно аутентифицировался, Ваша игра может считать другие свойства на объекте местного игрока определить имя дисплея проигрывателя и другие атрибуты. Можно также использовать другие классы тот Игровой Центр доступа. В большинстве случаев Ваша игра должна сразу включить другой код, связанный с Игровым Центром. Например, вот некоторые общие задачи, которые большинство игр выполняет после успешной аутентификации местного игрока:

  • Читайте displayName свойство для получения имени местного игрока. Используйте это имя дисплея всюду по своей игре, когда Вы захотите обратиться к проигрывателю; не запрашивайте проигрыватель отдельно их имя.

  • Добавьте обработчики событий для получения событий для функций Game Center. Например, основанные на повороте соответствия, соответствия в реальном времени и проблемы все требуют, чтобы обработчики событий обработали события Game Center. Поскольку Ваша игра, возможно, была запущена в частности для получения незаконченного приглашения; добавление обработчиков событий сразу после аутентификации проигрывателя позволяет тем событиям быть обработанными быстро.

  • Получите предыдущий прогресс местного игрока на достижениях. См. Перечисление 5-4.

  • Получите список идентификаторов проигрывателя для друзей местного игрока. Это - первый шаг перед загружающейся более подробной информацией о тех проигрывателях. Посмотрите Получение Друзей Местного игрока.

  • Если Ваша игра хранит свою собственную информацию для определенного проигрывателя (такого как переменные состояния, указывающие прогресс проигрывателя через Вашу игру), Ваш обработчик завершения мог бы также загрузить эти данные так, чтобы это могло восстановить прогресс проигрывателя.

Аутентификация местного игрока в многозадачном приложении

Игра, поддерживающая и многозадачность и Игровой Центр, должна предпринять дополнительные шаги при аутентификации местного игрока. Когда Ваша игра в фоновом режиме, состояние аутентифицируемого проигрывателя может измениться, потому что проигрыватель может выписаться, или может регистрироваться новый проигрыватель. Также, Вы никогда не можете полагаться на информацию, остающуюся то же, когда Ваша игра перемещается в фон.

Вот некоторые инструкции для аутентификации местного игрока в игре, поддерживающей многозадачность:

  • Как другие многозадачные приложения, Ваша игра должна заархивировать свое состояние прежде, чем переместиться в фон.

  • Как только Ваша игра перемещается в фон, значение объекта местного игрока authenticated свойство становится и остается недопустимым, пока Ваша игра не пятится к переднему плану. Вы не можете считать значение, чтобы определить, аутентифицируется ли проигрыватель все еще, пока Гэйм Кит не повторно аутентифицирует проигрыватель и вызывает Ваш обработчик аутентификации. Ваша игра должна действовать, как будто нет аутентифицируемого проигрывателя, пока не вызывают Ваш обработчик завершения. Как только Ваш обработчик вызывают, значение, сохраненное в authenticated свойство допустимо снова.

  • Если значение authenticated свойство изменилось на NO, тогда больше нет местного игрока, разрешенного получить доступ к содержанию Центра Гэйма. Ваша игра должна избавиться от любых объектов Гэйма Кита, создававшихся с помощью предыдущего местного игрока.

  • Если значение authenticated свойство YES, тогда существует местный игрок, аутентифицируемый на устройстве. Однако новый проигрыватель, возможно, вошел в систему. Ваша игра должна сохранить идентификатор проигрывателя для местного игрока после того, как это будет аутентифицировать проигрыватель. Затем на будущих вызовах к Вашему обработчику завершения сравните значение объекта местного игрока playerID свойство к идентификатору сохранено Вашей игрой. Если идентификатор изменился, то новый проигрыватель регистрировался. Ваша игра должна избавиться от любых объектов, связанных с предыдущим проигрывателем, и затем создать или загрузить надлежащее состояние для нового местного игрока.

Получение друзей местного игрока

Можно хотеть к игре сослаться на друзей местного игрока. Например, если Вы реализуете свой собственный matchmaking или бросаете вызов интерфейсу и хотите позволить проигрывателю привередливо выбирать проигрыватели от друзей список, Вы могли бы сделать это. В отличие от других свойств объекта местного игрока, friends свойство не заполнено, когда объект местного игрока возвращается к Вашей игре, потому что те данные могут потенциально быть довольно большими и требовать времени для отправки по сети. Вместо этого Вы выбираете, когда Вы хотите, чтобы Ваша игра загрузила эту информацию.

Получение подробных данных о друзьях местного игрока является двухступенчатым процессом. Во-первых, Ваша игра загружает список идентификаторов проигрывателя для друзей местного игрока (который также устанавливает friends свойство). Затем как с любыми другими идентификаторами проигрывателя, Ваша игра вызывает Игровой Центр для получения подробных данных для тех проигрывателей.

Перечисление 3-3 показывает, как Ваша игра загружает список идентификаторов проигрывателя для друзей местного игрока. Это тогда вызывает loadPlayerData: метод, определенный в Перечислении 3-5 для выборки подробных данных для тех проигрывателей. При использовании iOS 6.0 и ранее, изменитесь friendIDs свойство к friends.

Перечисление 3-3  , Получающее друзей местного игрока

- (void) retrieveFriends
{
   GKLocalPlayer *lp = [GKLocalPlayer localPlayer];
   if (lp.authenticated)
   {
      [lp loadFriendsWithCompletionHandler:^(NSArray *friendIDs, NSError *error) {
         if (friendIDs != nil)
         {
            [self loadPlayerData: friendIDs];
         }
      }];
   }
}

Перечисление 3-4  , Получающее (предыдущих) друзей местного игрока

- (void) retrieveFriends
{
   GKLocalPlayer *lp = [GKLocalPlayer localPlayer];
   if (lp.authenticated)
   {
      [lp loadFriendsWithCompletionHandler:^(NSArray *friends, NSError *error) {
         if (friends != nil)
         {
            [self loadPlayerData: friends];
         }
      }];
   }
}

Получение информации о проигрывателях

Независимо от которого класс Гэйма Кита возвратил идентификаторы проигрывателя Вашей игре, Вы получаете подробную информацию о тех проигрывателях таким же образом путем вызова loadPlayersForIdentifiers:withCompletionHandler: метод класса для GKPlayer класс. Перечисление 3-5 показывает скелетную реализацию. Этот метод Гэйма Кита берет два параметра. Первым является массив идентификаторов проигрывателя для проигрывателей, которыми Вы интересуетесь. Вторым является обработчик завершения, который вызовут после того, как Гэйм Кит получит данные от Центра Гэйма. Гэйм Кит загружает данные асинхронно в фоновом режиме и вызывает Ваш обработчик завершения после того, как завершится задача. Обработчик завершения получает массив GKPlayer объекты (один для каждого идентификатора), а также параметр ошибок.

Перечисление 3-5  , Получающее подробные данные проигрывателя

- (void) loadPlayerData: (NSArray *) identifiers
{
    [GKPlayer loadPlayersForIdentifiers:identifiers withCompletionHandler:^(NSArray *players, NSError *error) {
        if (error != nil)
        {
            // Handle the error.
        }
        if (players != nil)
        {
            // Process the array of GKPlayer objects.
        }
     }];
}

Если Гэйм Кит был неспособен загрузить информацию для всех проигрывателей, она обеспечивает ошибку для обработчика завершения. Когда это происходит, players параметр может обеспечить частичный массив для проигрывателей, о которых Гэйм Кит смог получить информацию. Поэтому Перечисление 3-5 тестирует состояние ошибки отдельно от обработки массива объектов проигрывателя.

Загрузка фотографии для проигрывателя

В дополнение к информации, найденной в объекте проигрывателя, можно также попытаться загрузить фотографию для проигрывателя. Не всем объектам проигрывателя связали фотографии с ними, таким образом, Ваш код должен быть в состоянии работать без них.

Перечисление 3-6 показывает типичную реализацию этого понятия, следующего за тем же образцом как другие классы Гэйма Кита. Это вызывает loadPhotoForSize:withCompletionHandler: метод на объекте проигрывателя, и затем ожидает обработчика завершения, который вызовут. Обратите внимание на то, что нет свойства на объекте проигрывателя, хранящем возвращенную фотографию. Необходимо записать собственный код для соединения фотографий проигрывателя с объектами проигрывателя.

Перечисление 3-6  , Загружающее фотографию проигрывателя

- (void) loadPlayerPhoto: (GKPlayer*) player
{
    [player loadPhotoForSize:GKPhotoSizeSmall withCompletionHandler:^(UIImage *photo, NSError *error) {
        if (photo != nil)
        {
            [self storePhoto: photo forPlayer: player];
        }
        if (error != nil)
        {
            // Handle the error if necessary.
        }
     }];
}

Разрешение местному игроку пригласить другие проигрыватели быть друзьями

Игровое приложение Центра позволяет проигрывателям отправлять приглашения на другие проигрыватели. Используйте GKFriendRequestComposeViewController класс, чтобы позволить проигрывателю отправлять запросы на добавление в друзья. Запрос на добавление в друзья должен быть представлен модально контроллером представления, который Ваша игра создает и не может быть продвинута на контроллер навигации.

Перечисление 3-7 показывает один способ, которым Ваш контроллер представления может позволить проигрывателю отправлять запрос к другим проигрывателям. Для этого метода массив идентификаторов проигрывателя передается в в качестве параметра. Метод инстанцирует a GKFriendRequestComposeViewController объект, устанавливает своего делегата и добавляет, что список проигрывателей намеревался получить приглашение. Контроллер представления тогда представляет запрос на добавление в друзья и возвраты.

Перечисление 3-7  , Выводящее на экран запрос на добавление в друзья

- (void) inviteFriends: (NSArray*) identifiers
{
    GKFriendRequestComposeViewController *friendRequestViewController = [[GKFriendRequestComposeViewController alloc] init];
    friendRequestViewController.composeViewDelegate = self;
    if (identifiers)
    {
        [friendRequestViewController addRecipientsWithPlayerIDs: identifiers];
    }
    [self presentViewController: friendRequestViewController animated: YES completion:nil];
    [friendRequestViewController release];
}

Когда проигрыватель отклоняет запрос на добавление в друзья, делегат friendRequestComposeViewControllerDidFinish: метод вызывают. Перечисление 3-8 показывает, как Ваш контроллер представления должен отклонить запрос.

Перечисление 3-8  , Отвечающее, когда проигрыватель отклоняет запрос на добавление в друзья

- (void)friendRequestComposeViewControllerDidFinish:(GKFriendRequestComposeViewController *)viewController
{
    [self dismissViewControllerAnimated:YES completion:nil];
}