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