SlideShare una empresa de Scribd logo
1 de 45
Descargar para leer sin conexión
Интеграция
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

Más contenido relacionado

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

Кирилл Гаврилюк, Microsoft
Кирилл Гаврилюк, MicrosoftКирилл Гаврилюк, Microsoft
Кирилл Гаврилюк, MicrosoftOntico
 
Dive into Push Notifications
Dive into Push NotificationsDive into Push Notifications
Dive into Push NotificationsIgor Khomenko
 
WebCamp:Front-end Developers Day. Александр Михайленко "Обзор библиотек и кан...
WebCamp:Front-end Developers Day. Александр Михайленко "Обзор библиотек и кан...WebCamp:Front-end Developers Day. Александр Михайленко "Обзор библиотек и кан...
WebCamp:Front-end Developers Day. Александр Михайленко "Обзор библиотек и кан...GeeksLab Odessa
 
Chrome push notifications. Анатомия и разработка
Chrome push notifications. Анатомия и разработкаChrome push notifications. Анатомия и разработка
Chrome push notifications. Анатомия и разработкаAlexandr Mikhaylenko
 
Непрерывная интеграция. Практическое применение
Непрерывная интеграция. Практическое применениеНепрерывная интеграция. Практическое применение
Непрерывная интеграция. Практическое применениеdevclub
 
Интеграция мобильных приложений с Window azure
Интеграция мобильных приложений с Window azureИнтеграция мобильных приложений с Window azure
Интеграция мобильных приложений с Window azureИлья Родин
 
Идентификация и аутентификация - встроенные функции безопасности или задачи с...
Идентификация и аутентификация - встроенные функции безопасности или задачи с...Идентификация и аутентификация - встроенные функции безопасности или задачи с...
Идентификация и аутентификация - встроенные функции безопасности или задачи с...Mikhail Vanin
 
Haker062015-myjurnal.ru
Haker062015-myjurnal.ruHaker062015-myjurnal.ru
Haker062015-myjurnal.ruVasya Pupkin
 
Push уведомления
Push уведомленияPush уведомления
Push уведомленияDmitriy Ivanov
 
UAFPUG6 - PureMVC
UAFPUG6 - PureMVCUAFPUG6 - PureMVC
UAFPUG6 - PureMVCmandrew182
 
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryUafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryMax Rozdobudko
 
IT talk Odessa. Device Hive
IT talk Odessa. Device HiveIT talk Odessa. Device Hive
IT talk Odessa. Device HiveMarina Peregud
 
2013 07-22 тз-пожилая-система
2013 07-22 тз-пожилая-система2013 07-22 тз-пожилая-система
2013 07-22 тз-пожилая-системаKonstantin Belkin
 
«Идентификация, аутентификация, авторизация – встроенные функции приложений и...
«Идентификация, аутентификация, авторизация – встроенные функции приложений и...«Идентификация, аутентификация, авторизация – встроенные функции приложений и...
«Идентификация, аутентификация, авторизация – встроенные функции приложений и...Mail.ru Group
 
Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"
Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"
Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"DataArt
 
презентация Smart uac
презентация Smart uacпрезентация Smart uac
презентация Smart uacw_harker
 
Cyber Bionics #iotconfua
Cyber Bionics #iotconfuaCyber Bionics #iotconfua
Cyber Bionics #iotconfuaAndy Shutka
 

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

Кирилл Гаврилюк, Microsoft
Кирилл Гаврилюк, MicrosoftКирилл Гаврилюк, Microsoft
Кирилл Гаврилюк, Microsoft
 
Dive into Push Notifications
Dive into Push NotificationsDive into Push Notifications
Dive into Push Notifications
 
WebCamp:Front-end Developers Day. Александр Михайленко "Обзор библиотек и кан...
WebCamp:Front-end Developers Day. Александр Михайленко "Обзор библиотек и кан...WebCamp:Front-end Developers Day. Александр Михайленко "Обзор библиотек и кан...
WebCamp:Front-end Developers Day. Александр Михайленко "Обзор библиотек и кан...
 
Chrome push notifications. Анатомия и разработка
Chrome push notifications. Анатомия и разработкаChrome push notifications. Анатомия и разработка
Chrome push notifications. Анатомия и разработка
 
Непрерывная интеграция. Практическое применение
Непрерывная интеграция. Практическое применениеНепрерывная интеграция. Практическое применение
Непрерывная интеграция. Практическое применение
 
Интеграция мобильных приложений с Window azure
Интеграция мобильных приложений с Window azureИнтеграция мобильных приложений с Window azure
Интеграция мобильных приложений с Window azure
 
Идентификация и аутентификация - встроенные функции безопасности или задачи с...
Идентификация и аутентификация - встроенные функции безопасности или задачи с...Идентификация и аутентификация - встроенные функции безопасности или задачи с...
Идентификация и аутентификация - встроенные функции безопасности или задачи с...
 
Haker062015-myjurnal.ru
Haker062015-myjurnal.ruHaker062015-myjurnal.ru
Haker062015-myjurnal.ru
 
Push уведомления
Push уведомленияPush уведомления
Push уведомления
 
UAFPUG6 - PureMVC
UAFPUG6 - PureMVCUAFPUG6 - PureMVC
UAFPUG6 - PureMVC
 
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryUafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
 
PureMVC and Papervision
PureMVC and PapervisionPureMVC and Papervision
PureMVC and Papervision
 
IT talk Odessa. Device Hive
IT talk Odessa. Device HiveIT talk Odessa. Device Hive
IT talk Odessa. Device Hive
 
2013 07-22 тз-пожилая-система
2013 07-22 тз-пожилая-система2013 07-22 тз-пожилая-система
2013 07-22 тз-пожилая-система
 
«Идентификация, аутентификация, авторизация – встроенные функции приложений и...
«Идентификация, аутентификация, авторизация – встроенные функции приложений и...«Идентификация, аутентификация, авторизация – встроенные функции приложений и...
«Идентификация, аутентификация, авторизация – встроенные функции приложений и...
 
Windows3.1
Windows3.1Windows3.1
Windows3.1
 
Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"
Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"
Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"
 
1zapuskprogrammyi
 1zapuskprogrammyi 1zapuskprogrammyi
1zapuskprogrammyi
 
презентация Smart uac
презентация Smart uacпрезентация Smart uac
презентация Smart uac
 
Cyber Bionics #iotconfua
Cyber Bionics #iotconfuaCyber Bionics #iotconfua
Cyber Bionics #iotconfua
 

Más de DevDay

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

Más de DevDay (20)

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

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

  • 1.
  • 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