Интерактивный помощник
Чтобы заново настроить уведомления MobileSCAN, подключитесь к мобильному приложению и откройте раздел «Еще». Найдите иконку MobileSCAN и кликните на нее.

В верхнем правом углу находится иконка гайки (настройки). После того как вы кликните на нее, откроется список всех ваших устройств MobileSCAN.

Найдите интересующее вас устройство и кликните на него, затем нажмите «Установить уведомления еще раз».

Как выглядят push-уведомления MobileSCAN?
Это уведомление выглядят так же, как и другие уведомления банка Citadele, но, нажав на него, вы попадаете в мобильное приложение Citadele.

Здесь вам необходимо подтвердить запрос с помощью 5-значного кода MobileSCAN или биометрии, например, отпечатка пальца.

Подтвердив запрос, вы сможете продолжить работу.
Как убедиться, что я получаю push-уведомления MobileSCAN?
Эти уведомления отправляются в момент авторизации, когда клиенту необходимо себя идентифицировать, например, при подключении к интернет-банку. После того как вы введете свой логин, мы отправим на ваше мобильное устройство уведомление MobileSCAN. Откройте его и введите свой код MobileSCAN, подтвердив тем самым, что это действительно вы.
Нашли ответ на свой вопрос?
Какой у вас тип смартфона/телефона?
Каковы наиболее распространенные, почему на смартфон iOS не приходят push-уведомления?
Уведомления от приложения Citadele могут не приходить, если их получение отключено на уровне устройства.
Для получения уведомлений подключитесь к сети Wi-Fi или сотовой сети и выполните следующие действия.
- Убедитесь, что приложение поддерживает уведомления.
- Перейдите в меню «Настройки» (Settings) > «Уведомления» (Notifications), выберите приложение Citadele и включите уведомления.

Убедитесь также, что в вашем устройстве отключен режим «Не беспокоить» (Do Not Disturb). Перейдите в меню «Настройки» (Settings) > «Не беспокоить» (Do Not Disturb), чтобы отключить его вручную.

