SlideShare a Scribd company logo
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
Интеграция
push-уведомлений
в iOS-приложение
Юрий Музюкин, разработчик
Проблема
Проблема
Есть пользователи, у которых установлен Яндекс.Браузер, но
не самая последняя его версия
В Браузере есть фичи, о которых хочется рассказать
пользователям
4
План
1. Способы решения
2. Коротко о push-уведомлениях
3. Постановка задачи
4. Опыт интеграции в Яндекс.Браузер
5. Резюме
5
Способы решения
Поллинг - запрос описания новых фичей/версий приложения
со стороны мобильного приложения к нашему серверу
Автообновление приложений - фича iOS, позволяющая не
заботиться об обновлениях приложений, которую можно
включить/выключить в приложении “Настройки”
Push-уведомления
6
Push-уведомления
Уведомление пользователя о новом контенте
8
Виды Push-уведомлений
Бывают двух видов:
1. Обычные - текст, звук, бейдж
2. Silent - запуск фоновой задачи
9
Внешний вид
Внешний вид push-уведомления
настраивает пользователь
10
Запрос разрешения на доставку уведомлений
Системный запрос не поддается
кастомизации (нельзя даже указать
UsageDescription в Info-plist’е, как для
сбора данных о локации)
11
Влияние на батарейку устройства
Для каждого push-уведомления можно указать свой приоритет:
Срочно - уведомление будет доставлено мгновенно
(недоступно для silent уведомлений)
Не очень срочно - уведомление будет доставлено тогда, когда
Apple решит, что это не будет сильной нагрузкой на батарейку
12
Как это работает
13
Сервис обратной связи (feedback service)
Предоставляет список токенов устройств, доставка на
которые стабильно неуспешна
Должен опрашиваться ежедневно, чтобы больше не посылать
уведомления на эти устройства
14
Ограничения Push-уведомлений
Размер сообщения ограничен - 2 KB (iOS 7 и ниже - 256 байт)
Уведомление может быть не доставлено
Уведомления могут схлопываться (coalescing)
Silent уведомления перестанут приходить, если пользователь
явно закрыл приложение
15
Push-уведомления
+ Уведомляют пользователя о новом контенте
+ Имеют внешний вид, настраиваемый пользователем
+ Заботятся о батарейке устройства, если правильно их
использовать
− Системный запрос на разрешение доставки не поддается
кастомизации
− Требуют усилий при реализации: код приложения + код
сервера
16
Постановка задачи
Чего хотим
Уведомлять пользователя о новых версиях, если он давно не
обновлял Браузер
Рассказывать пользователям о новых фичах в приложении
Делать это ненавязчиво (т.е. только один раз и только
релевантным пользователям)
18
Решение для серверной части
Имеется аккаунт в Pushwoosh -
сторонний сервис отправки push-
уведомлений
19
Что такое Pushwoosh
+ Предоставляет гибкую настройку фильтров для отправки
уведомлений
+ Умеет отсылать уведомления на iOS, Android, Windows Phone
и т.д.
+ Можно ограничить отправку только на тестовые устройства
− Требует интеграции SDK с закрытым кодом
20
Что уже есть на клиенте
В Браузере уже есть фичи, которые используют push-
уведомления
21
Синхронизация данных Push-to-Call
Синхронизация
При обновлении закладок, вкладок и табло на десктопе на
мобильные устройства отправляются push-уведомления с
данными для синхронизации
22
Push-to-Call
Клик на телефонный номер приводит к отправке на телефон
push-уведомления с предложением набрать этот номер
23
Задача
Уведомлять пользователей о новых версиях приложения и
новых фичах
Использовать Pushwoosh для отправки уведомлений
Не сломать при этом Push-to-Call и синхронизацию
24
Интеграция push-
уведомлений в
Яндекс.Браузер под iOS
Что нужно сделать
1. Настроить тестовое и боевое окружения
2. Определиться, каким образом запросить разрешение на
доставку уведомлений
3. Научиться различать push-уведомления для разных фичей
4. Приготовиться к получению уведомлений в произвольный
момент времени
5. Убедиться, что приложение проинициализировано
6. Обработать уведомление
26
1. Настроить тестовое и боевое окружения
2. Определиться, каким образом запросить разрешение на
доставку уведомлений
3. Научиться различать push-уведомления для разных фичей
4. Приготовиться к получению уведомлений в произвольный
момент времени
5. Убедиться, что приложение проинициализировано
27
Provisioning Profile
Для тестирования push-уведомлений нужен Provisioning
Profile с явным App ID
Девелоперское окружение предполагает CI с несколькими
сборками, каждая со своим Bundle ID (а, значит, и App ID)
28
Данные в Pushwoosh
Для работы Pushwoosh нужно предоставить:
APNs-сертификаты с соответствующими ключами
Список APNs-token’ов тестовых устройств
Контент самих уведомлений
29
1. Настроить тестовое и боевое окружения
2. Определиться, каким образом запросить разрешение на
доставку уведомлений
3. Научиться различать push-уведомления для разных фичей
4. Приготовиться к получению уведомлений в произвольный
момент времени
5. Убедиться, что приложение проинициализировано
30
Запрос разрешения у пользователя
31
Запрос разрешения у пользователя
32
1. Настроить тестовое и боевое окружения
2. Определиться, каким образом запросить разрешение на
доставку уведомлений
3. Научиться различать push-уведомления для разных фичей
4. Приготовиться к получению уведомлений в произвольный
момент времени
5. Убедиться, что приложение проинициализировано
33
Диспетчеризация push-уведомлений
Уведомления для синхронизации, Push-to-Call и
информационные должны по-разному обрабатываться
34
Диспетчеризация push-уведомлений
Например, можно добавлять в тело (payload) каждого
уведомления специальный идентификатор, по которому
определяется его обработчик
Payload:
35
{
"aps" : { "alert" : "Alert message" },
"type" : "update notification"
}
Диспетчеризация push-уведомлений
Специального идентификатора в наших нотификациях нет
Payload’ы разных уведомлений имеют разный набор полей
Диспетчеризацию проводим на основе анализа полей в
payload’е
Легко написать тесты
36
1. Настроить тестовое и боевое окружения
2. Определиться, каким образом запросить разрешение на
доставку уведомлений
3. Научиться различать push-уведомления для разных фичей
4. Приготовиться к получению уведомлений в произвольный
момент времени
5. Убедиться, что приложение проинициализировано
37
Момент получения push-уведомления
Нужно позаботиться о правильной обработке уведомления
в произвольный момент времени
Приложение может быть в любом состоянии:
Запущено, но в фоне
Запущено и активно
Не запущено
38
Приложение уже запущено
Если приложение в фоне:
Убедиться, что приложение полностью восстановлено
Сложно написать тесты
Если приложение активно:
Убедиться, что мы не помешаем пользователю
Легко написать тесты
39
1. Настроить тестовое и боевое окружения
2. Определиться, каким образом запросить разрешение на
доставку уведомлений
3. Научиться различать push-уведомления для разных фичей
4. Приготовиться к получению уведомлений в произвольный
момент времени
5. Убедиться, что приложение проинициализировано
40
Запуск приложения
Прежде, чем обрабатывать уведомление, нужно позаботиться о
том, чтобы приложение было должным образом
проинициализировано
41
Запуск приложения
Яндекс.Браузер основан на Chromium
Его полная загрузка занимает довольно много времени
Часть этой загрузки сделана асинхронной
Сложно написать тесты
42
Резюме
Интеграция Push-уведомлений в приложение
Снабжаем CI нужными Provisioning Profile и сертификатами
Объясняем пользователю, зачем в приложении уведомления
Явно выделяем модуль диспетчеризации уведомлений в
разные обработчики
Помним о произвольности времени получения push-
уведомления
Синхронизируем запуск приложения и обработку уведомления
Пишем тесты, чтобы выявлять ошибки как можно раньше
44
45
Юрий Музюкин
Разработчик
Спасибо за внимание
+7 (913) 744 96 35
y.muzyukin@yandex.com

