4. Проблема
Есть пользователи, у которых установлен Яндекс.Браузер, но
не самая последняя его версия
В Браузере есть фичи, о которых хочется рассказать
пользователям
4
5. План
1. Способы решения
2. Коротко о push-уведомлениях
3. Постановка задачи
4. Опыт интеграции в Яндекс.Браузер
5. Резюме
5
6. Способы решения
Поллинг - запрос описания новых фичей/версий приложения
со стороны мобильного приложения к нашему серверу
Автообновление приложений - фича iOS, позволяющая не
заботиться об обновлениях приложений, которую можно
включить/выключить в приложении “Настройки”
Push-уведомления
6
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
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
33. 1. Настроить тестовое и боевое окружения
2. Определиться, каким образом запросить разрешение на
доставку уведомлений
3. Научиться различать push-уведомления для разных фичей
4. Приготовиться к получению уведомлений в произвольный
момент времени
5. Убедиться, что приложение проинициализировано
33
35. Диспетчеризация push-уведомлений
Например, можно добавлять в тело (payload) каждого
уведомления специальный идентификатор, по которому
определяется его обработчик
Payload:
35
{
"aps" : { "alert" : "Alert message" },
"type" : "update notification"
}
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