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

App Links — это прямые ссылки, использующие протоколы HTTP или HTTPS и проверяемые Android на связь с вашим веб-сайтом. Для регистрации и обработки App Links выполните следующие шаги:

  1. Добавьте в манифест вашего приложения один или несколько фильтров Intent, указывающих домен или 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 " обязателен для App Links. Он сигнализирует системе о необходимости проверить связь между вашим приложением и схемами и доменами, указанными в тегах <data> . Рекомендуется добавлять autoVerify="true " к каждому фильтру Intent, который вы хотите сделать проверяемым.
  • Элементы данных : Каждый фильтр App Links Intent должен включать один или несколько элементов <data> , которые указывают схемы и форматы хостов, соответствующие вашему проверяемому домену веб-сайта.
  • Схемы : Фильтр намерений должен включать элементы <data> как для схем http , так и https .
  • Хосты : При желании вы можете добавить элементы <data> для сопоставления одного или нескольких хостов. Используйте подстановочный знак ( * ) для сопоставления нескольких поддоменов (например, *.example.com ). Система попытается проверить каждый хост на соответствие вашему файлу assetlinks.json на вашем веб-сайте. Обратите внимание, что любая маршрутизация на уровне пути должна обрабатываться файлом assetlinks.json (см. раздел «Рекомендации» ниже).

  • Несколько хостов : Если вы указываете несколько доменов хостов, система (на Android 12 и выше) пытается проверить каждый из них. Если какой-либо хост проверен, приложение становится обработчиком по умолчанию для ссылок с этого проверенного хоста. На Android 11 и ниже проверка завершается неудачей, если не удается проверить хотя бы один хост.

  • Фильтры для нескольких намерений : Важно создавать отдельные фильтры, если вы хотите указать уникальные URL-адреса (например, определенную комбинацию схемы и хоста), поскольку несколько элементов <data> в одном фильтре намерения объединяются для учета всех вариаций их комбинированных атрибутов.

Рекомендации по применению правил фильтрации манифестов

Если вы настраиваете фильтры для использования с динамическими ссылками приложений в Android 15 и выше, важно помнить, что динамические правила, объявленные в файле assetlinks.json на стороне сервера, не могут расширять область действия правил URL, которые вы объявляете статически в манифесте приложения.

По этой причине мы рекомендуем использовать следующий подход:

  • В манифесте приложения задайте максимально широкую область действия, например, указав только схему и домен.
  • Для дальнейшей детализации, например, маршрутизации на уровне пути, используйте правила assetlinks.json, хранящиеся на стороне сервера.

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