Привет! Меня зовут Анна Ахлестова, я Flutter Team Lead в компании Friflex. Мобильные приложения, в том числе на Flutter, позволяют настраивать обработку различных ссылок. В этой статье я разберу, как во Flutter реализовать поддержку deeplink-ов и универсальных ссылок и как управлять ими на уровне платформы.

Сначала разберемся, с какими типами ссылок можно работать в мобильных приложениях. 

Глубокие ссылки (deeplinks) — это ссылки с кастомной схемой, которые позволяют открыть именно ваше приложение на устройстве и перейти на вложенные маршруты внутри него. Например, ссылка app://product/id123 откроет ваше приложение сразу на странице продукта с идентификатором id123. 

Universal links — это универсальные ссылки iOS приложений в формате стандартной веб-ссылки, например, https://www.example.com. Если приложение установлено, ссылки открывают его. Если нет, в браузере открывается веб-сайт, который связан с этой ссылкой. 

App Links — это ссылки для Android, которые работают так же, как Universial links на iOS.

App_links библиотека

После настройки ссылок на проектах часто возникает вопрос: как выполнить их обработку внутри приложения? Здесь поможет библиотека app_links. Чтобы получить ссылки, нужно использовать экземпляр класса AppLinks:

final _instance = AppLinks();

С помощью этого объекта можно отследить, с какой конкретной ссылки запустили приложение.

Future<void> handleInitialLink() async {
    final initialLink = await _instance.getInitialLink();
    // обработка начальной ссылки
  }

Когда приложение работает, в него из платформы тоже могут поступать ссылки. Тогда плагин дает возможность получать эти ссылки потоком строк или объектов Uri.

final uriSubscription = _instance.uriLinkStream.listen((uri) {
      // обработка ссылки в Uri формате
    });
    final stringLinksSubscription = _instance.stringLinkStream.listen((stringLink) {
      // обработка ссылки в String формате
    });

У библиотеки хорошая репутация: почти тысяча лайков и более 800 тысяч скачиваний.

Динамические ссылки

Теперь поговорим, как интегрировать универсальные или динамические ссылки во Flutter-приложение. 

Раньше для этого часто использовали Firebase Dynamic Links, это был удобный кроссплатформенный способ управлять https-ссылками. Но 25 августа 2025 года эту функциональность полностью отключили. Для новых проектов ее использовать уже нельзя.

На замену приходят Universal links для iOS и App Links для Android. 

Настроить ссылки на Android очень просто. Для этого Android Studio дает инструмент App Links Assistant (Tools -> App Links Assistant). В нем есть пошаговая инструкция и подсказки, какие действия нужно выполнить. В  нужных местах он сам генерирует код.

Вот как это выглядит:

  • В AndroidManifest.xml нужно добавить поддержку схем и хоста, которые будет содержать ссылка.

  • В MainActivity нужно добавить логику нативной обработки ссылок, которые поступают извне.

  • Нужно сформировать файл связанных доменов для связи с конкретным сайтом.

В итоге вы должны получить сгенерированный файл assetlinks.json. 

На iOS такого инструмента нет, но настройка тоже не сложная.

  • В файле Info.plist нужно добавить флаг FlutterDeepLinkingEnabled со значением true. Важно: если вы используете сторонние библиотеки для обработки ссылок (например, app_links), значение флага нужно установить false.

<key>FlutterDeepLinkingEnabled</key>
<true />
  • В Xcode нужно перейти в Runner, в разделе Signing and Capabilities добавить новую Capability и в списке выбрать Associated Domains. Здесь нужно указать, с каким именно доменом должно быть связано приложение. Добавляем строку:

applinks:www.example.ru
  • Нужно создать файл apple-app-site-association. Название файла не должно содержать расширения. В самом файле в формате json нужно добавить поле «applinks» и «details» для описания того, какое именно приложение связывается с сайтом и какие пути обрабатывает. Полный формат файла можно найти здесь.

Важно правильно составить appIDs. Строка идентификатора должна быть из двух частей:

<Application Identifier Prefix>.<Bundle Identifier>

Эти данные можно достать из карточки приложения в App Store Connect.

Последний шаг общий для обеих платформ: файлы apple-app-site-association и assetlinks.json нужно загрузить на сайт, поддержку хоста которого вы добавили в приложении. После загрузки файлы должны быть доступны по путям:

https://www.example.ru/.well-known/apple-app-site-association

https://www.example.ru/.well-known/assetlinks.json

После загрузки в том же App Links Assistant нужно подтвердить загрузку, чтобы проверить подключение. Для iOS нужно подождать 24 часа, чтобы Apple получил доступ к файлу.

Вуаля, теперь ваше приложение будет открываться по ссылке https://www.example.ru

А вот инструкции для Flutter, Android и iOS.

Сталкивались ли вы со сложностями, когда настраивали deeplink-и во Flutter?