More Related Content

PDF
Push-уведомления для разработчика и пользователя
PPSX
диплом гаврилов
PPSX
Операционная система Windows
PPT
попов с.а сравнение Windows 7 и 8
ODP
сравнение Windows 7 и windows 8.1(заварницын)
PDF
Иван Ямщиков — Социальная экономика. Как_дружба_с_графами_может_помочь_вашему...
PPTX
Push уведомления
Push-уведомления для разработчика и пользователя
диплом гаврилов
Операционная система Windows
попов с.а сравнение Windows 7 и 8
сравнение Windows 7 и windows 8.1(заварницын)
Иван Ямщиков — Социальная экономика. Как_дружба_с_графами_может_помочь_вашему...
Push уведомления

Similar to «Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин (13)

PPTX
Dive into Push Notifications
PDF
«Web push — новый канал коммуникации от Apple и Google». Вебинар WebPromoExpe...
PPTX
Chrome push notifications. Анатомия и разработка
PPTX
WebCamp:Front-end Developers Day. Александр Михайленко "Обзор библиотек и кан...
PDF
Push-уведомления в Admixer
PDF
Кирилл Гаврилюк, Microsoft
PPTX
Push notifications Зачем и почему?
PDF
Бекэнд для push-уведомлений своими руками
PDF
Юрий Василевский — Сервис пуш-сообщений Яндекса
PDF
Azure Mobile Backend
PDF
AppMetrica и Auto.ru: +10% к конверсиям бесплатно
PDF
iOS 10 для вашего бизнеса
PDF
DevCon School. Advaced Cloud Scenarios
Dive into Push Notifications
«Web push — новый канал коммуникации от Apple и Google». Вебинар WebPromoExpe...
Chrome push notifications. Анатомия и разработка
WebCamp:Front-end Developers Day. Александр Михайленко "Обзор библиотек и кан...
Push-уведомления в Admixer
Кирилл Гаврилюк, Microsoft
Push notifications Зачем и почему?
Бекэнд для push-уведомлений своими руками
Юрий Василевский — Сервис пуш-сообщений Яндекса
Azure Mobile Backend
AppMetrica и Auto.ru: +10% к конверсиям бесплатно
iOS 10 для вашего бизнеса
DevCon School. Advaced Cloud Scenarios
Ad

