Universal Link (iOS)
Universal Link — механизм Apple (iOS 9+), при котором обычный HTTPS-URL автоматически открывает установленное приложение вместо браузера, а при отсутствии приложения — переходит на сайт.
Определение Universal Link
Universal Link — механизм Apple, введённый в iOS 9 в 2015 году. Суть простая: обычный HTTPS-URL вроде https://example.com/product/42 при нажатии на iPhone открывает не Safari, а установленное приложение — прямо на нужном экране. Если приложения на устройстве нет — URL ведёт себя как обычная ссылка и открывает сайт в браузере. Никаких лишних диалогов «открыть в приложении», никаких переходов через кастомную схему.
До Universal Links разработчики использовали custom URL schemes вида myapp://product/42. Этот подход имел два принципиальных изъяна: если приложение не установлено, браузер показывал ошибку вместо сайта, а любое стороннее приложение могло зарегистрировать ту же схему и перехватить трафик. Universal Links решают обе проблемы — HTTPS-URL принадлежит домену, и подделать владельца нельзя.
Как настроить Universal Link
Настройка требует двух шагов.
Файл apple-app-site-association (AASA) на сервере. Размещается по пути https://example.com/.well-known/apple-app-site-association — без расширения, строго по HTTPS, без редиректов. Минимальная структура: JSON с полем applinks.details, где appID — это Team ID + bundle identifier приложения, а paths — список URL-паттернов, которые должны открываться в приложении. Остальные пути домена iOS не трогает и открывает в Safari.
Associated Domains в Xcode. В настройках target-а приложения включается capability Associated Domains, добавляется запись applinks:example.com. При установке iOS скачает AASA через CDN Apple и закэширует связь. Изменения в файле могут применяться с задержкой до 48 часов — CDN обновляется не мгновенно.
Universal Link vs Custom URL Scheme
Старый подход — custom URL scheme вида myapp://product/42 — работал, пока приложение установлено. Если нет — браузер показывал ошибку, пользователь застревал. Ещё хуже: любое стороннее приложение могло зарегистрировать ту же схему и перехватить трафик. HTTPS-ссылка в Universal Link принадлежит конкретному домену, поэтому подделать владельца невозможно.
Разница в поведении при отсутствии приложения критичная: custom scheme даёт ошибку, Universal Link тихо открывает сайт. Для пользователя это невидимо — он просто попадает на нужную страницу. Для маркетинга это означает, что один и тот же QR-код или ссылка работает и как мобильный deep link, и как веб-страница без двух версий материала.
Аналог на Android — App Links с файлом assetlinks.json. Принцип идентичный, синтаксис JSON отличается. Для кросс-платформенного deep linking один HTTPS-URL конфигурируется под обе платформы одновременно — один QR-код охватывает всех.
Частые вопросы
Почему Universal Link не открывает приложение, хотя оно установлено?
Три самые частые причины. Первая: AASA-файл недоступен или отдаётся с редиректом — iOS требует прямого 200 OK по HTTPS, редиректы блокируют загрузку. Вторая: путь в URL не совпадает ни с одним паттерном в поле paths — добавьте нужный путь или используйте "/*" для охвата всех. Третья: iOS кэшировал старую версию AASA — после изменения файла нужно переустановить приложение или подождать обновления кэша Apple CDN (до 48 часов).
Работает ли Universal Link в WKWebView внутри другого приложения?
По умолчанию — нет. WKWebView не обрабатывает Universal Links: ссылка откроется как обычный URL внутри вебвью. Чтобы обойти это, разработчик стороннего приложения должен перехватить навигацию в WKNavigationDelegate и самостоятельно открыть UIApplication.open с этим URL. Если у вас нет доступа к коду контейнерного приложения — единственный вариант это Custom URL Scheme или просьба к пользователю открыть ссылку в Safari.
Можно ли зашить Universal Link в QR-код?
Да, это один из самых надёжных сценариев. QR-код содержит обычный HTTPS-URL; iPhone сканирует его через камеру и сразу открывает приложение, если оно установлено. Если нет — пользователь попадает на страницу сайта, где можно предложить скачать приложение. Такой подход работает и на Android: тот же HTTPS-URL можно настроить как App Link через assetlinks.json, получив единый QR для обеих платформ без редиректов.
Чем Universal Link отличается от App Clip?
Universal Link открывает уже установленное полноценное приложение, а при его отсутствии просто переходит на сайт. App Clip — это другой сценарий: мини-версия приложения (до 10 МБ), которая запускается без установки через App Store. App Clip внутри всё равно использует Universal Link как транспорт URL, но конечный результат другой — пользователь получает мгновенно загруженный микро-интерфейс, а не веб-страницу. Обе технологии дополняют друг друга: Universal Link для текущих пользователей, App Clip — для новых.
Universal Link работает только на iPhone?
Нет. Apple добавила поддержку Universal Links в macOS Catalina (10.15) в 2019 году. Тот же AASA-файл и те же настройки Associated Domains работают для macOS-приложений. Это значит, что один HTTPS-URL может открывать нативное приложение как на iPhone, так и на Mac, если разработчик поддерживает обе платформы. На Apple Watch и Apple TV Universal Links также поддерживаются начиная с watchOS 6 и tvOS 9 соответственно.