Нашли ответ на свой вопрос?
Уведомление об использовании файлов «cookie»
На домашней странице мы используем собственные файлы «cookie» и файлы «cookie» третьих лиц. Для необходимых файлы «cookie», с помощью которых мы заботимся о работоспособности и безопасности, нам нужно ваше согласие. Для статистических, аналитических и маркетинговых файлов «cookie» нам необходимо ваше согласие, чтобы обеспечить удобное использование онлайн-услуг и предложить вам интересующее ас содержание, учитывая ваши привычки. Вы можете дать своё согласие на использование этих файлов «cookie» нажав «Согласиться», а также в любой момент отказаться или настроить файлы «cookie», нажав на ссылку «Настройки файлов «cookie»». Узнайте больше в Правилах использования файлов «cookie».
Об использовании кредитных маркетинговых файлов «cookie»
На домашней странице мы используем собственные файлы “cookie” и файлы “cookie” третьих лиц. Необходимые файлы “cookie”, которые используются для работоспособности и безопасности, не требуют вашего согласия. Для использования кредитных маркетинговых файлов cookie нам необходимо ваше согласие, чтобы предлагать вам кредитные услуги, которые вам интересны, в зависимости от ваших привычек. Вы можете согласиться с этим использованием файлов cookie, нажав кнопку «Согласиться», и вы можете отменить или изменить это в любое время, перейдя по следующей ссылке «Настройки файлов cookie». Узнайте больше в правилах использования файлов “cookie”.
Как можно узнать, что push-уведомление получено в iOS (Objective-C)?
Как можно узнать, что push-уведомление получено в iOS (Objective-C)? Например, в android существует метод: onMessageReceived из com.google.android.gms.gcm.GcmListenerService. А в Objective-C — как это делается?
Отслеживать
задан 10 ноя 2016 в 12:14
11 1 1 бронзовый знак
10 ноя 2016 в 12:18
10 ноя 2016 в 13:04
давайте вы все таки уточните, вам надо в приложении знать, что пришел пуш, или где то вне приложения?
10 ноя 2016 в 14:04
Нужно, чтобы на удаленный сервер приходила информация о том, что сообщение с определенным id — доставлено.
10 ноя 2016 в 18:59
тогда ответ ниже подходит
11 ноя 2016 в 13:40
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
На iOS нет возможности узнать о статусе Push-уведомления, к сожалению.
Однако, ты можешь добавить логики -didReceiveRemoteNotification: и -didFinishLaunchingWithOptions: , чтобы на сервер уходили данные о том, что сообщение получено.
Отслеживать
ответ дан 10 ноя 2016 в 13:02
Andrey Oshev Andrey Oshev
153 9 9 бронзовых знаков
- ios
- objective-c
- apple
- push-уведомления
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Руководство. Настройка приложения iOS для работы с Центрами уведомлений Azure
В этом учебнике показано, как настроить Центры уведомлений Azure и учетные данные для отправки push-уведомлений на устройство iOS через Службу push-уведомлений Apple (APNS).
Выполнение действий из этого учебника является предварительным условием для последующих учебников Objective C и Swift для iOS и охватывает приведенные ниже шаги.
- Создание файла запроса на подписывание сертификата.
- Запрос приложения для работы с push-уведомлениями.
- Создание профиля обеспечения для приложения.
- Создание центра уведомлений.
- Добавление данных об APNS в центр уведомлений.
Предварительные требования
Для работы с этим учебником необходима активная учетная запись Azure. Если ее нет, можно создать бесплатную пробную учетную запись всего за несколько минут. Дополнительные сведения см. в разделе Бесплатная пробная версия Azure.
Вам также понадобится следующее:
- активная учетная запись разработчика Apple;
- компьютер Mac с Xcode, а также действительный сертификат разработчика, установленный в цепочку ключей;
- устройство iPhone или iPad под управлением iOS 10 или более поздней версии;
- регистрация физического устройства на портале Apple и настройка связи с сертификатом.
Обязательно ознакомьтесь со статьей Что такое Центры уведомлений Azure?, если вы не знакомы с этой службой.
Центр уведомлений будет настроен на использование только режима проверки подлинности в песочнице. Вы не должны использовать этот режим проверки подлинности для производственных рабочих нагрузок.
Создание файла запроса на подписывание сертификата
Служба push-уведомлений Apple (APNS) использует сертификаты для аутентификации push-уведомлений. Следуйте приведенным указаниям, чтобы создать сертификата push-уведомлений, необходимый для отправки и получения уведомлений. Дополнительные сведения об этих понятиях см. в официальной документации по Службе push-уведомлений Apple.
Создайте файл запроса на подписывание сертификата (CSR), используемый Apple для создания подписанного сертификата push-уведомлений.

- На компьютере Mac запустите средство Keychain Access. Его можно запустить из папки Служебные программы или Другое на панели запуска.
- Нажмите Связка ключей, разверните Помощник по сертификатам, а затем выберите Запросить сертификат в центре сертификации.
Примечание По умолчанию при осуществлении доступа к цепочке ключей выбирается первый элемент списка. Это может вызвать проблемы, если у вас открыта категория сертификатов и центр сертификации Apple Worldwide Developer Relations не указан в списке первым. Прежде чем создавать CSR (запрос на подписывание сертификата), убедитесь, что выбран элемент, не являющийся ключом, или ключ центра сертификации Apple Worldwide Developer Relations.

При этом CSR-файл сохраняется в выбранном месте. Расположением по умолчанию является рабочий стол. Запомните расположение, выбранное для файла.Теперь вам нужно зарегистрировать приложение в Apple, включить push-уведомления и передать экспортированный CSR-файл для создания сертификата push-уведомлений.
Регистрация приложения для работы с push-уведомлениями
Чтобы отправлять push-уведомления в приложение iOS, зарегистрируйте приложение в системе Apple, а также зарегистрируйте его для получения push-уведомлений.
- Если вы еще не зарегистрировали свое приложение, перейдите на портал подготовки iOS в центре разработчиков Apple. Войдите на портал с помощью идентификатора Apple ID и выберите Identifiers (Идентификаторы). Затем выберите + , чтобы зарегистрировать новое приложение.

