Ссылки приложений — это глубокие ссылки, использующие протокол HTTP или HTTPS и проверяемые Android на наличие связи с вашим сайтом. Чтобы зарегистрироваться для обработки ссылок приложений, выполните следующие действия:
- Добавьте в манифест вашего приложения один или несколько фильтров намерений, которые указывают домен или URL-адреса вашего веб-сайта.
- Добавьте
autoVerify="true"attribute
к элементам фильтра Intent. Это даст системе сигнал о необходимости проверки схемы и домена(ов) хоста на соответствие конфигурацииassetlinks.json
вашего сайта. - Объявляйте ассоциации веб-сайтов.
Ниже приведен пример объявления App Link со схемами и хостами, а также autoVerify="true
":
<activity
android:name=".MainActivity"
android:exported="true"
...>
<!-- Make sure you explicitly set android:autoVerify to "true". -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- If a user clicks on a link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<!-- Do not include other schemes, as this will prevent verification. -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="www.example.com" />
<data android:host="*.example.com" />
</intent-filter>
</activity>
Ключевые моменты кода
- AutoVerify : Атрибут
android:autoVerify="true
" обязателен для ссылок приложений. Он сигнализирует системе о необходимости проверки связи между вашим приложением и схемами и доменами, указанными в тегах<data>
. Рекомендуется добавлятьautoVerify="true
" к каждому фильтру намерений, который должен быть проверяемым. - Элементы данных : каждый фильтр намерений ссылок приложений должен включать один или несколько элементов
<data>
, которые указывают схемы и форматы хоста, соответствующие проверяемому домену вашего веб-сайта. - Схемы : Фильтр намерений должен включать элементы
<data>
для схемhttp
иhttps
. Хосты : вы можете добавить элементы
<data>
для сопоставления одного или нескольких хостов. Используйте подстановочный знак (*
) для сопоставления нескольких поддоменов (например,*.example.com
). Система попытается проверить каждый хост по файлу assetlinks.json на вашем сайте. Обратите внимание, что любая маршрутизация на уровне пути должна обрабатываться файлом assetlinks.json (см. раздел «Рекомендации» ниже).Несколько хостов : если вы объявляете несколько доменов хостов, система (на Android 12+) попытается проверить каждый из них. Если хотя бы один хост проверен, приложение становится обработчиком ссылок с этого хоста по умолчанию. На Android 11 и ниже проверка завершается неудачей, если хотя бы один хост не может быть проверен.
Фильтры с несколькими намерениями : важно создавать отдельные фильтры, если вы намереваетесь объявить уникальные URL-адреса (например, определенную комбинацию схемы и хоста), поскольку несколько элементов
<data>
в одном фильтре намерений объединяются вместе для учета всех вариаций их объединенных атрибутов.
Соображения относительно правил фильтрации манифеста
При настройке фильтров для использования с динамическими ссылками приложений в Android 15 и более поздних версиях важно помнить, что динамические правила, объявленные в файле assetlinks.json на стороне сервера, не могут расширять область действия правил URL, которые вы объявляете статически в манифесте приложения.
По этой причине мы рекомендуем использовать следующий подход:
- В манифесте приложения задайте максимально широкую область действия, например, указав только схему и домен.
- Для дальнейшей детализации, например маршрутизации на уровне пути, используйте правила assetlinks.json на стороне сервера.
При такой идеальной конфигурации вы сможете динамически добавлять новые пути ссылок приложений в файл assetlinks.json
по мере необходимости, зная, что они будут соответствовать широкой области действия, которую вы установили в манифесте приложения.
Поддержка ссылок приложений для нескольких хостов
Система должна иметь возможность проверить хост, указанный в элементах данных фильтров URL-адресов приложения, на соответствие файлам ссылок на цифровые активы, размещённым на соответствующих веб-доменах в этом фильтре намерений. В случае неудачи система по умолчанию использует стандартное поведение для разрешения намерения, как описано в разделе Создание глубоких ссылок на контент приложения . Однако приложение по-прежнему может быть проверено как обработчик по умолчанию для любого из шаблонов URL-адресов, определённых в других фильтрах намерений приложения.
Например, приложение со следующими фильтрами намерений пройдет проверку только для https://www.example.com
, если файл assetlinks.json
будет найден по адресу https://www.example.com/.well-known/assetlinks.json
, но не по https://www.example.net/.well-known/assetlinks.json
:
<application>
<activity android:name=”MainActivity”>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="www.example.com" />
</intent-filter>
</activity>
<activity android:name="SecondActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
<data android:host="www.example.net" />
</intent-filter>
</activity>
</application>
Поддержка привязки приложений к нескольким поддоменам
Протокол Digital Asset Links рассматривает поддомены в фильтрах намерений как уникальные, отдельные хосты. Поэтому, если в вашем фильтре намерений указано несколько хостов с разными поддоменами, необходимо опубликовать корректный файл assetlinks.json
для каждого домена. Например, следующий фильтр намерений включает www.example.com
и mobile.example.com
в качестве допустимых хостов URL намерений. Таким образом, корректный файл assetlinks.json
должен быть опубликован как по адресу https://www.example.com/.well-known/assetlinks.json
, так и по https://mobile.example.com/.well-known/assetlinks.json
.
<application>
<activity android:name="MainActivity">
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
<data android:scheme="https" />
<data android:host="www.example.com" />
<data android:host="mobile.example.com" />
</intent-filter>
</activity>
</application>
В качестве альтернативы, если вы объявляете имя хоста с подстановочным знаком (например, *.example.com
), вы должны опубликовать файл assetlinks.json
в корневом имени хоста ( example.com
). Например, приложение со следующим фильтром намерений пройдёт проверку для любого подимена example.com
(например, foo.example.com
), если файл assetlinks.json
опубликован по адресу https://example.com/.well-known/assetlinks.json
:
<application>
<activity android:name="MainActivity">
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
<data android:host="*.example.com" />
</intent-filter>
</activity>
</application>
Проверьте наличие нескольких приложений, связанных с одним и тем же доменом.
Если вы публикуете несколько приложений, каждое из которых связано с одним и тем же доменом, каждое из них может быть успешно проверено. Однако, если приложения могут определить один и тот же хост и путь к домену, как это может быть в случае с облегчённой и полной версиями приложения, только приложение, установленное последним, сможет определить веб-намерения для этого домена.
В таком случае проверьте наличие конфликтующих приложений на устройстве пользователя, при условии, что у вас есть необходимые разрешения на доступ к пакетам . Затем отобразите в своём приложении диалоговое окно выбора, содержащее результаты вызова queryIntentActivities
. Пользователь может выбрать предпочитаемое приложение из списка соответствующих приложений, отображаемых в диалоговом окне.