Статья представляет собой вольный перевод руководства по работе с Apple Push Notification Service сайта raywenderlich.com и некоторые мои дополнения. iOS-приложения не могут долгое время находиться в фоновом режиме. В целях сохранения заряда батареи приложениям, работающим в фоне, разрешено выполнять ограниченный набор действий.
Но что если происходит что-то интересное и вы хотите сообщить об этом пользователям, даже если ваше приложение у них не запущено? Например, пользователь получил ответ в Твиттере, или его любимая команда выиграла игру, или его обед готов. Так как приложение не запущено, оно не может проверить и получить эти данные.
К счастью, корпорация Apple предусмотрела решение этой проблемы. Вместо того, чтобы беспрерывно проверять события или производить какие-либо действия в фоновом режиме, вы можете создать серверную сторону приложения, которая будет выполнять эти действия.
А когда наступит интересующее событие, серверная сторона сможет отправить приложению push-уведомление! Абсолютно любое push-уведомление может выполнять следующие три действия:
- Показать короткое текстовое сообщение.
- Воспроизвести короткий звуковой сигнал.
- Установить число на бейдже иконки приложения.
Вы можете комбинировать эти действия, как считаете нужным; например, воспроизвести звук и установить число на бейдже, но не показывать сообщение.
Краткий обзор
Схема работы механизма push-уведомлений:
После установки приложения появится всплывающее сообщение с подтверждением принятия push-уведомлений.
- iOS запрашивает у сервера Apple Push Notification Service (APNS) токен девайса.
- Приложение получает токен девайса. Можно считать, что токен – это адрес для отправки push-уведомлений.
- Приложение отправляет токен девайса на ваш сервер.
- Когда произойдёт какое-либо событие для вашего приложения, сервер отправит push-уведомление в APNS.
- APNS отправит push-уведомление на девайс пользователя.
Когда пользователь получит push-уведомление, появится сообщение, и/или будет воспроизведён звуковой сигнал, и/или обновится бейдж на иконке приложения. Пользователь может открыть приложение из уведомления. Приложение получит контент push-уведомления и сможет обработать его.
Стоит ли по-прежнему использовать push-уведомления, если уже в iOS 4.0 появились локальные уведомления и мультизадачность? Ещё бы!
Локальные уведомления — это ограниченные по времени события. Только VOIP-приложения, навигация и фоновое воспроизведения звука обладают возможностью неограниченного фонового выполнения. Если необходимо уведомить пользователей приложения (пока оно закрыто) о каком-либо внешнем событии, вы всё ещё должны использовать push-уведомления.
В этом руководстве будет детально описана работа системы push-уведомлений и как её интегрировать в своё приложение.
Что необходимо для push-уведомлений
Для интеграции push-уведомлений в приложение необходимо:
iPhone, iPad или iPod touch. Push-уведомления не работают в симуляторе, поэтому для тестирования нужен девайс.
Регистрация в iOS Developer Program. Для каждого приложения, в котором будет интегрирован механизм push-уведомлений, необходимо создать новый App ID и provisioning profile, а также SSL-сертификат для сервера. Эти действия выполняются на iOS Provisioning Portal.
Если хотите полностью выполнять примеры из этого руководства, вам необходимо создать provisioning profile и SSL-сертификат. Я в деталях объясню, как это сделать.
Сервер, подключенный к интернету. Push-уведомления всегда отправляются сервером. В процессе разработки вы можете использовать ваш собственный Мак в качестве сервера, но для релиза нужно что-то наподобие VPS (Virtual Private Server).
Для работы с push-уведомлениями дешёвого виртуального хостинга недостаточно. Вам необходимо запустить фоновое выполнение на сервере, установить SSL-сертификат, настроить исходящее TLS-соединение на определённых портах. Большинство провайдеров виртуального хостинга не позволят вам это сделать. Хотя если обратиться в службу технической поддержки, то вам, скорее всего, помогут решить все проблемы. Но всё же я настоятельно рекомендую использовать VPS.
Повторная авторизация Apple ID и iCloud
Если подключение к интернету есть, а перезагрузка не помогла, попробуйте повторно войти в учетную запись Apple ID.
- Откройте настройки.
- Перейдите в раздел «iTunes Store и App Store».
- Нажмите на авторизованный Apple ID и выберите «Выйти».
- Нажмите «Войти» и заново авторизуйтесь по Apple ID.
Следующий метод устранения проблемы с приходом пуш уведомлений в Вайбере и других приложениях на Айфоне — повторное подключение устройства к iCloud. Выполняется также через настройки:
- Откройте раздел «iCloud» в настройках iOS.
- Нажмите «Выйти» в самом низу страницы.
- Повторно авторизуйтесь в iCloud на этой же странице.
Пользователи сообщают, что им помогла перезагрузка устройства, выполненная между выходом из iCloud/Apple ID и повторным входом/авторизацией.
Анатомия push-уведомлений
Ваш сервер ответственный за создание сообщений для push-уведомлений. Поэтому полезно знать, как эти сообщения выглядят.
Push-уведомление — это короткое сообщение, состоящее из токена девайса, полезной нагрузки (payload) и ещё некоторой информации. Полезная нагрузка — это актуальные данные, которые будут отправляться на девайс.
Ваш сервер должен преобразовать полезную нагрузку в JSON-словарь. Полезная нагрузка для простого push-сообщения выглядит следующим образом:
{ «aps»: { «alert»: «Hello, world!», «sound»: «default» } } Блок, ограниченный фигурными скобками содержит словарь, который состоит из пар «ключ-значение» (так же, как и в NSDictionary).
Полезная нагрузка — это словарь, который состоит из, по крайней мере, одной пары «ключ-значение» «aps», значение которой само по себе является словарём. В примере выше «aps» содержит два поля: «alert» и «sound». Когда на девайс придёт push-уведомление, отобразится всплывающее сообщение с текстом «Hello, world!» и будет воспроизведён стандартный звуковой сигнал.
Кроме этого, в «aps» можно добавить и другие поля для настройки уведомления. Например:
{ «aps»: { «alert»: { «action-loc-key»: «Open», «body»: «Hello, world!» }, «badge»: 2 } } Теперь значение поля «alert» — это словарь. «action-loc-key» содержит альтернативный текст для кнопки «Запустить». Поле «badge» содержит число, которое будет отображено на бейдже иконки приложения. Push-уведомление не будет сопровождаться звуковым сигналом.
Есть довольно много способов формирования JSON полезной нагрузки. Вы можете изменить звуковой сигнал уведомления, добавить свои собственные поля. Дополнительную информацию можно найти на странице «Local and Push Notification Programming Guide» сайта разработчиков Apple.
Push-уведомления — это нечто довольно маленькое; размер полезной нагрузки не может превышать 256 байт. Это примерно столько же, сколько позволяет вместить в себя СМС или твит. Push-сервер не будет тратиться на переносы на новую строку и пробелы, а сгенерирует что-то наподобие этого:
{«aps»:{«alert»:»Hello, world!»,»sound»:»default»}} Такое представление менее читаемо, однако предоставляет достаточно места для более ценной информации. APNS отклонит push-уведомления, чьи размеры превышают 256 байт.
Что делать, если не приходят уведомления на Айфон
Сразу определить, что именно стало причиной возникновения проблемы, достаточно сложно. Поэтому разработан специальный алгоритм, позволяющий вернуть уведомления вне зависимости от конкретной причины. Хозяину устройства рекомендуется проверить все настройки Айфона, чтобы выправить ситуацию.
Проверить настройки телефона
Чаще всего проблема возникает из-за включения ограничительных функций. В связи с этим нужно открыть настройки и проверить, работают ли специфические режимы. В графе «Не беспокоить» следует проверить, отключена ли оно. Если режим активирован, уведомления приходить не будут.
Кроме того, необходимо уточнить, не установлен ли запрет для конкретной программы. Для устранения проблемы потребуется:
- Открыть настройки Айфона.
- Перейти в раздел уведомлений.
- Кликнуть по названию проблемного приложения.
- Проверить работу ползунка «Допуск уведомлений».
Чтобы информационные сообщения поступали всегда, активируйте показ баннеров и на заблокированном экране.
При соблюдении остальных условий и активации допуска уведомления должны вновь заработать. Для отдельных программ можно выставить принудительный запрет, чтобы важные сообщения не затерялись в списке бесполезных.
Перезагрузить Айфон
Не исключено, что проблема возникла по причине системного сбоя. В таком случае сложно определить, насколько простым будет ее решение. Но сначала следует воспользоваться самым доступным вариантом устранения.
Попробуйте перезагрузить Айфон. Для этого нужно в течение 2-3 секунд удерживать палец на кнопке питания, а затем подтвердить выполнение операции.
Как только iPhone запустится, следует проверить работоспособность уведомлений. Если они вновь начали высвечиваться, не стоит радоваться. Однократное возникновение системного сбоя говорит о том, что подобная ситуация может повториться в будущем.
Проверить подключение к интернету
Возможно, кто-то подумает, что отсутствие доступа к сети является самой глупой причиной возникновения проблемы. Но все-таки данный вариант тоже необходимо проработать.
Если для доступа к интернету на Айфоне используется Wi-Fi, нужно перейти в соответствующий раздел настроек устройства. Там должен быть активирован ползунок напротив пункта «Wi-Fi». Кроме того, следует убедиться, что напротив используемой сети стоит галочка.
Разумеется, для выхода в интернет многие люди не прибегают к помощи Wi-Fi. Они используют мобильную сеть, которая предоставляется оператором связи. В таком случае требуется открыть раздел «Сотовые данные» настроек Айфон. Напротив одноименного пункта должен быть активирован ползунок.
При нахождении за рубежом интернет может не работать по причине того, что в настройках деактивирован пункт «Роуминг данных». Его тоже следует включить, если в текущий момент вы находитесь не в стране, где была оформлена SIM-карта.
Для более высокой скорости интернета рекомендуется в пункте «Голос и данные» выставить значение 4G. Но уведомления смогут прийти и при настройке 3G.
Зачастую одной лишь активации доступа к интернету может быть недостаточно. Случается, что на экране высвечивается активное подключение, но на практике мобильная сеть или Wi-Fi не работает. Проверить функционирование можно, открыв Safari и перейдя на любую страницу. Если она загружается без каких-либо проблем, то интернет работает.
А вот если прогрузить страницу не удалось, есть повод задуматься, что произошло с интернетом. Возможно, не была своевременно внесена абонентская плата за тариф. Наличие поступившего платежа нужно проверить как в случае с сотовыми данными, так и с вайфаем.
Также не стоит исключать факт ведения технических работ на сервере. Для полной уверенности можно перезагрузить роутер, если используется вайфай. А в случае, когда интернет заработает, уведомления начнут приходить без сложностей. Конечно, если ранее в настройках не выставлялся запрет.
Сделать повторную авторизацию в Apple ID
Как бы то ни было, самой частой причиной возникновения проблемы в действительности является системный сбой. Если все предложенные ранее способы устранения не помогли, то следует проверить настройки своего аккаунта.
В частности, рекомендуется выйти, а потом снова зайти в свой Apple ID. Для этого нужно открыть настройки смартфона и кликнуть по иконке учетной записи. Откроется меню, где будет доступен пункт «Выйти».
Не пытайтесь перезапустить Apple ID, если не помните пароль от аккаунта.
Чтобы осуществить повторный вход, потребуется вновь открыть настройки iPhone.
Вместо иконки там высветится 2 пустых поля:
- Apple ID;
- пароль.
Необходимо заполнить соответствующую информацию, после чего нажать кнопку «Войти». Так вы снова авторизуетесь в своем аккаунте и, возможно, все уведомления вновь заработают. А если войти в свой аккаунт не удалось, поскольку вы забыли пароль, посмотрите видео, где представлено 100-процентное решение проблемы.
Подключить заново Айфон к iCloud
Apple ID объединяет в себе доступ ко множеству сервисов, в числе которых выделяется Айклауд. Это облачное хранилище, которое позволяет владельцу устройства хранить персональные данные и файлы на серверах компании Apple.
Исследования проблемы работы уведомлений показывают, что если выйти и снова зайти в iCloud, все ошибки устраняются. Для выполнения операции понадобится:
- Открыть настройки.
- Перейти в раздел iCloud.
- Нажать кнопку выхода.
Для повторной авторизации, как и в случае с ранее рассмотренным способом, необходимо ввести данные своего Apple ID. Это сам идентификатор, а также пароль доступа. После выполнения всех рекомендаций можно проверять работу уведомлений.
Использовать программу ReiBoot
Сторонние разработчики подготовили для владельцев iPhone кучу разных программ, позволяющих устранить разного рода проблемы. К примеру, существует ReiBoot. Это универсальный софт для компьютера, который после подключения дает пользователю возможность сбросить настройки или просто попытаться устранить ошибки при работе Айфона.
Загрузить программу на ПК можно с официального сайта разработчиков. Установка займет совсем немного времени, поскольку размер утилиты не превышает пары десятков мегабайт. Как только весь дистрибутив скачается, а ReiBoot будет установлен, останется выполнить несколько простых действий:
- Подключите Айфон к компьютеру, используя комплектный кабель Lightning-USB.
- Откройте программу и дождитесь момента, когда она определить мобильное устройство.
- Из предложенных опций выберете «Решить все iOS зависания».
- Подождите несколько минут, пока программа будет искать возможные ошибки.
- Подтвердите устранение неполадок.
Помимо сложностей с уведомлениями программа в процессе может исправить и другие ошибки. Поэтому использование ReiBoot является очень полезной процедурой, которая не доступна в других подобных утилитах.
Понимание push-уведомлений
Они не надёжны! Нет гарантий, что push-уведомления будут доставлены, даже если APNS примет их.
Как только ваш сервер сформировал push-уведомление, он безответно отправляет его в APNS. Нет способа узнать статус доставки уведомления конечному пользователю после отправки. Время доставки может варьироваться от нескольких секунд до получаса.
Кроме этого, у пользователей i-девайсов может не быть возможности получать push-уведомления всё время. Например, рядом нет Wi-Fi сети с доступом в интернет либо девайс может быть вообще выключен.
APNS будет пытаться доставить последнее отправленное уведомление, когда девайс станет доступен для приёма. Но эти попытки ограничены по времени. После тайм-аута push-уведомление будет потеряно навсегда!
Они могут быть дорогими! Добавить push-функционал в приложение довольно просто и недорого, если вы владеете данными. Однако если у вас много пользователей либо необходимо запрашивать данные, то затраты резко возрастают.
К примеру, вы без проблем сможете оповестить пользователей об изменении RSS-ленты, потому что вы контролируете ленту и знаете, когда будут внесены изменения — когда обновится контент на сайте — ваш сервер мгновенно отправит уведомление.
Но что если ваше приложение — это RSS-читалка, позволяющая пользователям вносить URL-адреса своих лент? В этом случае вам необходимо придумать механизм слежения за обновлением добавленных лент.
На практике это означает, что вашему серверу нужно постоянно проверять ленты на изменение. Если у вас много пользователей, то возможно, придётся установить дополнительные сервера для обработки всех процессов и поддержки стабильной пропускной способности. Для таких приложений, как RSS-читалка, реализация push-функционала может стать довольно затратной и не представлять ценности для вас.
Ладно, хватит теории. Настало время изучить процесс реализации всех этих push-вещей. Но до того, как приступать к самому «вкусному» — программированию! — нужно выполнить несколько скучных настроек на iOS Provisioning Portal. Что ж, давайте сделаем их настолько быстро, насколько это возможно.
Как временно отключить все уведомления?
В iOS есть восхитительная функция «Не беспокоить».
Она позволяет на постоянной или временной основе блокировать все или часть уведомлений. Приятно то, что она может работать по расписанию, автоматически активируя ограничения. К примеру, вас не потревожит какая-нибудь незначительная напоминалка в игре после 23:00, босс или родные всегда дозвонятся, а вот прочие абоненты смогут достучаться только если настойчиво позвонят второй раз в течение трёх минут. Функция «Не беспокоить» очень простая, понятная, гибкая и важная.
Тут же с приходом iOS 11 обосновалась функция «Не беспокоить водителя», не позволяющая отвлекаться за рулём.
Если у вас не приходят уведомления на Айфон, то причиной этого может быть отсутствие подключения к интернету, сбои в работе системы, неправильные настройки iOS и другие программные факторы, которые можно исправить самостоятельно.
Provisioning Profiles и Сертификаты
Для того чтобы подключить push-уведомления к приложению, необходимо подписать его правильно сконфигурированным provisioning profile. Кроме этого, вашему серверу необходимо соединиться с APNS при помощи SSL-сертификата.
Provisioning profile и SSL-сертификат тесно связаны друг с другом и действительны только для одного App ID. Это защита, гарантирующая, что только ваш сервер может отправлять push-уведомления пользователям вашего же приложения.
Как вы знаете, для разработки и релиза приложения используют разные provisioning profiles. Есть два типа push-сертификатов для сервера:
- Разработка (Development). Если приложение работает в режиме отладки и подписано provisioning profile для разработки (Code Signing Identity — «iPhone Developer»).
- Релиз (Production). Приложения, созданные как Ad-Hoc или подготовленные для загрузки на App Store (Code Signing Identify — «iPhone Distribution») должны сообщить серверу, что используют сертификат для релиза (Production certificate). Если между ними будут несоответствия, то push-уведомления не смогут приходить в ваше приложение.
В этом руководстве будет использоваться только сертификат для разработки.
Что такое пуш-уведомления и зачем они нужны пользователю Айфона и разработчикам
Push-уведомления — это сообщения, которые всплывают даже на заблокированном экране. Они могут содержать информацию о состоянии телефона, сообщения из мессенджеров, новости и акции от различных сайтов.
Предполагается, что пуш-сообщения содержат важные для пользователя данные, именно поэтому они проходят сквозь все блокировщики рекламы и высвечиваются поверх всех окон. Они приходят только от установленных приложений и сайтов, на чьи рассылки пользователь сам подписался.
Впервые технология появилась в iOS 7 (iPhone 4), но популярность получила на более поздних моделях: Айфоне 6 и Айфоне 7. Разработчики используют пуш-сообщения, чтобы предупредить о готовом обновлении приложения и возможных проблемах, сообщить подробности технического состояния телефона. Также пуши используются для стимулирования покупок приложений с помощью акций и скидок.
Так называемые web-push, то есть сообщения с веб-сайтов, используются для информирования подписчиков о последних новостях компании, напоминания о заказе, оформленном не до конца, сообщения о предстоящих акциях и прочих рекламных целей. Для того чтобы получать эти уведомления пользователь должен вручную на них подписаться.
Генерация Certificate Signing Request (CSR)
Помните, как вы заходили на iOS Provisioning Portal и создавали сертификат разработчика (Development Certificate) после присоединения к iOS Developer Program? Следующие шаги будут аналогичными. Но всё же я советую выполнять их в точности, как будет описано ниже. У разработчиков большинство проблем с push-уведомлениями как раз и связано с сертификатами.
Цифровые сертификаты базируются на шифровании с использованием открытого-приватного ключа. Вам нет необходимости знать что-либо о шифровании при работе с сертификатами, но вы должны быть осведомлены в том, что сертификат всегда работает в паре с приватным ключом.
Сертификат — это общая часть этой пары ключей. Приватный ключ должен держаться в секрете. Владеете им только вы и никто другой не должен иметь доступ к нему. Отмечу, что невозможно использовать сертификат без приватного ключа.
Всякий раз когда вы запрашиваете цифровой сертификат, необходимо сделать запрос на его подпись (Certificate Signing Request [CSR]). Когда вы создадите CSR, новый ключ будет занесён в связку ключей (keychain). Затем необходимо отправить CSR в центр сертификации (в этом случае это iOS Developer Portal), который сгенерирует SSL-сертификат на основе информации из CSR.
Откройте утилиту «Связка ключей» («Приложения → Утилиты (Другие)») и выберите опцию «Запросить сертификат у бюро сертификации…».
Если вы не видите этой опции меню или появляется сообщение с текстом «Запросить сертификат у бюро сертификации с ключом» («Request a Certificate from a Certificate Authority with key»), тогда необходимо загрузить и установить WWDR Intermediate Certificate. Также необходимо проверить, чтобы ни один приватный ключ не был выделен.
Сейчас перед вами должно быть окно ассистента сертификации:
Здесь введите e-mail. Разработчики советуют в качестве электронной почты использовать такую же, которую вы использовали для регистрации в iOS Developer Program, но это не обязательно.
В качестве общего имени введите «PushChat». Вы можете ввести что угодно, но выберите что-нибудь описательное. Позже это позволит легко найти приватный ключ.
Установите переключатель «Сохранён на диске» и нажмите «Продолжить». Сохраните файл под именем «PushChat.certSigningRequest».
Принудительная перезагрузка
Служба поддержки Apple рекомендует выполнить принудительную перезагрузку после обычной. Что это? Когда вы перезагружаете свой iPhone с помощью кнопки питания, это программная перезагрузка, которая работает на программном уровне. Force Restart, с другой стороны, работает на аппаратном уровне. Это особенно полезно, если ваш iPhone вообще не отвечает или находится в режиме восстановления.
Принудительный перезапуск полностью отключит питание системы, а затем снова включит ее, а затем выполнит перезагрузку. Опять же, сделайте это после обычной перезагрузки и убедитесь, что файлы и приложения не открыты, когда вы это делаете. В противном случае вы рискуете потерять данные.
Нажмите и удерживайте кнопку питания и уменьшения громкости одновременно. Комбинация может немного отличаться в зависимости от вашей модели.
Создание App ID и SSL-сертификата
Залогиньтесь на iOS Provisioning Portal.
Для начала создадим новый App ID. Каждому приложению, использующему механизм push-уведомлений, необходим свой собственный уникальный ID.
Кликните на пункт «App IDs» в сайдбаре и нажмите на кнопку «New App ID».
Я заполнил поля следующим образом:
Description: PushChat Bundle Seed ID: по умолчанию Bundle Identifier: me.evgeniy.PushChat
Будет лучше, если вы укажите свой собственный Bundle Identifier — com.yoursite.PushChat — вместо моего. В Xcode-проекте необходимо установить такой же bundle ID.
Ещё несколько моментов: мы сгенерируем SSL-сертификат, который будет использовать ваш push-сервер для защищённого соединения с APNS. Этот сертификат связан с App ID. Сервер может посылать push-уведомления только вашему приложению и никакому другому.
После того, как был создан App ID, он появится в списке:
В колонках «Development» и «Production» напротив «Push Notification» есть два оранжевых кружка с надписью «Configurable». Это значит, что App ID может использовать push-уведомления, но их всё ещё необходимо настроить. Поэтому переходим по ссылке «Configure».
На появившейся странице ставим флажок напротив «Enable for Apple Push Notification service». Далее нажмите кнопку «Configure» в строке с Development Push SSL Certificate. Откроется окно «Apple Push Notification service SSL Certificate Assistant»:
Первое, что необходимо — это сгенерировать Certificate Signing Request. Мы уже сделали это, поэтому нажмите «Continue».
На следующем шаге необходимо загрузить CSR на сервер Apple. Выберите CSR-файл, который вы сгенерировали ранее и нажмите «Generate».
Генерация SSL-сертификата займёт несколько секунд. Когда будет готово, нажмите «Continue».
Для того, чтобы скачать сертификат, нажмите «Download» — он будет сохранён под именем «aps_development.cer». После нажмите «Done».
Теперь у нас есть валидный сертификат и механизм push-уведомлений доступен для разработки. Если необходимо, вы можете снова загрузить сертификат.
Когда ваше приложение будет готово к релизу, необходимо повторить весь процесс для генерации Production-сертификата. Все шаги аналогичны.
Замечание. Production-сертификат действителен в течении года, но вы можете пересоздать его до истечения срока.
Нет необходимости добавлять сертификат в связку ключей. Если же вы захотите это сделать, то кликните два раза по скачанному ранее файлу aps_development.cer (после этого сертификат будет ассоциирован с приватным ключом).
Создание Provisioning Profile
Зайдите на Provisioning Portal. Перейдите по ссылке «Provisioning» и нажмите на кнопку «New Profile».
Я заполнил поля следующим образом:
- Profile Name: PushChat Development
- Certificates: выберите сертификат
- App ID: PushChat
- Devices: выберите ваш девайс(ы)
Этот процесс никак не отличается от генерации любого другого provisioning profile. Мы создаём новый profile, потому что каждому приложению, поддерживающему механизм push-уведомлений, необходим свой собственный profile, который связан с определённым App ID.
Нажмите «Submit» и profile будет сгенерирован. У нового profile будет установлен статус «Pending». Перезагрузите страницу и увидите, что статус изменился на «Active». Теперь вы можете скачать provisioning profile (файл с названием «PushChat.mobileprovision»).
Добавьте provisioning profile в Xcode перетянув файл на иконку IDE либо кликнув на файл два раза.
Если ваше приложение готово к релизу, то вам необходимо повторить описанный выше процесс для создания Ad Hoc или App Store distribution profile.
Режим «Не беспокоить»
Режим «Не беспокоить» заглушает уведомления и при определенных настройках входящие вызовы.
Как проверить, включена ли функция:
- На моделях IPhone X и старше проведите вниз по экрану, начиная с верхнего правого угла, на остальных моделях – снизу вверх. В открывшемся пункте управления найдите кнопку с символом полумесяца. Если функция включена, фон кнопки окрашен в белый цвет, а полумесяц – в фиолетовый. Чтобы остановить работу режима, необходимо нажать на кнопку (она станет темной, а месяц – белым).
- Зайдите в настройки устройства и откройте вкладку «Не беспокоить». Если верхний переключатель находится во включенном положении, он окрашен в зеленый. Нажмите на переключатель, что выключить функцию.
Режим «Не беспокоить» может включаться автоматически при выборе настройки «Запланировано».
Простенькое приложение
Предыдущие действия не были по-настоящему захватывающими, но они обязательны для выполнения. Я хотел в деталях показать, как сгенерировать сертификат, потому что такие вещи разработчик делает не каждый день, а без них push-уведомления работать не будут.
Сейчас мы создадим простое приложение, которое будет принимать push-уведомления.
Откройте Xcode и создайте новый проект. В ассистенте выберите «Single View Application» и перейдите к следующему шагу.
Я заполнил поля следующим образом:
- Product Name: PushChat
- Company Identifier: me.evgeniy
- Class Prefix: PC
- Device Family: iPhone
- Флажки: «Use Storyboards» и «Use Automatic Referance Counting»
Вместе Product Name и Company Identifier образуют Bundle ID. В моём случаем это «me.evgeniy.PushChat». Вы должны ввести Product Name и Company Identifier, соответствующие App ID, который ранее был создан на Provisioning Portal (com.yourname.PushChat).
После создания проекта, откройте PCAppDelegate.m. Измените метод didFinishLaunchingWithOptions следующим образом:
— (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Для iOS 7 и ниже [ registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; // Для iOS 8 и выше // [ registerUserNotificationSettings:]; // [ registerForRemoteNotifications]; return YES; } Вызов registerForRemoteNotificationTypes сообщает iOS, что это приложение хочет получать push-уведомления.
Соберите и запустите приложение. Для этого необходимо использовать девайс, потому что симулятор не поддерживает push-уведомления. Xcode автоматически выберет новый provisioning profile. Если во время запуска приложения произошла ошибка, убедитесь, что в Code Signing Identity выбран правильный profile.
Когда запуститься приложение, появится сообщение с подтверждением принятия push-уведомлений.
Приложение запросит разрешение только один раз. Если пользователь нажмёт «OK», push-уведомления будут приходить, если «Запретить» — не будут. Своё решение можно изменить в настройках.
Название вашего приложения будет добавлено в настройки push-уведомлений. Здесь пользователь может включить или отключить push-уведомления для вашего приложения, а также индивидуально настроить бейджи, звуки и сообщения.
Ваше приложение может определить, какие типы push-уведомлений включены:
UIRemoteNotificationType enabledTypes = [ enabledRemoteNotificationTypes]; Существует ещё одна вещь, которую вы должны добавить в приложение для того, чтобы иметь возможность получать push-уведомления. Добавьте следующий код в PCAppDelegate.m: — (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSLog(@»My token is: %@», deviceToken); } — (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { NSLog(@»Failed to get token, error: %@», error); } Когда ваше приложение регистрируется на приём push-уведомлений, оно пытается получить токен девайса. Это 32-байтовый уникальный номер, который однозначно определяет ваш девайс. Токен девайса можно сравнить с адресом, на который будут приходить push-уведомления.
После запуска приложения на консоли Xcode отобразиться токен вашего девайса:
My token is: <740f4707 bebcf74f 9b7c25d4 8e335894 5f6aa01d a5ddb387 462c7eaf 61bb78ad>
Токен — это непрозрачная двоичная структура данных, которая представляет собой объект типа NSData. Для наших целей достаточно знать 32-байтовый токен девайса. Токен можно представить в виде 64 шестнадцатеричных символов. Мы будем использовать именно такой формат.
Если запустить приложение на симуляторе, то вызовется метод didFailToRegisterForRemoteNotificationsWithError:, который выведет ошибку с информацией о том, что симулятор не поддерживает push-уведомления.
Мы закончили с приложением. Теперь давайте опробуем push-уведомления в действии!