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

45

Upload: devday

Post on 11-Apr-2017

523 views

Category:

Software


2 download

TRANSCRIPT

Интеграция 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

[email protected]