- На экране Register a New Identifier (Зарегистрировать новый идентификатор) выберите переключатель App IDs (Идентификаторы приложений). Затем выберите Continue (Продолжить).

- Обновите следующие три значения для нового приложения и нажмите кнопку Continue (Продолжить).
- Описание: Введите описательное имя для приложения.
- Bundle ID (Идентификатор пакета). Введите идентификатор пакета в форму Organization Identifier.Product Name (Идентификатор организации.Имя продукта), как описано в руководстве по распространению приложения. Значения Organization Identifier (Идентификатор организации) и Product Name (Имя продукта) должны соответствовать идентификатору организации и имени продукта, указанным при создании проекта Xcode. На следующем снимке экрана значение NotificationHubs используется как идентификатор организации, а значение GetStarted — как название продукта. Убедитесь, что значение Bundle Identifier (Идентификатор пакета) совпадает со значением из проекта Xcode, чтобы в Xcode использовался правильный профиль публикации.

- Push-уведомления. Проверьте опцию Push Notifications (Push-уведомления) в разделе Capabilities (Возможности).
При этом будет создан идентификатор вашего приложения, а также запрошено подтверждение информации. Выберите Continue (Продолжить), а затем нажмите Register (Зарегистрировать), чтобы подтвердить новый идентификатор приложения.
После нажатия кнопки Register (Зарегистрировать) на странице Certificates, Identifiers & Profiles (Сертификаты, идентификаторы и профили) отобразится новый идентификатор приложения в виде элемента строки.
- На странице Certificates, Identifiers & Profiles (Сертификаты, идентификаторы и профили) в разделе Identifiers (Идентификаторы) перейдите к только что созданному элементу строки идентификатора приложения и выберите соответствующую строку, чтобы отобразить окно Edit your App ID Configuration (Изменить конфигурацию идентификатора приложения).
Создание сертификата для Центров уведомлений
С выпуском iOS 13 вы можете получать только автоматические уведомления с помощью аутентификации на основе маркеров. Если вы используете проверку подлинности на основе сертификата для учетных данных APNS, необходимо переключиться на проверку подлинности на основе маркеров.
Сертификат нужен для того, чтобы центр уведомлений мог работать с APNs. Создать его можно двумя способами:
- Создайте файл .p12, который можно отправить прямо в Центры уведомлений.
- Создайте сертификат .p8, который можно использовать для проверки подлинности на основе токена (более новый подход).
Второй вариант имеет ряд преимуществ по сравнению с подходом на основе сертификатов (см. сведения о проверке подлинности на основе маркеров безопасности (HTTP/2) для APNS). В этой статье приводятся инструкции, применимые в рамках обоих подходов.
Вариант 1. Создание сертификата .p12 push-уведомлений, который можно отправить прямо в Центры уведомлений
- Прокрутите вниз до отмеченной опции Push Notifications (Push-уведомления), а затем выберите Configure (Настроить), чтобы создать сертификат.

