pack('H*', $deviceToken).
pack('n', strlen($payload)).
$payload;
$wroteSuccessfully = fwrite($connection, $notification,
strlen($notification));
if (!$wroteSuccessfully){
echo «Could not send the message
»;
}
else {
echo «Successfully sent the message
»;
}
fclose($connection);
Если вы даже не программируете на PHP, внимательно просмотрите этот сценарий и почитайте комментарии к нему. Обязательно замените все значения в этом сценарии теми, что соответствуют вашему приложению. Например, используемый здесь маркер относится к моему устройству. Пользуйтесь маркером своего устройства, который выяснили ранее в этом разделе. У вас будут иные пароли, pem-файлы, скорее всего, будут находиться в других местах. Ради дополнительного упрощения этого раздела я поместил свой PHP-сценарий в тот же каталог, в котором ранее сохранил закрытый ключ и. pem-файл сертификата (PushCertificateAndKey.pem). Поэтому я могу обращаться к. pem-файлу просто по его имени.
Если вы правильно выполнили все шаги и инструкции, описанные в этом разделе, то ваш PHP-сценарий должен открываться в браузере. После этого на устройство начнут поступать уведомления. Сценарий посылает уведомление на APNS-сервер, который уже доставляет это уведомление на устройство. Когда пуш-уведомление попадает на устройство (предполагается, что на устройстве в этот момент отображается экран блокировки), вы увидите на экране примерно такую картинку, какая показана на рис. 15.12.
Рис. 15.12. Пуш-уведомление, отображенное на экране блокировки
См. также
Раздел 15.7.
15.9. Реагирование на пуш-уведомления
Постановка задачи
Проработав раздел 15.8, вы научились доставлять в ваше приложение пуш-уведомления, но не знаете, как реагировать на них в программе.
Решение
Реализуйте метод application: didReceiveRemoteNotification: делегата вашего приложения.
Обсуждение
Метод application: didReceiveRemoteNotification: делегата вашего приложения вызывается всякий раз, когда в систему iOS поступает пуш-уведомление и пользователь реагирует на это уведомление каким-то образом, инициируя открытие приложения. Этот метод срабатывает, когда приложение функционирует в приоритетном или в фоновом режиме, а не завершено. Например, пользователь может проигнорировать поступившее уведомление. Тогда и этот метод вызван не будет. Если пользователь нажимает на экране окно с пуш-уведомлением, в результате чего ваше приложение открывается, то iOS, открыв это приложение, переводит программу в приоритетный режим. После этого в делегате вашего приложения будет вызван вышеупомянутый метод.
Если приложение завершено и не работает даже в фоновом режиме, то iOS инкапсулирует пуш-уведомление, инициирующее запуск приложения, в параметрах запуска. Эти параметры будут переданы методу application: didFinishLaunchingWithOptions: делегата вашего приложения. Чтобы получить объект уведомления, просто запросите параметр didFinishLaunchingWithOptions этого метода (относящийся к типу NSDictionary) и поищите ключ UIApplicationLaunchOptionsRemoteNotificationKey. Значением этого ключа и будет то пуш-уведомление, которое запустило ваше приложение.
Параметр didReceiveRemoteNotification этого свойства несет в себе словарь типа NSDictionary. Этот словарь будет содержать в себе корневой объект под названием aps. Ниже этого объекта располагается словарь со следующими ключами, зависящими от того, как сервер создал пуш-уведомление (сервер может и не прислать все ключи сразу):
• badge — значением этого ключа является номер, который будет задан для ярлыка (значка) вашего приложения;
• alert — это содержащееся в пуш-уведомлении сообщение типа String. Сервер может прислать вам модифицированную версию значения этого ключа. Такое значение само по себе будет словарем, содержащим ключи body и show-view. Если вам будет прислана такая модифицированная версия предупреждения, то ключ body будет содержать именно тот текст, который находится в теле предупреждения. Ключ show-view будет содержать логическое значение, определяющее, должно ли предупреждение отображаться для пользователя. Кнопка Action (Действие) позволяет пользователю нажать на поступившее уведомление в центре уведомлений, чтобы открыть ваше приложение;
• sound — это строка, указывающая имя звукового файла, который должно воспроизводить ваше приложение;