61
1 Deep Linking in Avito Artyom Razinov, lead iOS developer

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

Embed Size (px)

Citation preview

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

1

Deep Linking in AvitoArtyom Razinov, lead iOS developer

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

2План

• Что такое диплинкинг и зачем

• Перенос логики навигации на сервер

• Какие задачи решались

• Реализация

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

3

Что такое диплинкинг?https://www.google.ru/#q=Что+такое+диплинкинг%3F

presentation://

presentation://answers/search?q=Что+такое+диплинкинг%3F

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

4Для чего нужны диплинки?• Связывание сайта и мобильного приложения

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

5

Open URLПереход к размещению

нового объявления

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

6Для чего нужны диплинки?• Связывание сайта и мобильного приложения

• Push-уведомления

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

7Messenger

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

8

Push NotificationsПереход к экрану чата

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

9Для чего нужны диплинки?• Связывание сайта и мобильного приложения

• Push-уведомления

• Управление навигацией из других источников, например, force-touch

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

10

Force TouchПереход к размещению

нового объявления

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

11Для чего нужны диплинки?• Связывание сайта и мобильного приложения

• Push-уведомления

• Управление навигацией из других источников, например, force-touch

• Перенос логики навигации на сервер

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

12

Перенос логики навигации на сервер

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

13Перенос логики навигации на сервер

• Что это значит?

• Зачем это нужно?

• Примеры решенных задач

• Реализация в мобильном приложении

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

14title: "Продать быстрее" action: "app://sell/faster?id=1"

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

15

Эти кнопки

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

16API: status: "inactive"

Apps: switch status { case .inactive: ....................... }

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

17API: actions: ["activate", "edit", "delete"]

Apps: switch action { case .activate: ....................... }

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

18API: action: { title: "Редактировать" uri: "app://edit?id=42" }

Apps: handleDeepLink(uri)

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

19

Удачный опыт применения диплинкинга

(смотрите на синие кнопки внизу, а не на девушку)

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

20

Отключенный мессенджерПользователь отключил возможность писать ему

сообщения

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

21

Платный доступ

Тестовый регион с платным доступом

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

22

Списание с пакета

Кнопка написать ссылается на списание из пакета

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

23

Обновление данных

Объявление добавлено в избранное

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

24

Обновление данных

Кнопка написать ссылается на мессенджер, объявление

добавлено в избранное

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

25

Разовая оплата

Доступна кнопка покупки

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

26

Доступ получен

Кнопка написать ссылается на мессенджер

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

27Deeplinks Deeplinks everywhere

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

28

Реализация

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

29Универсальный механизм обработки

Диплинк

Диплинк

Диплинк

Диплинк

Диплинк

Экран

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

30VIPER

Assembly

PresenterInteractor View

SomeViewControllerModule

Router

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

31

Как универсально обрабатывать диплинки?

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

32VIPER

Assembly

PresenterInteractor View

SomeViewControllerModule

Router ?

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

33Первая реализация

DeepLinkUri: Сырая ссылка

DeepLink: Обработанная ссылка DeepLinkOrigin: Источник

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

34Источник ссылки

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

35Первая реализация

DeepLinkUri: Сырая ссылка

DeepLink: Обработанная ссылка DeepLinkOrigin: Источник

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

36DeepLink

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

37DeepLinkHandler

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

38DeepLinkHandlerFactory

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

39

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

40

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

41

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

42

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

43Советы1. Слабая связанность кода 2. Разделение ответственности 3. Абстрагирование от навигации, отсутсвие побочных

эффектов со стороны системы навигации

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

44

Как описывать диплинки?

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

45Первое решение

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

46Первое решение

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

47Deep Links Specification

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

48DeepLinksSpecification.swift

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

49Как описывать диплинки

1. Декларативный стиль 2. Описание в одном месте 3. Простота

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

50

Диплинки на действия

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

51Универсальная обратная связь

Диплинк

Диплинк

Диплинк

Диплинк

Диплинк

Экран

Экран

Экран

Экран

Экран

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

52

Механизм обратной связи

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

53Виды обратной связи

• Запуск и остановка прелоадера

• Показ сообщений о результатах

• Закрытие текущего экрана

• Обновление данных текущего экрана

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

54Виды обратной связи

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

55InternalDeepLinkHandler

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

56Настройка презентером

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

57

DeepLinkHandlingActions

Presenter

DeepLinkHandlerDelegateDeepLinkHandler

InternalDeepLinkHandler

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

58

Deep Link HandlerРедактирование

объявления

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

59АвторизацияСтарт процессаСтоп процесса

Получение данных для редактирования

Показ экранаОбработка модификации

данных на сервереЗавершение флоу

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

60Заключение

1. Диплинкинг - это удобно 2. Диплинкинг - это реально 3. Внедрение управляемой навигации - это не только

модно, молодежно и весело, это может быть выгодно бизнесу

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

61

Спасибо за внимание! Есть вопросы?

email: [email protected] skype: artyom.razinov