- Откроется окно Apple Push Notification service SSL Certificates (SSL-сертификаты службы push-уведомлений Apple). Нажмите кнопку Create Certificate (Создать сертификат) в разделе Development SSL Certificate (SSL-сертификат разработки).
Появится экран Create a new Certificate (Создать новый сертификат).
Примечание В этом учебнике используется сертификат разработки. Тот же процесс используется при регистрации сертификата производства. Убедитесь, что при отправке уведомлений используется тот же тип сертификата.
Сертификат будет скачан и сохранен в папке Файлы для загрузки.
Скачанному сертификату разработки по умолчанию задано имя aps_development.cer.
Имя вашего сертификата может отличаться, но оно будет начинаться с префикса Apple Development iOS Push Services.
Вы можете выбрать защиту сертификата с помощью пароля, но это необязательно. Нажмите кнопку ОК, если хотите обойти создание пароля. Запишите имя файла и расположение экспортируемого сертификата в формате P12. Они нужны для аутентификации с помощью APNS.
Примечание Имя файла в формате P12 и его расположение могут отличаться от изображенных в этом учебнике.
Вариант 2. Создание сертификата .p8, который можно использовать для проверки подлинности на основе маркеров безопасности
- Запишите следующие значения:
- значение App ID Prefix (Префикс идентификатора приложения) — это Team ID (Идентификатор команды);
- значение Bundle ID (Идентификатор пакета).
- Вернитесь на страницу Certificates, Identifiers & Profiles (Сертификаты, идентификаторы и профили) и щелкните Keys (Ключи). Если вы уже настроили ключ для APNs, можете повторно использовать сертификат .p8, который вы скачали после его создания. В таком случае можно пропустить шаги 3–5.
- Чтобы создать ключ, нажмите кнопку + (кнопка Create a key (Создать ключ)).
- Укажите подходящее значение в поле Key Name (Имя ключа), установите флажок Apple Push Notifications service (APNs) (Служба push-уведомлений Apple (APNs)), щелкните Continue (Продолжить) и на следующем экране нажмите кнопку Register (Зарегистрировать).
- Щелкните Download (Скачать), переместите файл с расширением .p8 (с префиксом AuthKey_ ) в защищенный локальный каталог и нажмите кнопку Готово.
Важно! Обязательно сохраните файл с расширением .p8 в безопасном месте и сохраните его резервную копию. Скачав ключ один раз, вы не сможете скачать его повторно, так как копия ключа удаляется с сервера.
-----BEGIN PRIVATE KEY----- -----END PRIVATE KEY-----
По завершении у вас должны быть следующие сведения, которые вы будете использовать для настройки центра уведомлений на основе сведений APNs:
- идентификатор команды (см. шаг 1);
- идентификатор пакета (см. шаг 1);
- идентификатор ключа (см. шаг 7);
- значение маркера, то есть значение ключа из файла с расширением .p8 (см. шаг 8).
Создание профиля обеспечения
- Вернитесь на портал подготовки iOS, выберите Certificates, Identifiers & Profiles (Сертификаты, идентификаторы и профили), нажмите Profiles (Профили) в меню слева, а затем выберите +, чтобы создать новый профиль. Откроется окно Register a New Provisioning Profile (Зарегистрировать новый профиль подготовки).
- Выберите iOS App Development (Разработка приложений для iOS) в разделе Development (Разработка) в качестве типа профиля подготовки и нажмите кнопку Continue (Продолжить).

- Затем в раскрывающемся списке App ID (Идентификатор приложения) выберите созданный идентификатор приложения и нажмите кнопку Continue (Продолжить).

- В окне Select certificates (Выбор сертификатов) выберите сертификат для разработки, используемый для подписывания кода, и нажмите кнопку Continue (Продолжить). Это не созданный сертификат push-уведомлений. Если он не существует, создайте его. Если сертификат существует, перейдите к следующему шагу. Выполните приведенные ниже действия, чтобы создать сертификат разработки, если он не существует.
- Если вы видите No Certificates are available (Нет доступных сертификатов), выберите Create Certificate (Создать сертификат).
- В разделе Software (Программное обеспечение) выберите Apple Development (Разработка Apple). Затем выберите Continue (Продолжить).
- Перейдите к экрану Create a new Certificate (Создать новый сертификат) и нажмите Choose File (Выбрать файл).
- Перейдите к сертификату Certificate Signing Request (Запрос на подпись сертификата), который вы создали ранее, выберите его, а затем нажмите Open (Открыть).
- Выберите Continue (Продолжить).
- Скачайте сертификат разработки и запомните расположение, в котором он сохранен.
- Вернитесь на страницу Certificates, Identifiers & Profiles (Сертификаты, идентификаторы и профили), нажмите Profiles (Профили) в меню слева, а затем +, чтобы создать новый профиль. Откроется окно Register a New Provisioning Profile (Зарегистрировать новый профиль подготовки).
- В окне Select certificates (Выбор сертификатов) выберите сертификат разработки, который вы только что создали. Затем выберите Continue (Продолжить).
- Затем выберите устройства для тестирования и нажмите кнопку Continue (Продолжить).
- Наконец, выберите имя профиля в поле Provisioning Profile Name (Имя профиля подготовки) и нажмите кнопку Generate (Создать).

