Перейти к содержимому

Universal Links (iOS)

Universal Links — механизм Apple с iOS 9: обычная https-ссылка открывает нужный экран приложения, если домен подтверждён файлом apple-app-site-association.

Что должно совпасть, чтобы ссылка открыла приложение

Связка домена и приложения подтверждается с двух сторон. Со стороны сайта — файл apple-app-site-association: JSON без расширения в имени, отдаётся по HTTPS из корня домена или из каталога /.well-known/, код ответа 200 сразу, без промежуточных редиректов. Внутри — идентификаторы приложений и пути, которые им передаются.

Со стороны приложения — включённая возможность Associated Domains с записью вида applinks:example.com на каждый перехватываемый домен. Домен в записи и домен, откуда отдаётся файл, должны совпадать буквально: поддомен — уже другой домен.

Проверка идёт не в момент тапа: файл считывается при установке или обновлении приложения, результат система запоминает. Правки на сайте применяются с задержкой — там, где приложение уже стоит, действует прежняя связка. Схожая по смыслу схема на Android разобрана в термине App Links, требования там свои.

Почему ссылка вдруг открывается в браузере

Самая частая причина не в коде. Если пользователь однажды нажал на плашке сверху «Открыть в Safari», система запомнила выбор и дальше ведёт домен в браузер: у разработчика всё исправно, а на конкретном телефоне приложение не всплывает. Возвращает приложение долгое нажатие на ссылку с выбором открытия в нём.

Вторая причина — контекст перехода. Механизм рассчитан на осознанный тап; переход, инициированный кодом, или клик во встроенном веб-просмотре чужого приложения нередко остаётся в браузере. Отсюда жалобы «из почты открывает, из чата — нет».

Третья — редиректы. Цепочка через промежуточные домены и трекинговые прослойки мешает опознать ссылку: система смотрит на адрес, по которому идёт переход.

Как класть такие ссылки в QR-коды и сокращатели

В QR-код кодируйте обычный https-адрес верифицированного домена — тот же, что уходит в письме. Кастомная схема myapp:// внутри кода вредна: на телефоне без установленного приложения она не открывается вовсе. Https-адрес в худшем случае просто откроет сайт.

С сокращателями смотрите на домен и длину цепочки. Чужой публичный сервис отдаёт свой домен, файла привязки вашего приложения там нет, и переход почти наверняка уйдёт в браузер. Короткие ссылки на собственном домене ведут себя иначе: домен ваш, файл лежит там же, что и на сайте, промежуточных переходов минимум.

Частые вопросы

Чем Universal Links отличаются от схемы myapp://?

Кастомная схема — отдельный протокол, который регистрирует само приложение: без установленного приложения ссылка myapp:// не открывается вовсе, пользователь упирается в ошибку. Universal Link остаётся обычным https-адресом: приложение есть — откроется оно, приложения нет — откроется страница сайта по тому же адресу.

Почему ссылка перестала открывать приложение?

Чаще всего сработала память системы о выборе пользователя: если один раз открыть такую ссылку в браузере кнопкой на плашке сверху, дальше домен будет уходить в браузер. Помогает долгое нажатие на ссылку и выбор открытия в приложении. Реже виноваты редиректы в цепочке перехода или изменившийся файл привязки.

Где должен лежать файл apple-app-site-association?

На том же домене, что указан в Associated Domains, и отдаваться по HTTPS: либо из корня, либо из каталога /.well-known/. Имя файла — без расширения, содержимое — JSON, ответ — код 200 напрямую, без промежуточных редиректов. Если сервер отвечает переадресацией или ошибкой, связка домена с приложением не подтверждается.

Почему правки в файле применяются не сразу?

Система считывает файл привязки при установке или обновлении приложения, а не при каждом переходе по ссылке. На устройствах, где приложение уже стоит, какое-то время действует прежняя версия связки. Поэтому изменения проверяют на чистой установке, а не на телефоне, где приложение живёт с прошлой сборки.

Можно ли поместить Universal Link в QR-код?

Да, и это правильный вариант: в код кладут обычный https-адрес верифицированного домена. У кого приложение установлено, откроется приложение, у остальных — сайт, отдельный код под iOS делать не нужно. Избегать стоит кастомных схем внутри кода и длинных цепочек редиректов через чужие домены.