Appy

Бесплатный dev-инструмент

Валидатор универсальных ссылок

Проверьте, что ссылки открывают приложение. Вставьте домен, чтобы проверить Universal Links для iOS и App Links для Android, и получите понятный отчет с шагами по исправлению.

Запустить проверку
Вставьте домен или URL и проверьте настройку открытия приложения.

Как это работает

Что происходит, когда нажимают на вашу ссылку

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

iPhone и iPad

apple-app-site-association
  1. При установке

    Читает Associated Domains

    iOS смотрит записи applinks: в entitlement Associated Domains приложения.

  2. При установке

    Забирает файл через CDN Apple

    CDN Apple скачивает файл с вашего домена и отдаёт устройству свою кэшированную копию.

  3. При нажатии

    Сопоставляет ссылку

    iOS сравнивает домен и путь ссылки с app ID и правилами paths или components из этого файла.

  4. Результат

    Совпадение: открывается приложение

    Нет совпадения или файла: страница открывается в Safari

Android

assetlinks.json
  1. При установке

    Читает intent filters

    Android находит intent filters с autoVerify для вашего домена.

  2. При установке

    Скачивает assetlinks.json

    Запрашивает файл из /.well-known/ на каждом объявленном хосте. Редирект считается ошибкой.

  3. При установке

    Проверяет сертификат подписи

    Имя пакета и отпечаток SHA-256 в файле должны совпадать с сертификатом, которым подписано установленное приложение.

  4. Результат

    Проверено: открывается приложение

    Не проверено: открывается браузер, а в старых версиях Android — окно выбора приложения

Валидатор проверяет серверную часть обеих цепочек: лежит ли каждый файл там, где его ищут iOS и Android, и есть ли в нём то, что им нужно прочитать.

Проверки

Что проверяет этот инструмент

Один запуск делает до десяти запросов: оба файла ассоциации на вашем домене и на его двойнике с www или без, копию в CDN Apple и Digital Asset Links API от Google. Вот на что он смотрит.

  • Два адреса, два хоста

    Ищет apple-app-site-association в /.well-known/ и в корне сайта, а assetlinks.json — в /.well-known/, на вашем домене и на его версии с www.

  • HTTPS и ответ 200

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

  • Редиректы

    Проходит по редиректам, показывает, где закончился каждый запрос, и предупреждает, если итоговый адрес на другом хосте или на обычном HTTP.

  • HTML вместо JSON

    Распознаёт страницу входа, шаблон ошибки или проверку на бота от Cloudflare, Akamai и похожих сервисов и показывает полученный заголовок Content-Type.

  • Корректный JSON

    Разбирает каждый файл и при ошибке приводит сообщение парсера, чтобы было понятно, что исправлять.

  • applinks и app ID

    Проверяет, что applinks.details существует, и выводит все найденные app ID. Добавьте свой App ID в разделе «Дополнительно», чтобы убедиться, что он там есть. Подписанные файлы (PKCS7) распознаются, но не расшифровываются.

  • Relation и имена пакетов

    Проверяет, что assetlinks.json — это JSON-массив с relation delegate_permission/common.handle_all_urls, и выводит имена пакетов. Добавьте свой пакет в разделе «Дополнительно», чтобы сверить его.

  • Отпечаток SHA-256

    Вставьте отпечаток сертификата подписи в разделе «Дополнительно», и валидатор найдёт его в файле, с двоеточиями или без.

  • Копия Apple и взгляд Google

    Читает копию, которую CDN Apple отдаёт iPhone, и спрашивает у Digital Asset Links API от Google, что тот видит для вашего сайта, чтобы вы могли сравнить обе с вашим сервером.

Файла ещё нет или JSON не проходит проверку?Создайте его в генераторе AASA и assetlinks.json

Чего он не видит

Сторону приложения: entitlement Associated Domains, intent filters, попадает ли конкретный путь под ваши правила paths или components и как ведёт себя тот или иной встроенный браузер. Проверьте это на реальном устройстве до запуска.

Диагностика

Почему ссылки всё ещё открываются в браузере

