«Интеграция push-уведомлений в Яндекс.Браузер под ios»,...
Post on 11-Apr-2017
523 Views
Preview:
TRANSCRIPT
Проблема
�Есть пользователи, у которых установлен Яндекс.Браузер, но не самая последняя его версия
�В Браузере есть фичи, о которых хочется рассказать пользователям
4
План
1. Способы решения
2. Коротко о push-уведомлениях
3. Постановка задачи
4. Опыт интеграции в Яндекс.Браузер
5. Резюме
5
Способы решения
�Поллинг - запрос описания новых фичей/версий приложения со стороны мобильного приложения к нашему серверу
�Автообновление приложений - фича iOS, позволяющая не заботиться об обновлениях приложений, которую можно включить/выключить в приложении “Настройки”
�Push-уведомления
6
Виды Push-уведомлений
Бывают двух видов:
1. Обычные - текст, звук, бейдж
2. Silent - запуск фоновой задачи
9
Запрос разрешения на доставку уведомлений
Системный запрос не поддается кастомизации (нельзя даже указать UsageDescription в Info-plist’е, как для сбора данных о локации)
11
Влияние на батарейку устройства
Для каждого push-уведомления можно указать свой приоритет:
�Срочно - уведомление будет доставлено мгновенно (недоступно для silent уведомлений)
�Не очень срочно - уведомление будет доставлено тогда, когда Apple решит, что это не будет сильной нагрузкой на батарейку
12
Сервис обратной связи (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
Что нужно сделать
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
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
top related