Добавить фильтры намерений для ссылок приложений

Ссылки приложений — это глубокие ссылки, использующие протокол HTTP или HTTPS и проверяемые Android на наличие связи с вашим сайтом. Чтобы зарегистрироваться для обработки ссылок приложений, выполните следующие действия:

  1. Добавьте в манифест вашего приложения один или несколько фильтров намерений, которые указывают домен или URL-адреса вашего веб-сайта.
  2. Добавьте autoVerify="true"attribute к элементам фильтра Intent. Это даст системе сигнал о необходимости проверки схемы и домена(ов) хоста на соответствие конфигурации assetlinks.json вашего сайта.
  3. Объявляйте ассоциации веб-сайтов.

Ниже приведен пример объявления 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 . Пользователь может выбрать предпочитаемое приложение из списка соответствующих приложений, отображаемых в диалоговом окне.