Почти всегда причина — одна из этих восьми. Серверные видны в валидаторе, остальные проявляются только на настоящем телефоне.

  1. 01iOS + Android

    Нажатие происходит внутри Instagram, Facebook или TikTok

    Из Заметок или Сообщений работает, из био или рекламы открывается веб-страница.

    Решение

    Эти приложения открывают ссылки во встроенном браузере, который часто не передаёт адрес в iOS или Android. Проверяйте каждый канал отдельно и убедитесь, что ссылка ведёт в полезное место, даже если приложение не открылось: например, на страницу в магазине или на ваш сайт.

    Проверьте на устройствеDeep links из Instagram и TikTok
  2. 02iOS + Android

    Файл ассоциации отдаёт редирект

    В браузере файл открывается нормально, а проверка не проходит.

    Решение

    Apple и Android ждут прямой ответ 200 по точному адресу. Уберите на /.well-known/ редиректы с http на https, с голого домена на www и по языку.

  3. 03iOS + Android

    Неверный Content-Type

    Файл загружается, но платформа его игнорирует.

    Решение

    Отдавайте оба файла как application/json. У файла AASA нет расширения, поэтому многие серверы отправляют application/octet-stream или text/plain.

  4. 04iOS

    В CDN Apple всё ещё старый файл

    Файл исправлен, а iPhone по-прежнему открывают Safari.

    Решение

    CDN Apple отдаёт кэшированную копию, которая отстаёт от вашего сервера; валидатор показывает обе. Во время тестов добавьте ?mode=developer к entitlement и включите Associated Domains Development в настройках разработчика на устройстве.

  5. 05Android

    Нет ключа Play App Signing

    Ваши сборки открывают приложение, установки из Play Store — браузер.

    Решение

    С Play App Signing приложение, которое устанавливают пользователи, подписывает Google. Добавьте SHA-256 из Play Console, раздел «Целостность приложения», сертификат ключа подписи приложения. Если распространяете сборки вне Play, оставьте и ключ загрузки.

  6. 06iOS

    Ссылка ведёт на домен самой страницы

    Кнопки на вашем сайте открывают новые веб-страницы, а не приложение.

    Решение

    iOS оставляет человека в Safari, если он нажимает универсальную ссылку на тот же домен, на котором уже находится. Вынесите ссылки на приложение на отдельный поддомен или используйте на сайте Smart App Banner.

  7. 07iOS

    Пользователь однажды выбрал Safari

    На вашем телефоне ссылка работает, на телефоне коллеги — нет.

    Решение

    Нажатие на домен в правом верхнем углу после открытия приложения говорит iOS предпочитать Safari для этого домена. Чтобы вернуть всё назад, нажмите на ссылку и удерживайте, затем выберите открытие в приложении.

    Проверьте на устройствеУниверсальные ссылки открывают Safari?
  8. 08iOS

    App ID не совпадает со сборкой

    В staging-сборке работает, в релизной — нет.

    Решение

    Запись должна состоять из вашего Team ID и точного bundle ID опубликованного приложения, например ABCDE12345.com.example.app. Введите его в разделе «Дополнительно», и валидатор проверит.

Без возни с настройкой

Ссылки, которые просто работают

Ссылка Appy смотрит на каждое нажатие и отправляет его куда нужно: в App Store на iPhone, в Google Play на Android, на ваш сайт с компьютера. Подключите deep links на Pro, и те, у кого приложение уже установлено, сразу попадут в него.

  • Бесплатный тариф
  • Без банковской карты
  • Безлимитные клики на любом тарифе
  • Ссылки работают и после отмены подписки

На Enterprise приложение получает собственный домен для ссылок, и Appy размещает на нём apple-app-site-association и assetlinks.json за вас. Как работает SDK

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

Что такое файл apple-app-site-association (AASA)?

JSON-файл на вашем домене, который сообщает iOS, какие приложения могут открывать какие ссылки. Он лежит по адресу https://ваш-домен/.well-known/apple-app-site-association, без расширения .json, и перечисляет ваши app ID (Team ID плюс bundle ID) с правилами paths или components, которые они обрабатывают.

Где должны лежать файлы ассоциации?

iOS читает /.well-known/apple-app-site-association, Android — /.well-known/assetlinks.json, на каждом хосте, который вы используете в ссылках. Оба должны загружаться по HTTPS с прямым ответом 200, без редиректов и с content type application/json.

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

Либо проверка не прошла (файла нет, он отдаёт редирект или некорректен, либо app ID не совпадает со сборкой), либо iOS выбрала Safari намеренно: нажатие было во встроенном браузере или на странице того же домена, либо пользователь однажды выбрал Safari. Сначала запустите валидатор; если он ничего не нашёл, проверьте эти случаи на устройстве.

Почему ссылки в маркетинговых письмах открывают браузер, а не приложение?

Сервисы рассылок подменяют каждую ссылку трекинговым URL на своём домене. iOS и Android принимают решение только по этому первому домену, а редирект после него уже не может открыть приложение. Переключите валидатор в режим «Ссылка из письма» и вставьте ссылку из тестового письма: он пройдёт по редиректам, определит сервис рассылок и покажет, что нужно настроить на трекинговом домене.

Как проверить assetlinks.json?

Введите домен выше и откройте раздел «Дополнительно», чтобы добавить имя пакета и отпечаток SHA-256. На тестовом телефоне команда adb shell pm get-app-links com.example.app покажет, отметил ли Android каждый домен как проверенный.

Почему Android пишет, что проверка App Links не прошла?

Чаще всего отпечаток в assetlinks.json принадлежит ключу загрузки, а установки из Play Store подписаны ключом подписи Google. Дальше идут редиректы, неверный content type и защита от ботов на /.well-known/. Исправив файл, выполните adb shell pm verify-app-links --re-verify com.example.app.

Как быстро Apple подхватывает изменённый AASA?

Мгновенного обновления нет. Устройства получают файл из CDN Apple, который отдаёт кэшированную копию, поэтому исправление на сервере доходит не сразу. Валидатор показывает копию из CDN рядом с вашей. На этапе разработки ?mode=developer в entitlement позволяет устройству брать файл прямо с вашего сервера.

Работают ли универсальные ссылки внутри Instagram, Facebook или TikTok?

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

Проверяет ли валидатор моё приложение, entitlements или пути?

Он читает то, что возвращают ваш сервер, CDN Apple и Digital Asset Links API от Google. Для ссылки из письма он также проверяет, покрывают ли её правила в файле AASA. Сторона приложения — entitlement Associated Domains и intent filters — требует проверки на реальном устройстве.

Чем deep links отличаются от универсальных ссылок?

Deep link — любая ссылка, которая открывает определённый экран в приложении. Universal Links в iOS и App Links в Android — проверенная разновидность: обычные HTTPS-адреса, которые открывают приложение, если оно установлено, и веб-страницу, если нет.

Нужен ли аккаунт и можно ли поделиться результатом?

Аккаунт не нужен, валидатор бесплатный. У каждого запуска есть свой адрес, который можно скопировать и отправить разработчику. Эти страницы с результатами не индексируются поисковиками.