1
Deep Linking in Avito
Artyom Razinov, lead iOS developer
2
План
• Что такое диплинкинг и зачем
• Перенос логики навигации на
сервер
• Какие задачи решались
• Реализация
3
Что такое диплинкинг?
https://www.google.ru/#q=Что+такое+диплинкинг%3F
presentation://answers/search?q=Что+такое+диплинкинг%3F
4
Для чего нужны диплинки?
• Связывание сайта и мобильного
приложения
5
Open URL
Переход к размещению
нового объявления
6
Для чего нужны диплинки?
• Связывание сайта и мобильного
приложения
• Push-уведомления
7
Messenger
8
Push
Notifications
Переход к экрану чата
9
Для чего нужны диплинки?
• Связывание сайта и мобильного
приложения
• Push-уведомления
• Управление навигацией из других
источников, например, force-touch
10
Force Touch
Переход к размещению
нового объявления
11
Для чего нужны диплинки?
• Связывание сайта и мобильного
приложения
• Push-уведомления
• Управление навигацией из других
источников, например, force-touch
• Перенос логики навигации на сервер
12
Перенос логики
навигации на сервер
13Перенос логики навигации
на сервер
• Что это значит?
• Зачем это нужно?
• Примеры решенных задач
• Реализация в мобильном приложении
14
title: "Продать быстрее"
action: "app://sell/faster?id=1"
15
Эти кнопки
16
API:
status: "inactive"
Apps:
switch status {
case .inactive:
.......................
}
17API:
actions: ["activate",
"edit", "delete"]
Apps:
switch action {
case .activate:
.......................
}
18
API:
action: {
title: "Редактировать"
uri: "app://edit?id=42"
}
Apps:
handleDeepLink(uri)
19
Удачный опыт
применения
диплинкинга
(смотрите на синие кнопки
внизу, а не на девушку)
20
Отключенный
мессенджер
Пользователь отключил
возможность писать ему
сообщения
21
Платный
доступ
Тестовый регион с платным
доступом
22
Списание с
пакета
Кнопка написать ссылается
на списание из пакета
23
Обновление
данных
Объявление добавлено в
избранное
24
Обновление
данных
Кнопка написать ссылается
на мессенджер, объявление
добавлено в избранное
25
Разовая
оплата
Доступна кнопка покупки
26
Доступ
получен
Кнопка написать ссылается
на мессенджер
27Deeplinks
Deeplinks everywhere
28
Реализация
29
Универсальный механизм обработки
Диплинк
Диплинк
Диплинк
Диплинк
Диплинк
Экран
30
VIPER
Assembly
PresenterInteractor View
SomeViewControllerModule
Router
31
Как универсально
обрабатывать
диплинки?
32
VIPER
Assembly
PresenterInteractor View
SomeViewControllerModule
Router ?
33Первая реализация
DeepLinkUri: Сырая ссылка
DeepLink: Обработанная ссылка
DeepLinkOrigin: Источник
34Источник ссылки
35Первая реализация
DeepLinkUri: Сырая ссылка
DeepLink: Обработанная ссылка
DeepLinkOrigin: Источник
36DeepLink
37DeepLinkHandler
38DeepLinkHandlerFactory
39
40
41
42
43Советы
1. Слабая связанность кода
2. Разделение ответственности
3. Абстрагирование от навигации, отсутсвие побочных
эффектов со стороны системы навигации
44
Как описывать
диплинки?
45
Первое решение
46
Первое решение
47Deep Links Specification
48DeepLinksSpecification.swift
49Как описывать диплинки
1. Декларативный стиль
2. Описание в одном месте
3. Простота
50
Диплинки
на действия
51
Универсальная обратная связь
Диплинк
Диплинк
Диплинк
Диплинк
Диплинк
Экран
Экран
Экран
Экран
Экран
52
Механизм обратной
связи
53
Виды обратной связи
• Запуск и остановка прелоадера
• Показ сообщений о результатах
• Закрытие текущего экрана
• Обновление данных текущего
экрана
54
Виды обратной связи
55
InternalDeepLinkHandler
56
Настройка презентером
57
DeepLinkHandlingActions
Presenter
DeepLinkHandlerDelegateDeepLinkHandler
InternalDeepLinkHandler
58
Deep Link
Handler
Редактирование
объявления
59
Авторизация
Старт процесса
Стоп процесса
Получение данных для
редактирования
Показ экрана
Обработка модификации
данных на сервере
Завершение флоу
60
Заключение
1. Диплинкинг - это удобно
2. Диплинкинг - это реально
3. Внедрение управляемой навигации - это не только
модно, молодежно и весело, это может быть
выгодно бизнесу
61
Спасибо за внимание!
Есть вопросы?
email: arazinov@avito.ru
skype: artyom.razinov

"DeepLink’и в Avito" Артём Разинов (Avito)