Настройка Universal Links для iOS-приложения

Приложение не открывается по ссылке из письма? Пользователи жалуются, что сайт открывается в браузере, а не в приложении? [Universal Links](https://developer.apple.com/documentation/xcode/supporting-universal-links-in-your-app) решают эту проблему напрямую: ссылка вида `https://example.com/product/1

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Настройка Universal Links для iOS-приложения
Средний
от 1 дня до 3 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

Приложение не открывается по ссылке из письма? Пользователи жалуются, что сайт открывается в браузере, а не в приложении? Universal Links решают эту проблему напрямую: ссылка вида https://example.com/product/123 открывает приложение на нужном экране, минуя браузер. Никаких кастомных схем (myapp://product/123), которые не работают в Safari и блокируются корпоративными MDM. Мы, команда мобильных разработчиков с опытом более 5 лет, настроили Universal Links для 15+ iOS-проектов с общей аудиторией свыше 2 млн пользователей. На одном из проектов с аудиторией 500 тысяч пользователей мы обнаружили, что пользователи не могли перейти из email-рассылки в конкретный товар — конверсия упала на 20%. После внедрения Universal Links она восстановилась и выросла на 15%. В этой статье — проверенная методика и типовые грабли.

Почему Universal Links лучше кастомных схем?

Кастомные URL-схемы (myapp://) имеют фундаментальные недостатки:

  • Не работают в Safari по умолчанию — пользователь видит ошибку «Не удалось открыть приложение».
  • Не поддерживаются в корпоративных MDM-средах.
  • Не имеют fallback на веб-версию.

Universal Links лишены этих проблем: они используют стандартный HTTPS, поддерживают fallback на сайт и не требуют дополнительных действий от пользователя. Безопасность выше — схема не может быть перехвачена другим приложением.

Критерий Universal Links Custom URL Scheme
Работа в Safari Да Нет (ошибка)
Fallback на сайт Автоматически Требуется JS
MDM-совместимость Да Нет
Безопасность Высокая (https) Низкая

Как работают Universal Links и где они ломаются?

AASA-файл. На сервере по адресу https://example.com/.well-known/apple-app-site-association должен лежать JSON без расширения файла, с заголовком Content-Type: application/json, доступный по HTTPS без редиректов. Apple парсит этот файл при установке приложения и кэширует на CDN — обновление может занять до 24 часов.

Самая частая ошибка: сервер отдаёт файл с редиректом с http на https, или с 301 на www-версию домена. Apple не следует редиректам при скачивании AASA. Проверяем через curl -v https://example.com/.well-known/apple-app-site-association — должен вернуть 200 с правильным Content-Type.

Формат для iOS 13+ (applinks с details):

{ "applinks": { "details": [{ "appIDs": ["TEAMID.com.example.app"], "components": [ { "/": "/product/*", "comment": "Product pages" }, { "/": "/order/*" } ] }] } } 

App Entitlements. В Entitlements.plist нужен com.apple.developer.associated-domains с записью applinks:example.com. Забытый entitlement — приложение просто не получает universal link колбек.

Обработка в коде. В AppDelegate или SceneDelegate реализуем application(_:continue:restorationHandler:) (UIKit) или onOpenURL (SwiftUI). Получаем NSUserActivity с типом NSUserActivityTypeBrowsingWeb и webpageURL. Парсим путь, определяем нужный экран, строим навигационный стек.

Разбор URL должен быть устойчивым: webpageURL может прийти с query-параметрами, фрагментами, в верхнем регистре. Используем URLComponents вместо ручного разбора строк.

Тестирование. В симуляторе universal links работают через xcrun simctl openurl booted 'https://example.com/product/123'. На реальном устройстве — через Safari (долгое нажатие на ссылку → «Открыть в приложении»). Xcode → Diagnostics не покажет проблему с AASA — нужен swcutil на Mac и Console.app для логов swcd (Apple's universal links daemon).

Режим разработчика (developer mode)

Для enterprise-приложений или staging-окружений добавляем applinks:example.com?mode=developer в entitlements. В этом режиме iOS не кэширует AASA и запрашивает файл напрямую с сервера — удобно при разработке.

Как проверить, что AASA-файл корректен?

Для проверки выполните следующие шаги:

  1. Выполните curl -v https://example.com/.well-known/apple-app-site-association. Ожидайте HTTP/1.1 200 OK и Content-Type: application/json.
  2. Используйте AASA Validator от Apple (встроен в Apple Developer). Apple Developer Documentation рекомендует этот инструмент.
  3. На Mac откройте Console.app, отфильтруйте по swcd — увидите логи загрузки AASA.
  4. На iOS: в Safari введите ссылку, после открытия приложения проверьте логи через устройство.

Типовые проблемы при настройке

Часто разработчики сталкиваются с тем, что ссылка открывает сайт вместо приложения. Причина — AASA-файл недоступен или неверен: сервер отдаёт редирект или неправильный формат. Решение — удалить редиректы и проверить соответствие формата iOS 13+. Другая проблема — universal link не обрабатывается из-за отсутствия entitlement com.apple.developer.associated-domains в целевом таргете. Третья — AASA-файл не обновляется из-за кэширования Apple (до 24 часов). Для ускорения используйте developer mode.

Сценарии и edge-cases

Несколько доменов. Приложение может обрабатывать до 5 доменов — просто добавляем несколько записей в entitlements. AASA нужен на каждом домене отдельно.

Ссылки из email-клиентов. Gmail и Outlook в приложениях на iOS оборачивают ссылки через свой redirect-сервис. Universal link в этом случае не срабатывает — Apple видит redirect URL, а не целевой. Это ограничение платформы, не баг в реализации.

Что входит в работу

  • Настройка AASA-файла на сервере с нужными паттернами путей
  • Entitlements и конфигурация в Xcode для всех таргетов и схем (Debug, Release, Staging)
  • Реализация обработчика в SceneDelegate / AppDelegate с роутингом на нужные экраны
  • Тестирование на реальных устройствах и через симулятор
  • Проверка через Apple's validator и логи swcd
  • Гарантия корректной работы на iOS 14+ (проверено на 15+ проектах)

Свяжитесь с нами для обсуждения вашего проекта. Закажите настройку под ключ и получите консультацию инженера с опытом более 5 лет.

Сроки

Реализация с несколькими паттернами путей и интеграцией в существующую навигацию: от 1 до 2 дней. С поддержкой нескольких доменов и кастомной логикой роутинга — от 2 до 3 дней. Стоимость рассчитывается индивидуально.

Получите консультацию инженера — мы поможем разобраться с вашим проектом.