Android
May 18

Deep linking в Android: магия переходов

Всем привет, дорогие друзья!

Совсем недавно у нас в команде проводился небольшой workshop, посвященный навигации при deep linking. Из него родилась идея подготовить статью по этой теме. Давайте начнем!

Deep link

Согласно официальной документации, deep link в Android — это URI-ссылка, которая может быть использована для навигации к конкретному месту внутри приложения, минуя стартовый экран.

Назначение deep linking

Поддержка маркетинговых активностей

В рамках рекламных кампаний deep linking помогает привлекать пользователей к конкретным акциям, продуктам или функциям приложения.

Связь с внешними сервисами

Deep linking позволяет обеспечить более удобное взаимодействие между приложением и внешними сервисами, создавая плавные и контекстные переходы.

URI

URI (Uniform Resource Identifier) — это строка, которая идентифицирует ресурс в сети.

При этом URI может указывать как на местоположение ресурса (URL), так и на его имя (URN). А может содержать и то и другое. То есть URL и URN — это частные случаи URI.

Правила построения URI закреплены в RFC 3986.

URI состоит из обязательных компонентов:

  • scheme — определяет контекст / смысл идентификатора. Если схема зарегистрирована в IANA, то она считается официальной;
  • path — иерархические данные для идентификации ресурса.

И опциональных:

  • userinfo — информация о том, кто взаимодействует с ресурсом;
  • host — адрес расположения ресурса;
  • port — точка взаимодействия с host;
  • query — неиерархические данные для идентификации ресурса;
  • fragment — идентификация вторичного ресурса внутри исходного ресурса (якорь).

Web link

Web link — это deep link, использующий схемы HTTP и HTTPS.

В Android 12+ при нажатии на обычный web link содержимое всегда отображается в веб-браузере.

Если версия Android ниже 12, и приложения, установленные на устройстве, могут обрабатывать web link, пользователи, вместо перехода в браузер, увидят disambiguation dialog.

Disambiguation dialog или диалог разрешения неоднозначности — это системное окно в Android, которое появляется, когда несколько приложений могут обработать один и тот же Intent (например, ссылку).

В нем отображается список приложений-кандидатов для обработки перехода по ссылке. Список формируется в зависимости от ссылки и Intent-Filter, установленных в приложениях.

Android app link

С Android 6.0 появилась возможность привязки веб-домена к приложению и верификации домена на стороне сервера.

В случае успешной верификации, система автоматически открывала приложение, минуя disambiguation dialog.

Именно с этой версии появилась поддержка Android app link.

Android app link — это deep link, который также как и web link использует HTTP и HTTPS, но дополнительно содержит атрибут autoVerify.

Этот атрибут позволяет приложению назначить себя обработчиком по умолчанию для данного типа ссылки. Это позволяет открывать ссылку без вызова disambiguation dialog.

Если пользователь не хочет, чтобы приложение было обработчиком по умолчанию, он может переопределить это поведение в настройках приложения.

Верификация домена для Android app link (если на проекте не используется AppsFlyer)

Шаг 1. Добавить Intent-Filter в AndroidManifest.xml с флагом autoVerify и указанием информации оhttps-ссылке, которую необходимо обрабатывать:

<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />

    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data
        android:scheme="https"
        android:host="your.domain.com"
        android:pathPrefix="/yourpreffix" />
</intent-filter>

Шаг 2. Сгенерировать файл ассоциации assetlinks.json. Для этого требуется доступ в Google Play Console.

В разделе Привлечение пользователей имеется подраздел Ссылки на контент.

После перехода в подраздел необходимо нажать на Добавить домен для открытия диалогового окна генерации assetlinks.json.

В открывшемся окне указывается domain, который ранее был указан в AndroidManifest.xml.

После этого будет сгененирован файл ассоциации.

Важно разместить данный файл согласно указанному адресу: {your domain}/.well-known/assetlinks.json. В противном случае, связь между приложением и доменом установлена не будет.

Верификация домена для Android app link (если на проекте используется AppsFlyer)

Если на проекте используется AppsFlyer и для deep link используется домен формата yourbrand.onelink.me, то assetlinks.json контролирует AppsFlyer. В этом случае, последовательность действий будет немного другой.

Шаг 1. Собрать все SHA-256 отпечатки подписи приложения, для которого требуется настройка Android app link.

Шаг 2. Выбрать в AppsFlyer Dashboard нужное приложение для настройки на странице Apps. Затем, в левой навигационной панели необходимо выбрать пункт OneLink Management. На открывшейся странице нужно выбрать Edit OneLink template.

Шаг 3. На экране редактирования шаблона кликнуть на Launch the app using App Links и указать все раннее собранные SHA-256.

Шаг 4. Сохранить изменения, внесенные в шаблон.

Шаг 5. Скопировать на странице Edit template, полученный Intent-Filter и вставить в AndroidManifest.xml.

Шаг 6. Добавить OneLink API ключ в приложение. Как правило, данный ключ запрашивается у администратора AppsFlyer Dashboard.

На этом установка связи между приложением, использующим AppsFlyer и доменом, завершена.

Deferred deep link

В завершении статьи стоит упомянуть о deferred deep linking. Это механизм, который позволяет открыть нужный экран внутри приложения, даже если приложение на момент клика по ссылке еще не установлено.

Такого рода навигация бывает очень полезной при запуске различного рода рекламных компаний, но также требует дополнительной настройки со стороны приложения, исходя из документации сервиса deep linking, используемого на проекте.

Good coding and happy day!🤘

Полезные ссылки:


Telegram-канал Теплица

Обратная связь