Для чего нужно размещение файла для iOS диплинков на серверах?
Что проверяют
Понимаете ли вы, как работают Universal Links и зачем приложению подтверждение со стороны домена. Для тестировщика следом идёт практический вопрос: что проверять и почему ссылка иногда открывает сайт, а не приложение.
Как отвечать
Речь о файле apple-app-site-association (AASA). Он даёт двустороннюю связь домена и приложения: приложение в entitlement Associated Domains заявляет applinks:example.com, а сайт этим файлом подтверждает, что разрешает конкретному приложению открывать свои ссылки. Без такой проверки любое приложение могло бы перехватывать чужие адреса, как это возможно с кастомными схемами myapp://.
Требования к файлу:
- адрес:
https://example.com/.well-known/apple-app-site-association, только HTTPS с валидным сертификатом и без редиректов; - формат: JSON без расширения
.jsonв имени,Content-Type: application/json, размер до 128 КБ; - содержимое: блок
applinksсappIDs(Team ID плюс bundle ID) иcomponents, где перечислены пути и исключения через"exclude": true.
С iOS 14 устройство берёт файл не с вашего сервера, а с CDN Apple, поэтому правки доезжают с задержкой. Что лежит в кеше, видно по адресу https://app-site-association.cdn-apple.com/a/v1/example.com. Для отладки к домену в entitlement добавляют ?mode=developer, и на устройстве с включённым режимом разработчика файл берётся напрямую.
Кейсы для проверки: переход по ссылке из Заметок и мессенджера, приложение не установлено (должен открыться сайт), исключённые пути, ссылки с query и фрагментом, переустановка приложения. Аналог на Android это assetlinks.json для App Links.
Где спотыкаются
Думают, что файл хранит логику маршрутизации или данные для аналитики. Он только перечисляет, какие пути отдать приложению, разбор ссылки остаётся в коде.
Вставляют ссылку в адресную строку Safari и заводят баг, что Universal Link сломан. Так он не срабатывает по задумке, как и переход внутри того же домена.
Проверяют файл на своём сервере и не смотрят версию в CDN Apple, хотя устройство получает именно её.