More from DevDay (20)

PDF
«Bdd и реактивщина в 2ГИС», Евгений Тютюев
PDF
«Я спросил у сервера...», Илья Пастушков
PDF
Фреймворк Slot, Good Parts, Александр Бирюков
PDF
Рендеринг может больше: vue.js vs React, Андрей Солодовников
PDF
Devops-практики в разработке решений для бизнеса, Максим Пашук
PDF
Inversion of Control в деталях, Дмитрий Кожевников
PDF
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
PDF
«Велогосипед», Данил Ильиных
PDF
«Процесс создания продукта», Максим Берёзкин
PDF
«Вывод продукта на новых территориях», Елизавета Алексеенко
PDF
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
PDF
Лабиринт на Arduino, Вадим Ипполитов
PDF
«Хоба-хоба и в продакшн», Женя Пономарёв
PDF
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
PDF
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
PDF
«Тестируем веб приложения», Павел Сташевский
PDF
«Открытая веб картография», Илья Таратухин
PDF
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
PDF
Матвей Мальков «Ещё один поиск контактов на Android»
PDF
Олег Годовых «Страх и ненависть в Event Bus»
«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Я спросил у сервера...», Илья Пастушков
Фреймворк Slot, Good Parts, Александр Бирюков
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Devops-практики в разработке решений для бизнеса, Максим Пашук
Inversion of Control в деталях, Дмитрий Кожевников
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
«Велогосипед», Данил Ильиных
«Процесс создания продукта», Максим Берёзкин
«Вывод продукта на новых территориях», Елизавета Алексеенко
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
Лабиринт на Arduino, Вадим Ипполитов
«Хоба-хоба и в продакшн», Женя Пономарёв
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Тестируем веб приложения», Павел Сташевский
«Открытая веб картография», Илья Таратухин
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
Матвей Мальков «Ещё один поиск контактов на Android»
Олег Годовых «Страх и ненависть в Event Bus»
Ad

