Чтобы поддерживать ссылки на приложение, создайте JSON-файл протокола связи цифровых объектов с названием assetlinks.json и опубликуйте его в общедоступном месте на своем сайте. В этом файле указывается, какие приложения могут обрабатывать ссылки для вашего домена. Устройства Android будут получать этот файл с вашего сервера, чтобы проверять ссылки на контент.
Для динамических ссылок на приложения в Android 15 и более поздних версиях в файле assetlinks.json также определяется конфигурация динамических правил, например сопоставители шаблонов для пути, фрагмента и параметров запроса. Устройства Android с Android 15 (API уровня 35) или более поздней версии, на которых установлены сервисы Google, будут периодически получать этот файл и объединять динамическую конфигурацию со статической в манифесте приложения.
В этом руководстве рассказывается, как подготовить файл assetlinks.json и опубликовать его на сайте. Вы также можете создать файл assetlinks.json с помощью инструмента Play Deep Links или App Links Assistant в Android Studio.
Подробнее об инструментах разработчика для ссылок на приложения…
Как объявить о связи между сайтами
Чтобы указать, какие приложения для Android связаны с сайтом, и подтвердить намерения URL приложения, опубликуйте на сайте файл JSON протокола связи цифровых объектов. Для идентификации связанных приложений в файле JSON используются следующие поля:
package_name– идентификатор приложения, указанный в файлеbuild.gradle.sha256_cert_fingerprints– цифровые отпечатки SHA-256 сертификата подписи приложения. Чтобы сгенерировать цифровой отпечаток с помощью Java keytool, используйте следующую команду:
keytool -list -v -keystore my-release-key.keystore
- В этом поле можно указать несколько цифровых отпечатков, чтобы обеспечить поддержку разных версий приложения, например отладочной и рабочей. Если вы используете функцию подписания приложений в Google Play, то цифровой отпечаток сертификата, полученный при локальном запуске
keytool, обычно не совпадает с отпечатком на устройствах пользователей. Проверить, используете ли вы функцию подписания приложений в Google Play, можно в аккаунте разработчика Play Console в разделеRelease > Setup > App signing. Если да, то на этой же странице вы найдете правильный фрагмент JSON протокола связи цифровых объектов для своего приложения.
В примере ниже файл assetlinks.json предоставляет права на открытие ссылок приложению Android com.example.
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example",
"sha256_cert_fingerprints":
["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
}
}]
Как связать сайт с несколькими приложениями
В одном файле assetlinks.json можно указать связь сайта с несколькими приложениями. Ниже приведен пример файла манифеста, в котором объявляется связь с двумя приложениями по отдельности. Он находится по адресу https://www.example.com/.well-known/assetlinks.json.
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.puppies.app",
"sha256_cert_fingerprints":
["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
}
},
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.monkeys.app",
"sha256_cert_fingerprints":
["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
}
}]
Разные приложения могут обрабатывать ссылки на разные ресурсы в рамках одного веб-хоста.
Например, приложение 1 может объявить фильтр интентов для https://example.com/articles, а приложение 2 – для https://example.com/videos.
Как связать несколько сайтов с одним приложением
С одним приложением можно связать несколько сайтов, указав их в файлах assetlinks.json. В приведенных ниже списках файлов показано, как объявить о связи example.com и example.net с app1. В первом списке показана связь example.com с app1:
https://www.example.com/.well-known/assetlinks.json
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.mycompany.app1",
"sha256_cert_fingerprints":
["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
}
}]
В следующем списке показана связь example.net с app1. Разница заключается только в месте размещения файлов (.com и .net):
https://www.example.net/.well-known/assetlinks.json
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.mycompany.app1",
"sha256_cert_fingerprints":
["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
}
}]
Как настроить динамические правила
Динамические ссылки на приложения в Android 15 и более поздних версиях позволяют использовать правила сопоставления ссылок на контент на стороне сервера, которые работают вместе с правилами, статически заданными в манифесте приложения. Динамические правила задаются в файле assetlinks.json. Это необязательный параметр.
Устройства Android с Android 15 (API уровня 35) или более поздней версии, на которых установлены сервисы Google, будут периодически получать этот файл с вашего сервера и объединять конфигурацию динамических правил со статической конфигурацией в манифесте приложения. Ниже приведен пример файла assetlinks.json с динамическими правилами.
[
{
"relation": [
"delegate_permission/common.handle_all_urls"
],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints": [...]
},
"relation_extensions": {
"delegate_permission/common.handle_all_urls": {
"dynamic_app_link_components": [
{"?": {"dl": "*"}},
{"#": "app"},
{"/": "/products/*"},
{"/": "/shoes", "?": {"in_app": "true"}},
{"/": "*", "exclude": true}
]
}
}
}
]
Важные сведения о коде
- Динамические ссылки на приложения добавляют новое расширение отношений Digital Asset Links под названием
dynamic_app_link_components, в котором вы настраиваете динамические правила. - Динамические правила могут включать сопоставители шаблонов для пути, фрагмента и параметров запроса.
- Вы также можете исключить любой шаблон, чтобы соответствующие ему URL не открывали приложение.
- В этом примере показаны сопоставители для пути (
"/"), фрагмента ("#") и параметров запроса ("?"), а также исключенные сопоставители ("exclude"). - Если какие-либо поля в файле неправильно отформатированы или пусты, Android отбрасывает динамические правила, и устройство возвращается к правилам, которые статически определены в манифесте приложения.
Динамические правила могут указывать только правила, которые применяются в рамках доменов, объявленных в файле манифеста приложения. Подробнее об объявлении динамических правил…
Объявление динамических правил
Динамические ссылки на приложения поддерживают новое расширение отношений dynamic_app_link_components, которое содержит массив объектов правил. Каждое правило определяется с помощью сопоставителей шаблонов для путей, фрагментов и параметров запроса, которые будут открывать ваше приложение. Сопоставители также можно исключить по отдельности, чтобы они не открывали ваше приложение. Все это необязательно.
- Соответствие пути
- Клавиша: /
- Значение: одна строка, соответствующая выражению для пути URL.
- Сопоставление фрагментов
- Ключ: #
- Значение: одна строка, соответствующая выражению для фрагмента URL.
- Соответствие параметру запроса
- Клавиша: ?
- Значение: словарь для сопоставления пар "ключ-значение" в параметрах запроса URL.
- Например, словарь {"
?", {"dl": "*", "in_app":"true"} будет соответствовать строке запроса "?in_app=true&dl=abc". - Порядок пар "ключ-значение" в словаре не обязательно должен совпадать с порядком пар в строке запроса. Кроме того, словарь не должен соответствовать всем парам "ключ-значение" в строке запроса, но совпадение должно быть найдено для каждой записи словаря.
- Например, словарь будет соответствовать строке запроса
?lang=en&in_app=true&tz=pst&dl=abc, но не будет соответствовать строке запроса?lang=en&tz=pst&dl=abc.
- Исключено
- Ключ: "exclude"
- Value. Необязательное логическое значение для каждого правила, заданного в
dynamic_app_link_components(см. пример).
В шаблонах соответствия можно использовать следующие специальные символы:
- "*" соответствует любому количеству символов до символа, который в шаблоне указан после подстановочного знака.
- "?" соответствует любому символу;
- "?*" соответствует одному или нескольким символам.
Других ограничений на символы в значениях нет.
Как упорядочить динамические правила
Порядок, в котором объявлены правила, имеет значение. Android оценивает каждое правило по порядку, пока не найдет совпадение.
В примере ниже показано, как порядок может повлиять на обработку. Первое правило соответствует всем путям ("*"), но исключает совпадения (exclude: true), то есть запрещает открывать приложение по любым URL. В этом случае второе правило, разрешающее "/path1", никогда не будет оцениваться.
dynamic_app_link_components: [
{"/": "*", "exclude": true},
{"/": "/path1"}
]
Однако в следующем примере правило "/path1" объявлено первым, поэтому оно будет оцениваться первым и откроет приложение для URL, соответствующего "/path1". Второе правило, которое запрещает открывать приложение по любым URL, будет проверяться вторым, но только если не сработает первое правило.
dynamic_app_link_components: [
{"/": "/path1"},
{"/": "*", "exclude": true}
]
Если совпадений в списке объявленных компонентов не найдено, URL не откроет приложение. В следующем примере ни один из путей не совпадает с "/path3", поэтому устройство будет считать этот путь исключенным.
dynamic_app_link_components: [
{"/": "/path1"},
{"/": "/path2"}
]
Это важно, если вы хотите, чтобы dynamic_app_link_components исключал только определенные части URL, но разрешал все остальные. В примере ниже, если не добавить последнее правило, разрешающее все остальные пути, все URL будут исключены из приложения.
dynamic_app_link_components: [
{"/": "/path1", "exclude": true},
{"/": "*"}
]
Правильно задавайте область действия динамических правил
При определении серверных правил для использования с динамическими ссылками на приложения в Android 15 и более поздних версиях важно правильно определить их область действия, чтобы они работали и дополняли статические фильтры интентов, объявленные в манифесте приложения.
Динамические правила, объявленные в файле assetlinks.json, могут указывать правила только для хостов, объявленных в файле AndroidManifest.xml приложения. Динамические правила не могут расширять область действия правил URL, которые вы статически объявляете в манифесте приложения.
Поэтому мы рекомендуем использовать этот подход как для динамических, так и для статических правил:
- В манифесте приложения задайте правила с максимально широкой областью действия, например указав только схему и домен.
- Для дальнейшей настройки, например маршрутизации на уровне пути, используйте динамические правила на стороне сервера.
При такой конфигурации вы сможете динамически добавлять новые пути ссылок на приложение в файл assetlinks.json по мере необходимости, зная, что они будут соответствовать широкой области действия, заданной в манифесте приложения.
Объявите dynamic_app_link_components только один раз
Чтобы правила обрабатывались правильно, объявите только один объект dynamic_app_link_components во всех записях для определенного сайта, отношения и приложения.
- Найдите несколько записей для одного сайта, отношения и приложения, в которых объявлен объект dynamic_app_link_components.
- Проверьте, не объявлено ли несколько объектов dynamic_app_link_components в одном операторе.
В таких случаях Android не гарантирует, какая конфигурация динамических правил будет использоваться.
Совместимость динамических правил с более ранними конфигурациями ссылок на приложения
Если вы уже поддерживаете ссылки на приложение, то можете добавить поддержку динамических ссылок на приложение непосредственно в существующий файл assetlinks.json. Поля отношений для проверки ссылок на приложение остаются прежними, и вы можете добавить новые поля расширения отношений для динамических правил без каких-либо других изменений.
Устройства Android с Android 14 (API уровня 34 или более ранней версии) игнорируют новые поля расширения отношений для динамических правил, а устройства с Android 15 и более поздними версиями объединяют эти правила с правилами, определенными в манифесте.
Опубликуйте файл подтверждения JSON
Файл подтверждения JSON необходимо опубликовать по следующему адресу:
https://domain.name/.well-known/assetlinks.json
Убедитесь в следующем:
- Файл
assetlinks.jsonпередается с типом контентаapplication/json. - Файл
assetlinks.jsonдолжен быть доступен по протоколу HTTPS, даже если в фильтрах интентов приложения в качестве схемы данных указан протокол HTTPS. - Файл
assetlinks.jsonдолжен быть доступен без переадресации (включая переадресацию 301 и 302). - Если ссылки на приложение поддерживают несколько доменов хоста, то файл
assetlinks.jsonнужно опубликовать в каждом из них. Подробнее о том, как настроить поддержку ссылок на приложение для нескольких хостов… - Не публикуйте приложение, если в файле манифеста указаны тестовые URL, которые могут быть недоступны для пользователей (например, те, которые открываются только через VPN). В таких случаях можно настроить варианты сборки, чтобы для сборок, предназначенных для разработки, создавался другой файл манифеста.
Ознакомьтесь со следующими руководствами:
- Как создать список операторов
- App Links Assistant в Android Studio
- Инструменты разработчика для ссылок на приложение