- После создания нового профиля подготовки выберите Download (Скачать). Запомните расположение, в котором он сохранен.
- Перейдите в расположение профиля подготовки и дважды щелкните его, чтобы установить его на компьютере разработки Xcode.
Создание концентратора уведомлений
В этом разделе показано, как создать центр уведомлений и настроить проверку подлинности с помощью APNS, используя ранее созданный сертификат push-уведомлений (файл .p12) или проверку подлинности на основе маркеров безопасности. Если вы хотите использовать уже созданный центр уведомлений, перейдите к шагу 5.
- Войдите на портал Azure.
- Выберите Все службы в меню слева и щелкните Центры уведомлений в разделе Мобильный. Щелкните значок звездочки рядом с именем службы, чтобы добавить ее в раздел Избранное в меню слева. После добавления Центров уведомлений в Избранное выберите их.

- На странице Центры уведомлений выберите Добавить на панели инструментов.

- На странице Центры уведомлений выполните следующие действия:
- Введите имя в поле Центр уведомлений.
- Введите имя в поле Создать пространство имен. Пространство имен содержит один или несколько центров уведомлений.
- Выберите значение в раскрывающемся списке Расположение. Это значение определяет расположение, в котором создается центр уведомлений.
- Создайте группу ресурсов или выберите имеющуюся в поле Группа ресурсов.
- Нажмите кнопку создания.


- Последовательно выберите Уведомления (значок колокольчика) и Перейти к ресурсу. Вы также можете обновить список на странице Центры уведомлений и выбрать свой центр.
- Выберите Политики доступа в списке. Обратите внимание, что станут доступны две строки подключения. Они потребуются позже для обработки push-уведомлений.
Важно! Не используйте в приложении политику DefaultFullSharedAccessSignature. Этот параметр можно использовать только в серверной части.
Добавление данных об APNS в центр уведомлений
В разделе Notification Services выберите Apple (APNS) , а затем выполните действия в зависимости от способа, выбранного ранее на этапе создания сертификата для Центров уведомлений.
Используйте режим Рабочая среда или Режим приложения, только если push-уведомления нужно отправлять пользователям, которые приобрели приложение в магазине.
Вариант 1. Использование сертификата .p12 для push-уведомлений

- Выберите Сертификат.
- Щелкните значок файла.
- Выберите экспортированный ранее файл с расширением .p12, а затем нажмите Open (Открыть).
- При необходимости укажите пароль.
- Выберите режим Песочница.
- Щелкните Сохранить.
Вариант 2. Использование проверки подлинности на основе маркеров безопасности
- Выберите Токен.
- Введите следующие значения, которые вы получили ранее:
- идентификатор ключа;
- идентификатор пакета;
- идентификатор команды;
- токен.
- Выберите Песочница.
- Щелкните Сохранить.
Вы добавили данные об APNS в центр уведомлений. У вас также есть строки подключения, необходимые для регистрации приложения и отправки push-уведомлений.
Дальнейшие действия
В рамках этого учебника вы создали и настроили центр уведомлений в Azure, а также настроили его для отправки уведомлений в приложение через Службу push-уведомлений Apple (APNS). Далее мы создадим пример приложения для iOS и интегрируем пакет средств разработки Центров уведомлений Azure, чтобы он мог получать push-уведомления, отправленные через портал Azure. Перейдите к следующему учебнику в зависимости от выбранного языка:
Руководство по работе с Apple Push Notification Service

Статья представляет собой вольный перевод руководства по работе с Apple Push Notification Service сайта raywenderlich.com и некоторые мои дополнения.
iOS-приложения не могут долгое время находиться в фоновом режиме. В целях сохранения заряда батареи приложениям, работающим в фоне, разрешено выполнять ограниченный набор действий.
Но что если происходит что-то интересное и вы хотите сообщить об этом пользователям, даже если ваше приложение у них не запущено?
Например, пользователь получил ответ в Твиттере, или его любимая команда выиграла игру, или его обед готов. Так как приложение не запущено, оно не может проверить и получить эти данные.
К счастью, корпорация Apple предусмотрела решение этой проблемы. Вместо того, чтобы беспрерывно проверять события или производить какие-либо действия в фоновом режиме, вы можете создать серверную сторону приложения, которая будет выполнять эти действия.
А когда наступит интересующее событие, серверная сторона сможет отправить приложению push-уведомление! Абсолютно любое push-уведомление может выполнять следующие три действия:
- Показать короткое текстовое сообщение.
- Воспроизвести короткий звуковой сигнал.
- Установить число на бейдже иконки приложения.
Краткий обзор
Схема работы механизма push-уведомлений:

