- Implementing Push Notifications in Flutter Apps
- Pre-requisites:
- Getting your project ready for Firebase services
- Getting your project ready for FCM
- Integrating FCM
- FCM messages
- Notification message
- Data message
- Types of notifications
- Background notifications
- Foreground notifications
- Send a test message
- Firebase console
- Prepare to receive the message
- Android devices
- iOS devices (physical devices only)
- Postman
- Android devices
- iOS devices (physical devices only)
- Custom UI for foreground notifications
- Further reads
- Руководство по работе с Apple Push Notification Service
- Краткий обзор
- Что необходимо для push-уведомлений
- Анатомия push-уведомлений
- Понимание push-уведомлений
- Provisioning Profiles и Сертификаты
- Генерация Certificate Signing Request (CSR)
- Создание App ID и SSL-сертификата
- Создание Provisioning Profile
- Простенькое приложение
- Отправка push-уведомления
Implementing Push Notifications in Flutter Apps
Push notifications are great for driving user engagement and notifying users for updates. Firebase Cloud Messaging (FCM) is a free (yes, zero cost!) cross-platform messaging solution provided by Google. It allows you to send notifications to a customised group of users on a variety of platforms easily.
In this article I’m going to show you how to implement push notifications on both Android and iOS — if you are interested in only setting it up on one of the platforms, feel free to skip the platform-specific sections.
Pre-requisites:
- Project setup and dependencies: Flutter SDK, version 1.17.5, channel stable. We are also going to use two packages from pub.dev — firebase_messaging and overlay_support.
- Make sure you have set up and configured Firebase services in your project. If you have already set up before (e.g. using other Firebase services), you can skip the next section.
- You will need to enable Firebase Cloud Messaging and perform the steps in the “Getting your project ready for FCM” section.
- iOS only: Even if you have configured Firebase services before, you will still need to download and replace your GoogleService-Info.plist with the latest file generated by Firebase console.
Getting your project ready for Firebase services
Before you can add Firebase to your Android or iOS app, you need to create a Firebase project. After that, you can follow the steps below to set up for each platform.
- Using the Firebase Console add an Android app to your project: Download the generated google-services.json file and place it inside android/app .
- Add the google-services classpath to the [YOUR_PROJECT]/android/build.gradle file. The version numbers might be different from your current project setup.
3. Add the apply plugin to the [YOUR_PROJECT]/android/app/build.gradle file.
Using the Firebase Console add an iOS app to your project: Download the generated GoogleService-Info.plist file, open ios/Runner.xcworkspace with Xcode, and within Xcode place the file inside ios/Runner .
Getting your project ready for FCM
After you have set up your project for Firebase services, there are a few extra steps specific to setting up FCM listed below.
If you want the user to be notified in your app (via onResume and onLaunch , see below) when the user clicks on a notification in the system tray, include the following intent-filter within the tag of [YOUR_PROJECT]/android/app/src/main/AndroidManifest.xml :
- Generate the certificates required by Apple for receiving push notifications by following this guide in the Firebase docs. You can skip the section titled “Create the Provisioning Profile”.
- In Xcode, select Runner in the Project Navigator. In the Capabilities Tab turn on Push Notifications and Background Modes , and enable Background fetch and Remote notifications under Background Modes .
- Follow the steps in the “Upload your APNs certificate” section of the Firebase docs.
If you wish to make additional configurations, you may refer to the firebase_messaging documentation here.
Integrating FCM
In your Dart code, you need to import the plugin and instantiate it.
- Create a service that communicates with the Firebase messaging plugin.
2. Initialise the push notification service in your root widget.
Before we dive into showing the notifications, let’s figure out what’s inside the message received by the callbacks.
FCM messages
According to the official documentation, there are two types of messages you can send from FCM: notification messages and data messages.
Notification message
A notification message is displayed on the user’s device automatically by FCM without additional handling by the app developer. When a notification message is sent, the message will be displayed in the device tray when the app is in background.
Data message
Contrary to notification messages, a data message will not be displayed on the user’s device, unless processed with additional codes written by the app developer. This is useful for giving extra context to the app, for example, specifying the screen that opens after the user taps on the notification in the device tray. You can see an example in this tutorial.
Types of notifications
Background notifications
If the notification is sent when the app is closed, the notification will appear in the device tray with your app name, icon, and notification details. This notification is called a background notification because the notification is received in the background (the app is in the background or app is closed).
This depends on your user’s device settings, whether notifications are allowed — if they are not allowed, they will not show up in the device tray. In the code above, we call the requestNotificationPermissions method provided by Firebase messaging to show the dialog asking the user to allow notification in iOS devices (in Android it is already handled automatically).
Foreground notifications
If the notification is sent when the app is open, the notification will not appear in the device tray. Instead, we need to implement our notification widget in our app so that it is visible to the user.
Optionally, you may also handle onLaunch and onResume callbacks provided by Firebase messaging. onLaunch fires when the user opens the app from the state where the app is terminated, whereas onResume fires when the user opens the app from the state where the app is still running in the background.
Send a test message
There are two ways you can send a test message: via Firebase console or Postman (or any REST client you like).
Firebase console
The first method you can try is sending a test message from Firebase console (Cloud Messaging > New notification).
Run your app on a device and look at your debug console to get the FCM registration token:
This token uniquely identifies your device (note that it might change after you restart the device). After you have obtained the token, you can add the token into the text field and click Test.
Prepare to receive the message
We can create a class that contains our message content. Our notification message should contain a title and a body. Let’s do it:
Android devices
Background notifications: Run your app but put your app in the background while you send the test message. You should be able to see the notification appear in your device tray. Same goes to when your app is closed or terminated.
Foreground notifications: Run your app and make sure your app is in the foreground when you send the test message. Look at your debug console and see if you see an output from the onMessage callback:
You can see that both title and body of the notification are inside the notification attribute — so in your code you should extract these out so we can show them.
Check out the final section on how to show a custom notification UI.
iOS devices (physical devices only)
Since push notifications do not work on simulators (because, Apple 🤦♀), you should connect an iPhone and run the app.
Background notifications: The behaviour is identical to what you get on Android devices.
Foreground notifications: Run your app and make sure your app is in the foreground when you send the test message. Look at your debug console and see if you see an output from the onMessage callback:
You can see that both title and body of the notification are inside the aps.alert attribute — so in your code you should extract these out so you can show them.
Postman
The second method is to send a message request in Postman.
Tips: You can also import my public collection directly into Postman.
We’re going to use the POST method to https://fcm.googleapis.com/fcm/send and set the headers like this:
The FCM server key can be found under the Project credentials section at Firebase Console > Project Settings > Cloud Messaging.
And your request body should look like this:
You can find the usage of each parameter here.
Android devices
Once you fire the POST request, look at your Flutter app debug console and see if you see an output from the onMessage callback:
You can see that both the title and body of the notification are contained in the notification attribute.
iOS devices (physical devices only)
Once you fire the POST request, look at your Flutter app debug console and see if you see an output from the onMessage callback:
You can see that both the title and body of the notification are contained in the notification attribute.
Note that in the above example I’m using the legacy HTTP API, you might want to use HTTP v1 API to send from your server in production settings, you can check out the advantages and how to migrate from legacy to v1 here.
In production settings, you should send the message from your backend server via Firebase Admin SDK — more details here. If you happen to use NodeJS as the backend, check out this awesome tutorial from step 2 onwards.
Custom UI for foreground notifications
For this we use overlay_support to generate a notification widget, then we can show the widget in the onMessage callback. In the code snippet below, I use a simple notification layout to show the notification message received from FCM. Check out here for a demo on different types of notification widgets from overlay_support.
Further reads
Here are some useful links for further information:
Do you use images in your push notifications? How often do you send push notifications to your users? Let me know in the comments:)
Источник
Руководство по работе с 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-уведомление, появится сообщение, и/или будет воспроизведён звуковой сигнал, и/или обновится бейдж на иконке приложения. Пользователь может открыть приложение из уведомления. Приложение получит контент 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» можно добавить и другие поля для настройки уведомления. Например:
Теперь значение поля «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: выберите ваш девайс(ы)
Этот процесс никак не отличается от генерации любого другого 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.
Простенькое приложение
Предыдущие действия не были по-настоящему захватывающими, но они обязательны для выполнения. Я хотел в деталях показать, как сгенерировать сертификат, потому что такие вещи разработчик делает не каждый день, а без них 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 следующим образом:
Вызов registerForRemoteNotificationTypes сообщает iOS, что это приложение хочет получать push-уведомления.
Соберите и запустите приложение. Для этого необходимо использовать девайс, потому что симулятор не поддерживает push-уведомления. Xcode автоматически выберет новый provisioning profile. Если во время запуска приложения произошла ошибка, убедитесь, что в Code Signing Identity выбран правильный profile.
Когда запуститься приложение, появится сообщение с подтверждением принятия push-уведомлений.
Приложение запросит разрешение только один раз. Если пользователь нажмёт «OK», push-уведомления будут приходить, если «Запретить» — не будут. Своё решение можно изменить в настройках.
Название вашего приложения будет добавлено в настройки push-уведомлений. Здесь пользователь может включить или отключить push-уведомления для вашего приложения, а также индивидуально настроить бейджи, звуки и сообщения.
Ваше приложение может определить, какие типы push-уведомлений включены:
Существует ещё одна вещь, которую вы должны добавить в приложение для того, чтобы иметь возможность получать push-уведомления. Добавьте следующий код в PCAppDelegate.m:
Когда ваше приложение регистрируется на приём push-уведомлений, оно пытается получить токен девайса. Это 32-байтовый уникальный номер, который однозначно определяет ваш девайс. Токен девайса можно сравнить с адресом, на который будут приходить push-уведомления.
После запуска приложения на консоли Xcode отобразиться токен вашего девайса:
Токен — это непрозрачная двоичная структура данных, которая представляет собой объект типа NSData. Для наших целей достаточно знать 32-байтовый токен девайса. Токен можно представить в виде 64 шестнадцатеричных символов. Мы будем использовать именно такой формат.
Если запустить приложение на симуляторе, то вызовется метод didFailToRegisterForRemoteNotificationsWithError:, который выведет ошибку с информацией о том, что симулятор не поддерживает push-уведомления.
Мы закончили с приложением. Теперь давайте опробуем push-уведомления в действии!
Отправка push-уведомления
Как было описано ранее, для отправки push-уведомлений необходимо настроить сервер. Но для тестирования воспользуемся приложением для Mac OS PushMeBaby, которое также можно скачать с сервиса github.
Далее всё просто — открываем PushMeBaby в Xcode, добавляем в проект ранее созданный SSL-сертификат (aps_development.cer), после чего переходим к редактированию файла ApplicationDelegate.m. В методе init делаем следующие изменения:
Добавляем токен девайса, который отобразится в консоли Xcode после запуска приложения, созданного ранее:
Добавляем полезную нагрузку, о которой говорилось ранее (обязательно экранируем кавычки):
И задаём имя добавленного в проект SSL-сертификата:
Теперь запускаем приложение и нажимаем кнопку Push. В течении нескольких секунд вы должны получить push-уведомление.
Со стилем «Баннер» push-уведомление выглядит следующим образом:
Со стилем «Напоминание» более привычно:
Замечание. Уведомление не отобразится, если приложение запущено и активно на девайсе. Однако полезная нагрузка придёт в приложение и её можно обработать с помощью метода didReceiveRemoteNotification:
На этом всё. Все интересующие вас вопросы можно задать в комментариях; я постараюсь на них ответить.
Источник