Как получить уведомления о матчах GameKit Turn-Based?

Я работаю над iOS-игрой, основанной на поворотах, используя новый пошаговый API iOS5.

Один из протоколов делегатов, который вам нужно реализовать для этого, - GKTurnBasedEventHandlerDelegate. Один из методов для реализации - handleTurnEventForMatch. Это из документов Apple по этому методу:

handleTurnEventForMatch

Отправлено делегату, когда локальные игроки начинают действовать в пошаговое соответствие.

- (void)handleTurnEventForMatch:(GKTurnBasedMatch *)match

Параметры

match - объект соответствия, содержащий текущее состояние соответствия.

Обсуждение

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

Большая часть моей игры работает. Я получаю уведомления об изменениях, полученных с помощью вышеуказанного метода. Я также вижу, что значки в значках приложений успешно обновляются.

Тем не менее, я не получаю никаких других системных уведомлений при включении событий; ничего не появляется в центре уведомлений и т.д. Нужно ли мне что-то делать за пределами GameKit, чтобы включить это? Нужно ли мне вручную отправлять локальное уведомление, когда я получаю handleTurnEventForMatch? Документы, похоже, не подразумевают того, что он говорит выше. "Когда ваш делегат получает это сообщение, игрок принял push-уведомление для уже прошедшего матча".

Таким образом, это означает, что игрок нажал на push-уведомление, чтобы вызвать этот метод (но, конечно, они никогда не появляются, поэтому я этого не делал!)

Что мне нужно сделать, чтобы включить push-уведомления в моем приложении для пошаговых событий? Нужно ли мне на самом деле отправлять локальное уведомление, когда я получаю вышеуказанный метод (это, казалось бы, противоречит намерению, учитывая формулировку вышеупомянутого документа).

Ответ 1

Я только что закончил свой путь через это, и через неделю или около того, ударив головой о стол, я обнаружил эти важные вещи:

(1) Симулятор не получает эти уведомления об повороте. Как только я сделал эту работу, она отлично работает между двумя устройствами. Симулятор, играющий против устройства, отправит события, но не получит их. Поэтому, если вы пытаетесь использовать одно устройство и симулятор для проверки этого, удачи. Используйте два устройства.

(2) Убедитесь, что в iTunes подключен "Game Center Enabled для этой версии" и убедитесь, что CFBundleVersion в вашем приложении соответствует этой версии. Как только я это сделал, все приступило к работе.

Я предполагаю, что вы уже сделали: [GKTurnBasedEventHandler sharedTurnBasedEventHandler].delegate = YOUR_DELEGATE_CLASS;

Ответ 2

Том Шульц сказал правду. Но одно!: вы можете получать уведомления с вашего устройства, но не с помощью имитатора. Для этого всегда reset содержимое и параметры симулятора перед сборкой и запуском. И на симуляторе вы можете использовать метод сопоставлений нагрузки для получения чего-то для тестов. Надеюсь, что это поможет.

Ответ 3

Как говорится в документации, это сообщение получено, когда игрок принял push-уведомление (обычно, разблокируя телефон или через центр уведомлений). Отправка push-уведомлений определяется на стороне клиента Game Center и автоматически выполняется для вас GameKit. Вам не нужно реализовывать GKTurnBasedEventHandlerDelegate, чтобы они работали, только чтобы отвечать на принимающий их игрок (автоматически возвращаясь к этому совпадению или что-то еще).

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

Ответ 4

Установили ли вы push-уведомления в iTunes connect/портале обеспечения? Вам действительно нужен специальный сертификат для включения push.

У меня была такая же проблема, как и вы, пока я не установил сертификаты.