После установки приложения появится всплывающее сообщение с подтверждением принятия push-уведомлений.
- iOS запрашивает у сервера Apple Push Notification Service (APNS) токен девайса.
- Приложение получает токен девайса. Можно считать, что токен – это адрес для отправки push-уведомлений.
- Приложение отправляет токен девайса на ваш сервер.
- Когда произойдёт какое-либо событие для вашего приложения, сервер отправит push-уведомление в APNS.
- APNS отправит 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.
Анатомия push-уведомлений
Ваш сервер ответственный за создание сообщений для push-уведомлений. Поэтому полезно знать, как эти сообщения выглядят.
Push-уведомление — это короткое сообщение, состоящее из токена девайса, полезной нагрузки (payload) и ещё некоторой информации. Полезная нагрузка — это актуальные данные, которые будут отправляться на девайс.
Ваш сервер должен преобразовать полезную нагрузку в JSON-словарь. Полезная нагрузка для простого push-сообщения выглядит следующим образом:
Блок, ограниченный фигурными скобками содержит словарь, который состоит из пар «ключ-значение» (так же, как и в 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-сервер не будет тратиться на переносы на новую строку и пробелы, а сгенерирует что-то наподобие этого:
Такое представление менее читаемо, однако предоставляет достаточно места для более ценной информации. APNS отклонит push-уведомления, чьи размеры превышают 256 байт.
Понимание push-уведомлений

Они не надёжны! Нет гарантий, что push-уведомления будут доставлены, даже если APNS примет их.
Как только ваш сервер сформировал push-уведомление, он безответно отправляет его в APNS. Нет способа узнать статус доставки уведомления конечному пользователю после отправки. Время доставки может варьироваться от нескольких секунд до получаса.
Кроме этого, у пользователей i-девайсов может не быть возможности получать push-уведомления всё время. Например, рядом нет Wi-Fi сети с доступом в интернет либо девайс может быть вообще выключен.
APNS будет пытаться доставить последнее отправленное уведомление, когда девайс станет доступен для приёма. Но эти попытки ограничены по времени. После тайм-аута push-уведомление будет потеряно навсегда!

Они могут быть дорогими! Добавить push-функционал в приложение довольно просто и недорого, если вы владеете данными. Однако если у вас много пользователей либо необходимо запрашивать данные, то затраты резко возрастают.
К примеру, вы без проблем сможете оповестить пользователей об изменении RSS-ленты, потому что вы контролируете ленту и знаете, когда будут внесены изменения — когда обновится контент на сайте — ваш сервер мгновенно отправит уведомление.
Но что если ваше приложение — это RSS-читалка, позволяющая пользователям вносить URL-адреса своих лент? В этом случае вам необходимо придумать механизм слежения за обновлением добавленных лент.
На практике это означает, что вашему серверу нужно постоянно проверять ленты на изменение. Если у вас много пользователей, то возможно, придётся установить дополнительные сервера для обработки всех процессов и поддержки стабильной пропускной способности. Для таких приложений, как RSS-читалка, реализация push-функционала может стать довольно затратной и не представлять ценности для вас.
Ладно, хватит теории. Настало время изучить процесс реализации всех этих push-вещей. Но до того, как приступать к самому «вкусному» — программированию! — нужно выполнить несколько скучных настроек на iOS Provisioning Portal. Что ж, давайте сделаем их настолько быстро, насколько это возможно.
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-уведомления не смогут приходить в ваше приложение.
Генерация 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».
Создание App ID и SSL-сертификата
Для начала создадим новый 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: выберите ваш девайс(ы)
Нажмите «Submit» и profile будет сгенерирован. У нового profile будет установлен статус «Pending». Перезагрузите страницу и увидите, что статус изменился на «Active». Теперь вы можете скачать provisioning profile (файл с названием «PushChat.mobileprovision»).
Добавьте provisioning profile в Xcode перетянув файл на иконку IDE либо кликнув на файл два раза.
Если ваше приложение готово к релизу, то вам необходимо повторить описанный выше процесс для создания Ad Hoc или App Store distribution profile.
Простенькое приложение
Предыдущие действия не были по-настоящему захватывающими, но они обязательны для выполнения. Я хотел в деталях показать, как сгенерировать сертификат, потому что такие вещи разработчик делает не каждый день, а без них 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»
После создания проекта, откройте PCAppDelegate.m. Измените метод didFinishLaunchingWithOptions следующим образом:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions < // Для iOS 7 и ниже [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; // Для iOS 8 и выше // [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; // [[UIApplication sharedApplication] registerForRemoteNotifications]; return YES; >
Вызов registerForRemoteNotificationTypes сообщает iOS, что это приложение хочет получать push-уведомления.
Соберите и запустите приложение. Для этого необходимо использовать девайс, потому что симулятор не поддерживает push-уведомления. Xcode автоматически выберет новый provisioning profile. Если во время запуска приложения произошла ошибка, убедитесь, что в Code Signing Identity выбран правильный profile.
Когда запуститься приложение, появится сообщение с подтверждением принятия push-уведомлений.

Приложение запросит разрешение только один раз. Если пользователь нажмёт «OK», push-уведомления будут приходить, если «Запретить» — не будут. Своё решение можно изменить в настройках.

Название вашего приложения будет добавлено в настройки push-уведомлений. Здесь пользователь может включить или отключить push-уведомления для вашего приложения, а также индивидуально настроить бейджи, звуки и сообщения.

Ваше приложение может определить, какие типы push-уведомлений включены:
UIRemoteNotificationType enabledTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
Существует ещё одна вещь, которую вы должны добавить в приложение для того, чтобы иметь возможность получать push-уведомления. Добавьте следующий код в PCAppDelegate.m:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken < NSLog(@"My token is: %@", deviceToken); >- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
Когда ваше приложение регистрируется на приём push-уведомлений, оно пытается получить токен девайса. Это 32-байтовый уникальный номер, который однозначно определяет ваш девайс. Токен девайса можно сравнить с адресом, на который будут приходить push-уведомления.
После запуска приложения на консоли Xcode отобразиться токен вашего девайса:
Токен — это непрозрачная двоичная структура данных, которая представляет собой объект типа NSData. Для наших целей достаточно знать 32-байтовый токен девайса. Токен можно представить в виде 64 шестнадцатеричных символов. Мы будем использовать именно такой формат.
Если запустить приложение на симуляторе, то вызовется метод didFailToRegisterForRemoteNotificationsWithError:, который выведет ошибку с информацией о том, что симулятор не поддерживает push-уведомления.
Мы закончили с приложением. Теперь давайте опробуем push-уведомления в действии!
Отправка push-уведомления
Как было описано ранее, для отправки push-уведомлений необходимо настроить сервер. Но для тестирования воспользуемся приложением для Mac OS PushMeBaby, которое также можно скачать с сервиса self.deviceToken = @»564f77d3 c1d06866 77a907d5 31d0450a 9cb552ec 5e2373e5 f2cc2c20 ff013232″;
Добавляем полезную нагрузку, о которой говорилось ранее (обязательно экранируем кавычки):
self.payload = ">";
И задаём имя добавленного в проект SSL-сертификата:
self.certificate = [[NSBundle mainBundle] pathForResource:@"aps_development" ofType:@"cer"];

Теперь запускаем приложение и нажимаем кнопку Push. В течении нескольких секунд вы должны получить push-уведомление.
Со стилем «Баннер» push-уведомление выглядит следующим образом:

Со стилем «Напоминание» более привычно:

Замечание. Уведомление не отобразится, если приложение запущено и активно на девайсе. Однако полезная нагрузка придёт в приложение и её можно обработать с помощью метода didReceiveRemoteNotification:
- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