«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин

  • 4. Проблема Есть пользователи, у которых установлен Яндекс.Браузер, но не самая последняя его версия В Браузере есть фичи, о которых хочется рассказать пользователям 4
  • 5. План 1. Способы решения 2. Коротко о push-уведомлениях 3. Постановка задачи 4. Опыт интеграции в Яндекс.Браузер 5. Резюме 5
  • 6. Способы решения Поллинг - запрос описания новых фичей/версий приложения со стороны мобильного приложения к нашему серверу Автообновление приложений - фича iOS, позволяющая не заботиться об обновлениях приложений, которую можно включить/выключить в приложении “Настройки” Push-уведомления 6
  • 9. Виды Push-уведомлений Бывают двух видов: 1. Обычные - текст, звук, бейдж 2. Silent - запуск фоновой задачи 9
  • 10. Внешний вид Внешний вид push-уведомления настраивает пользователь 10
  • 11. Запрос разрешения на доставку уведомлений Системный запрос не поддается кастомизации (нельзя даже указать UsageDescription в Info-plist’е, как для сбора данных о локации) 11
  • 12. Влияние на батарейку устройства Для каждого push-уведомления можно указать свой приоритет: Срочно - уведомление будет доставлено мгновенно (недоступно для silent уведомлений) Не очень срочно - уведомление будет доставлено тогда, когда Apple решит, что это не будет сильной нагрузкой на батарейку 12
  • 14. Сервис обратной связи (feedback service) Предоставляет список токенов устройств, доставка на которые стабильно неуспешна Должен опрашиваться ежедневно, чтобы больше не посылать уведомления на эти устройства 14
  • 15. Ограничения Push-уведомлений Размер сообщения ограничен - 2 KB (iOS 7 и ниже - 256 байт) Уведомление может быть не доставлено Уведомления могут схлопываться (coalescing) Silent уведомления перестанут приходить, если пользователь явно закрыл приложение 15
  • 16. Push-уведомления + Уведомляют пользователя о новом контенте + Имеют внешний вид, настраиваемый пользователем + Заботятся о батарейке устройства, если правильно их использовать − Системный запрос на разрешение доставки не поддается кастомизации − Требуют усилий при реализации: код приложения + код сервера 16
  • 18. Чего хотим Уведомлять пользователя о новых версиях, если он давно не обновлял Браузер Рассказывать пользователям о новых фичах в приложении Делать это ненавязчиво (т.е. только один раз и только релевантным пользователям) 18
  • 19. Решение для серверной части Имеется аккаунт в Pushwoosh - сторонний сервис отправки push- уведомлений 19
  • 20. Что такое Pushwoosh + Предоставляет гибкую настройку фильтров для отправки уведомлений + Умеет отсылать уведомления на iOS, Android, Windows Phone и т.д. + Можно ограничить отправку только на тестовые устройства − Требует интеграции SDK с закрытым кодом 20
  • 21. Что уже есть на клиенте В Браузере уже есть фичи, которые используют push- уведомления 21 Синхронизация данных Push-to-Call
  • 22. Синхронизация При обновлении закладок, вкладок и табло на десктопе на мобильные устройства отправляются push-уведомления с данными для синхронизации 22
  • 23. Push-to-Call Клик на телефонный номер приводит к отправке на телефон push-уведомления с предложением набрать этот номер 23
  • 24. Задача Уведомлять пользователей о новых версиях приложения и новых фичах Использовать Pushwoosh для отправки уведомлений Не сломать при этом Push-to-Call и синхронизацию 24
  • 26. Что нужно сделать 1. Настроить тестовое и боевое окружения 2. Определиться, каким образом запросить разрешение на доставку уведомлений 3. Научиться различать push-уведомления для разных фичей 4. Приготовиться к получению уведомлений в произвольный момент времени 5. Убедиться, что приложение проинициализировано 6. Обработать уведомление 26
  • 27. 1. Настроить тестовое и боевое окружения 2. Определиться, каким образом запросить разрешение на доставку уведомлений 3. Научиться различать push-уведомления для разных фичей 4. Приготовиться к получению уведомлений в произвольный момент времени 5. Убедиться, что приложение проинициализировано 27
  • 28. Provisioning Profile Для тестирования push-уведомлений нужен Provisioning Profile с явным App ID Девелоперское окружение предполагает CI с несколькими сборками, каждая со своим Bundle ID (а, значит, и App ID) 28
  • 29. Данные в Pushwoosh Для работы Pushwoosh нужно предоставить: APNs-сертификаты с соответствующими ключами Список APNs-token’ов тестовых устройств Контент самих уведомлений 29
  • 30. 1. Настроить тестовое и боевое окружения 2. Определиться, каким образом запросить разрешение на доставку уведомлений 3. Научиться различать push-уведомления для разных фичей 4. Приготовиться к получению уведомлений в произвольный момент времени 5. Убедиться, что приложение проинициализировано 30
  • 31. Запрос разрешения у пользователя 31
  • 32. Запрос разрешения у пользователя 32
  • 33. 1. Настроить тестовое и боевое окружения 2. Определиться, каким образом запросить разрешение на доставку уведомлений 3. Научиться различать push-уведомления для разных фичей 4. Приготовиться к получению уведомлений в произвольный момент времени 5. Убедиться, что приложение проинициализировано 33
  • 34. Диспетчеризация push-уведомлений Уведомления для синхронизации, Push-to-Call и информационные должны по-разному обрабатываться 34
  • 35. Диспетчеризация push-уведомлений Например, можно добавлять в тело (payload) каждого уведомления специальный идентификатор, по которому определяется его обработчик Payload: 35 { "aps" : { "alert" : "Alert message" }, "type" : "update notification" }
  • 36. Диспетчеризация push-уведомлений Специального идентификатора в наших нотификациях нет Payload’ы разных уведомлений имеют разный набор полей Диспетчеризацию проводим на основе анализа полей в payload’е Легко написать тесты 36
  • 37. 1. Настроить тестовое и боевое окружения 2. Определиться, каким образом запросить разрешение на доставку уведомлений 3. Научиться различать push-уведомления для разных фичей 4. Приготовиться к получению уведомлений в произвольный момент времени 5. Убедиться, что приложение проинициализировано 37
  • 38. Момент получения push-уведомления Нужно позаботиться о правильной обработке уведомления в произвольный момент времени Приложение может быть в любом состоянии: Запущено, но в фоне Запущено и активно Не запущено 38
  • 39. Приложение уже запущено Если приложение в фоне: Убедиться, что приложение полностью восстановлено Сложно написать тесты Если приложение активно: Убедиться, что мы не помешаем пользователю Легко написать тесты 39
  • 40. 1. Настроить тестовое и боевое окружения 2. Определиться, каким образом запросить разрешение на доставку уведомлений 3. Научиться различать push-уведомления для разных фичей 4. Приготовиться к получению уведомлений в произвольный момент времени 5. Убедиться, что приложение проинициализировано 40
  • 41. Запуск приложения Прежде, чем обрабатывать уведомление, нужно позаботиться о том, чтобы приложение было должным образом проинициализировано 41
  • 42. Запуск приложения Яндекс.Браузер основан на Chromium Его полная загрузка занимает довольно много времени Часть этой загрузки сделана асинхронной Сложно написать тесты 42
  • 44. Интеграция Push-уведомлений в приложение Снабжаем CI нужными Provisioning Profile и сертификатами Объясняем пользователю, зачем в приложении уведомления Явно выделяем модуль диспетчеризации уведомлений в разные обработчики Помним о произвольности времени получения push- уведомления Синхронизируем запуск приложения и обработку уведомления Пишем тесты, чтобы выявлять ошибки как можно раньше 44
  • 45. 45 Юрий Музюкин Разработчик Спасибо за внимание +7 (913) 744 96 35 y.muzyukin@yandex.com