Бесплатный инструмент
Генератор AASA и assetlinks.json
Создайте файл apple-app-site-association для Universal Links на iOS и файл assetlinks.json для App Links на Android. Введите данные приложения, затем скопируйте или скачайте готовый к загрузке файл.
- Бесплатно, без регистрации
- Работает в браузере
- Актуальный формат components от Apple
Файлы уже готовы? Проверьте их валидатором
Приложения
Добавьте каждое приложение, которое должно открывать ссылки этого домена. Каждое станет записью в appIDs.
- Приложение 1
10 символов, в аккаунте Apple Developer в разделе Membership details.
Из таргета приложения в Xcode, например com.example.app.
Пути, которые открывают приложение
Правила проверяются сверху вниз, и срабатывает первое совпадение, поэтому ставьте исключения выше общих правил. * означает любое количество символов, ? ровно один.
- Правило 1
пары имя=значение через &
Другие сервисы
Ваш файл
apple-app-site-association
Пример. Введите свои данные, и он заменится.
{
"applinks": {
"details": [
{
"appIDs": [
"ABCDE12345.com.example.app"
],
"components": [
{
"/": "/*"
}
]
}
]
}
}Создаётся в вашем браузере. Никуда не отправляется.
Где разместить файл
- Загрузите его по адресу
https://ваш-домен/.well-known/apple-app-site-association, без расширения.json. - Отдавайте по HTTPS с действующим сертификатом и сразу с кодом 200, без редиректов.
- Отправляйте заголовок
Content-Type: application/json. - Повторите для каждого хоста в ссылках:
example.comиwww.example.com— разные хосты, и каждому нужны файл и записьapplinks:. - CDN Apple забирает новый файл в течение 24 часов. До этого тестируйте с
?mode=developer.
Не хотите размещать файлы сами? Smart-ссылки бесплатны, а на Enterprise Appy отдаёт оба файла на домене ссылок вашего приложения.
Создать бесплатную ссылкуКак это связано
Два файла, взаимная проверка
Universal Links и App Links открывают приложение, только когда обе стороны подтверждают друг друга. Приложение называет домен, а файл на домене называет приложение. Если одной половины нет, ссылка откроет ваш сайт.
Приложение iOS
Entitlement Associated Domains
applinks:example.comВаш домен
example.com/.well-known/
apple-app-site-association
Содержит app ID: Team ID и bundle ID
ABCDE12345.com.example.appassetlinks.json
Содержит имя пакета и отпечаток SHA-256
com.example.app · 14:6D:E9:…
Приложение Android
Intent-фильтр с autoVerify
android:autoVerify="true"android:host="example.com"Обе половины совпадают: ссылка открывает приложение
Чего-то не хватает: ссылка открывает ваш сайт
Поле за полем
Что означает каждый ключ в файлах
Оба файла — обычный JSON. Ниже ключи, которые пишет генератор, и необязательные, о которых полезно знать.
apple-app-site-association
applinks- Сервис Universal Links. Всё, что решает, какой URL открывает какое приложение, находится внутри.
details- Массив записей, каждая связывает группу приложений с группой правил для URL. Используйте несколько записей, если разные приложения обрабатывают разные пути.
appIDs- App ID в формате
<Team ID>.<bundle ID>, напримерABCDE12345.com.example.app. Каждое приложение также должно указать домен в entitlement Associated Domains. components- Правила для URL, проверяются по порядку. Первое совпавшее правило решает, откроется ли приложение.
/- Шаблон пути URL, например
/products/*. Если его нет, подходит любой путь. ?- Параметры запроса для сравнения, в виде словаря.
{"ref": "?*"}требует непустой параметрref. #- Шаблон для фрагмента после
#. exclude- Значение
trueоставляет совпавшие URL на сайте. Ставьте такие правила выше общих. comment- Заметка для тех, кто читает файл. iOS её игнорирует.
webcredentials- Необязательно. Перечисляет приложения, которым автозаполнение может предлагать пароли, сохранённые для этого сайта.
appclips- Необязательно. Перечисляет App Clip, которые может запускать этот домен.
* означает любое количество символов, ? ровно один, ?* хотя бы один. Сравнение учитывает регистр, если не добавить "caseSensitive": false.
assetlinks.json
[ ]- Файл представляет собой JSON-массив утверждений, даже если утверждение одно.
relationdelegate_permission/common.handle_all_urlsразрешает приложению открывать ссылки этого сайта.delegate_permission/common.get_login_credsдобавляет общие данные для входа.target- Приложение, к которому относится утверждение.
namespace- Для Android-приложения всегда
android_app. package_name- applicationId приложения, например
com.example.app. sha256_cert_fingerprints- Отпечатки SHA-256 сертификатов, которыми подписано приложение: пары заглавных символов через двоеточие. Укажите каждый ключ, которым подписаны устанавливаемые сборки.
relation_extensions- Необязательно, Android 15 и новее. Его
dynamic_app_link_componentsдобавляет правила для путей в духе components от Apple. Более старые версии его игнорируют.
Старый формат с paths
До iOS 13 в каждой записи был один appID, массив paths с NOT перед исключениями, а в файле требовался пустой массив apps. iOS 13 и новее читают appIDs и components. Генератор пишет только современный формат. Если вы ещё поддерживаете iOS 12, добавьте старые ключи в ту же запись.
{
"applinks": {
"apps": [],
"details": [{
"appID": "ABCDE12345.com.example.app",
"paths": ["NOT /help/website/*", "/buy/*"]
}]
}
}{
"applinks": {
"details": [{
"appIDs": ["ABCDE12345.com.example.app"],
"components": [
{"/": "/help/website/*", "exclude": true},
{"/": "/buy/*"}
]
}]
}
}Частые ошибки
Почему файл выглядит правильно, но не работает
JSON может быть валидным, а ссылки всё равно открывают сайт. Прежде всего проверьте эти семь пунктов.
- 01iOS
Неверный префикс Team ID
Файл загружается, но iOS так и не открывает приложение.
Как исправить
Используйте Team ID аккаунта, которым подписан релиз, из раздела Membership details. Не числовой ID в App Store, не Key ID и не команду агентства, если приложение публикуется с вашего аккаунта.
Полное руководство по Universal Links для iOS и Android - 02Android
Ключ загрузки вместо ключа подписи Play
Ваши собственные сборки открывают приложение, а установки из Google Play открывают браузер.
Как исправить
Google подписывает распространяемые приложения ключом подписи приложения. Скопируйте его SHA-256 в Play Console, в разделе «Целостность приложения», а ключ загрузки оставьте в списке, только если раздаёте подписанные им сборки.
Android App Links не проходят проверку: диагностика за пять минут с adb - 03iOS + Android
Файл отдаётся через редирект
В браузере адрес открывается нормально, но проверка не проходит.
Как исправить
Apple и Android ждут код 200 по точному адресу. Исключите
Universal Links открывают Safari? Исправьте AASA, App Links, редиректы и headers/.well-known/из редиректов с домена без www на www, обратно и по языку. - 04iOS + Android
Неверный Content-Type или HTML вместо JSON
Файл на месте, но платформа его игнорирует.
Как исправить
Отдавайте оба файла как
Universal Links открывают Safari? Исправьте AASA, App Links, редиректы и headersapplication/json. Серверы часто отдают AASA без расширения какapplication/octet-stream, а некоторые хостинги возвращают страницу входа или проверку на бота. - 05iOS + Android
Забытый хост www
Ссылки на example.com открывают приложение, а на www.example.com — сайт.
Как исправить
Каждый хост проверяется отдельно. Загрузите файл на оба, укажите оба в Associated Domains и объявите оба в intent-фильтрах Android.
Полное руководство по Universal Links для iOS и Android - 06iOS
Исключение под общим правилом
Страницы, которые должны оставаться на сайте, открывают приложение.
Как исправить
Срабатывает первое совпавшее правило. Поднимите правила
excludeвыше/*, как в примере Appy в генераторе. - 07iOS
Расширение .json или не та папка
По адресу, который запрашивает iOS, ничего нет.
Как исправить
Файл называется
apple-app-site-association, без расширения, и лежит в/.well-known/. Кнопка скачивания выше уже использует это имя.
Без возни с хостингом
Пусть оба файла отдаёт Appy
На Enterprise приложение получает собственный домен для ссылок, и Appy размещает на нём apple-app-site-association и assetlinks.json, собранные из Team ID, bundle ID, имени пакета и отпечатков, которые вы указали. Сами smart-ссылки бесплатны, а deep links доступны на Pro.
- Бесплатный тариф
- Без банковской карты
- Безлимитные клики на любом тарифе
- Ссылки работают и после отмены подписки
Частые вопросы
Что такое файл apple-app-site-association?
JSON-файл на вашем домене, который сообщает iOS, какие приложения могут открывать какие URL как Universal Links. Он лежит по адресу https://ваш-домен/.well-known/apple-app-site-association, не имеет расширения и перечисляет app ID (Team ID и bundle ID) с правилами URL для каждого.
Что такое assetlinks.json?
Аналог для Android на основе Google Digital Asset Links. Файл лежит по адресу https://ваш-домен/.well-known/assetlinks.json и указывает пакет и отпечатки сертификата подписи приложения, которому разрешено открывать ваши ссылки. Android проверяет его при установке приложения и только после этого считает ссылки проверенными App Links.
Куда загружать созданные файлы?
В папку /.well-known/ в корне каждого хоста, который вы используете в ссылках. Оба файла должны открываться по HTTPS сразу с кодом 200, без редиректов и с типом application/json. На статическом хостинге для AASA часто нужно отдельное правило заголовков, потому что у файла нет расширения.
Где найти Team ID и bundle ID?
Team ID указан в аккаунте Apple Developer в разделе Membership details. Bundle ID находится на вкладке General таргета приложения в Xcode. Вместе они образуют app ID, например ABCDE12345.com.example.app.
Как получить отпечаток SHA-256 для assetlinks.json?
Если приложение подписывает Google Play, откройте Play Console, перейдите в «Целостность приложения» и скопируйте SHA-256 сертификата ключа подписи приложения. Для ключей, которые хранятся у вас, выполните keytool -list -v -keystore my-release-key.keystore или ./gradlew signingReport. Генератор принимает значение с двоеточиями и без.
Что использовать в AASA: paths или components?
Используйте components. Apple ввела этот ключ в iOS 13, и он поддерживает параметры запроса, фрагменты, исключения и комментарии. Старый массив paths нужен, только если вы ещё поддерживаете iOS 12 и ниже; тогда укажите оба в одной записи.
Может ли один файл охватывать несколько приложений?
Да. В AASA перечислите все app ID в appIDs или добавьте отдельные записи details, если приложения обрабатывают разные пути. В assetlinks.json добавьте в массив по утверждению на каждый пакет. Генератор поддерживает несколько iOS-приложений; для второго Android-пакета скопируйте утверждение и замените имя пакета и отпечатки.
Сколько времени изменения идут до устройств?
По данным Apple, её CDN запрашивает AASA в течение 24 часов, а устройства проверяют обновления примерно раз в неделю после установки. Android проводит проверку при установке приложения; на тестовом устройстве adb shell pm verify-app-links --re-verify com.example.app запускает её заново.
Нужно ли подписывать файл AASA?
Нет. Подпись TLS-сертификатом требовалась только в iOS 8. Начиная с iOS 9 Apple ожидает обычный JSON-файл, отданный по HTTPS.
Отправляется ли то, что я ввожу, в Appy?
Нет. Файлы создаёт код, который работает в вашем браузере, и ничего из введённого не загружается и не сохраняется. Валидатор устроен иначе: при запуске он забирает файлы с вашего домена.
Что дальше
Проверьте результат и читайте дальше
- Бесплатный инструментВалидатор Universal LinksКогда файлы опубликованы, проверьте их на вашем домене, в CDN Apple и через Google Digital Asset Links API.
- ГайдПолное руководство по Universal Links для iOS и AndroidПолное руководство по universal links, deep links и app links: внедрение и лучшие практики для mobile marketing.
- ГайдUniversal Links открывают Safari? Исправьте AASA, App Links, редиректы и headersПрактичный troubleshooting-процесс для исправления universal links и app links, открывающих браузер вместо приложения.
- ГайдAndroid App Links не проходят проверку: диагностика за пять минут с adbС Android 12 App Link, не прошедший проверку домена, открывается в браузере вместо приложения — молча и не на всех устройствах. adb-чеклист, который быстро находит причину.
- ГайдDeep linking vs Universal Links: полное сравнениеРазберитесь в ключевых отличиях deep links и universal links, когда использовать каждый подход и как их внедрять.