С помощью действий приложения пользователи могут сразу перейти к содержимому вашего приложения, сказав что-то вроде: «Эй, Google, покажи мне меню Three Dot Cafe в exampleApp». Эта функция называется глубокими ссылками . Она может облегчить пользователям работу с вашим приложением.
Чтобы выполнить запрос такого типа, Google Assistant создает глубокую ссылку на соответствующий контент в вашем приложении. Если вы активно поддерживаете свой веб-сайт с контентом или информацией о продуктах, а ваши глубокие ссылки в приложении организованы вокруг этого общедоступного веб-контента, вы можете настроить Ассистента для получения URL-адресов для выполнения действий с вашего веб-сайта с помощью веб-инвентаря.
Веб-инвентаризация – это расположение на веб-сайте URL-адресов элементов, поддерживаемых вашим приложением. Когда пользователь вызывает действие вашего приложения, Ассистент сопоставляет пользовательский запрос, например «Кафе «Три точки»,» с соответствующими URL-адресами в индексе поиска Google веб-сайта, который вы указываете в файле shortcuts.xml
для вашего приложения Android.
Преимущества
Веб-инвентаризация дает преимущества приложениям с большими, регулярно обновляемыми списками элементов, которые пользователи просматривают или заказывают в приложении:
Данные веб-инвентаря находятся на вашем веб-сайте, в отличие от встроенных данных инвентаризации , которые хранят списки элементов в вашем приложении. Предоставление Помощнику доступа к веб-данным позволяет избежать риска устаревших встроенных данных инвентаризации, которые можно обновить только путем публикации новой версии приложения.
Встроенные запасы ограничены 1000 единицами. Напротив, веб-инвентарь не имеет ограничений по количеству элементов и может расширяться вместе с вашими потребностями.
Веб-инвентаризация может упростить логику приложения, позволяя вашему исполнению обрабатывать только предсказуемые URL-адреса контента, полученные с вашего веб-сайта. Напротив, если инвентаризация не настроена, Ассистент генерирует глубокие ссылки для выполнения, сопоставляя параметры намерения с переменными в шаблоне URL-адреса. Затем вам необходимо будет проанализировать этот динамически генерируемый URL-адрес, чтобы определить, запросил ли пользователь поддерживаемый объект в вашем приложении.
Как это работает
Во время действия приложения Ассистент выполняет глубокие ссылки на контент приложения через встроенные намерения (BII), которые вы определяете в shortcuts.xml
. Assistant использует обработку естественного языка для идентификации соответствующих элементов в запросе пользователя и извлекает их в параметры BII. Затем Ассистент создает глубокую ссылку, используя параметры на основе вашей конфигурации выполнения в shortcuts.xml.
Существует три метода создания глубоких ссылок для выполнения:
- Сопоставление параметров : сопоставляет параметры намерения с заполнителями в шаблоне URL-адреса выполнения.
- Встроенная инвентаризация : сопоставляет параметры намерения со списком поддерживаемых
entities
определенных в приложении. - Веб-инвентаризация: сопоставляет параметры намерений с содержимым, найденным в поисковом индексе Google веб-сайта.
Веб-инвентаризация — это определенный разработчиком шаблон URL-адреса веб-сайта, например https://www.exampleapp.com/restaurants/.*
, представляющий набор сущностей, поддерживаемых приложением.
Если параметр BII настроен для веб-инвентаря, Ассистент запрашивает веб-сайт, чтобы выполнить сопоставление объекта с запросом пользователя. Затем Ассистент передает результаты URL-адресов, соответствующие настроенному шаблону URL-адресов, например https://www.exampleapp.com/restaurants/three-dot-cafe
, для вашего выполнения.
![](https://developer.android.com/static/guide/app-actions/images/web-inventory-flow.png?authuser=7&hl=ru)
Поддерживаемые встроенные намерения
Веб-инвентаризация поддерживается для определенных параметров намерений следующими BII:
- [
actions.intent.CREATE_REVIEW
] - [
actions.intent.GET_NEWS_ARTICLE
] - [
actions.intent.GET_REVIEW
] - [
actions.intent.GET_THING
] - [
actions.intent.ORDER_MENU_ITEM
] - [
actions.intent.GET_EXERCISE_PLAN
] - [
actions.intent.GET_DIGITAL_DOCUMENT
] - [
actions.intent.GET_ITEM_LIST
] - [
actions.intent.GET_OFFER
] - [
actions.intent.CREATE_OFFER
] - [
actions.intent.GET_PRODUCT
] - [
actions.intent.UPDATE_CART
] - [
actions.intent.CREATE_SOCIAL_MEDIA_CONNECTION
] - [
actions.intent.GET_IMAGE_OBJECT
] - [
actions.intent.GET_SOCIAL_MEDIA_POSTING
] - [
actions.intent.GET_SOCIAL_MEDIA_PROFILE
] - [
actions.intent.CREATE_TAXI_RESERVATION
] - [
actions.intent.CREATE_FLIGHT_RESERVATION
] - [
actions.intent.CREATE_LODGING_RESERVATION
] - [
actions.intent.GET_LOCAL_BUSINESS
] - [
actions.intent.GET_RESERVATION
] - [
actions.intent.UPDATE_RESERVATION
]
Добавить веб-ресурсы
Как только вы определите поддерживаемый BII, вы включите его для веб-инвентаризации, обновив shortcuts.xml
с подробностями о вашем веб-сайте. Файл shortcuts.xml
— это ресурс в вашем проекте Android, в котором вы определяете BII, соответствующие функциям вашего приложения, и то, как каждый BII должен создавать глубокие ссылки для выполнения вашим приложением. Дополнительные сведения о shortcuts.xml
см. в разделе Создание файла Shorts.xml .
Чтобы использовать веб-инвентаризацию для поддерживаемого BII, выполните следующие действия:
В файле
shortcuts.xml
вашего приложения добавьте тег<capability>
с атрибутомandroid:name
равным имени BII, который вы обрабатываете с помощью веб-инвентаря, например:actions.intent.ORDER_MENU_ITEM
.В теге
<capability>
добавьте тег<intent>
с атрибутомandroid:action
, равным имени представления, которое будет активировано этим намерением.В тот же тег
<intent>
добавьте тег<parameter>
и установите для его атрибутаandroid:name
параметр BII, который наиболее точно соответствует объекту, описанному на ваших веб-страницах. Например, при предоставлении веб-инвентаря дляORDER_MENU_ITEM
вам следует связать страницы меню сmenuItem.name
.В новый тег
<parameter>
добавьте тег<data>
и задайте для его атрибутаandroid:pathPattern
шаблон URL-адреса пути, который вы хотите использовать для веб-инвентаря.
Когда вы настраиваете shortcuts.xml
с помощью этих шагов, Ассистент может получать веб-контент из индекса поиска Google по шаблону URL-адреса, указанному вами в атрибуте android:pathPattern
. Затем Ассистент предоставляет вам значение URL-адреса, используя результаты, соответствующие заданному вами шаблону пути URL-адреса. Затем ваше приложение направляет пользователя в определенное место в вашем приложении на основе данных URL-адреса, предоставленных Ассистентом.
Например, ваш веб-сайт содержит списки продуктов, URL-адрес которых начинается с https://www.examplecafe.com/items/
. Вы используете значение pathPattern
https://www.examplecafe.com/items/.*
, а Ассистент использует этот шаблон URL-адреса при веб-поиске, чтобы найти URL-адрес выполнения, например https://www.examplecafe.com/items/item123
.
Если Ассистент находит соответствующий URL-адрес веб-ресурса, он предоставляет URL-адрес в поле <data>
намерения выполнения, как если бы это была глубокая ссылка. Используйте метод getData()
намерения, чтобы получить URL-адрес как объект Uri
. Действие приложения, которое получает намерение, отвечает за интерпретацию URL-адреса и активацию соответствующего пользовательского интерфейса приложения.
Пример ярлыка.xml
В следующем примере определяется BII ORDER_MENU_ITEM
, который предоставляет веб-инвентаризацию для возврата результатов URL-адресов для запросов, содержащих параметр BII menuItem.name
:
<?xml version="1.0" encoding="utf-8"?>
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<capability android:name="actions.intent.ORDER_MENU_ITEM">
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.example.myapp"
android:targetClass="com.example.myapp.OrderMenuItemActivity">
<!-- Define URL match pattern in the pathPattern data field -->
<parameter android:name="menuItem.name">
<data android:pathPattern="https://www.examplecafe.com/items/.*"/>
</parameter>
</intent>
</capability>
</shortcuts>
В приведенном выше примере для menuItem.name
указан pathPattern
, что указывает Ассистенту возвращать только те URL-адреса, которые соответствуют шаблону URL-адреса: https://www.examplecafe.com/items/.*
Дополнительные примеры BII в shortcuts.xml
, поддерживающие веб-инвентаризацию, доступны в справочной документации .
Обработка резервного варианта для отсутствующих результатов
В ситуациях, когда результаты веб-инвентаризации не возвращаются к вашему исполнению, ваше приложение должно реализовать резервную логику, чтобы выполнить действие с максимально возможным удобством для пользователя. Ситуации, вызывающие отсутствие результатов, включают:
- Отсутствует параметр намерения : пользователь пропустил ожидаемый параметр в своем запросе или Ассистент не понял параметр в запросе пользователя.
- Отсутствует результат URL : Ассистенту не удалось найти на вашем веб-сайте объект, соответствующий запросу пользователя.
Вы можете обрабатывать отсутствующие значения параметров, определив несколько элементов <intent>
для возможности. Если Ассистент не может удовлетворить первое намерение, он возвращается к следующему намерению и так далее.
Резервные намерения не должны требовать параметров. Вместо этого им следует реализовать эту возможность с помощью более общей глубокой ссылки, например отображения результатов поиска по пользовательскому запросу.
В следующем примере файла shortcuts.xml
BII ORDER_MENU_ITEM
определяет два выполнения: первое ожидает URL-адрес из параметра menuItem.name
. Второй не требует параметров и направляет пользователя на страницу, на которой показаны все пункты меню.
<capability android:name="actions.intent.ORDER_MENU_ITEM">
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.example.myapp"
android:targetClass="com.example.myapp.OrderMenuItemActivity">
<parameter android:name="menuItem.name">
<data android:pathPattern="https://www.examplecafe.com/items/.*"/>
</parameter>
</intent>
<!-- Fallback intent with no required parameters -->
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.example.myapp"
android:targetClass="com.example.myapp.ViewMenuActivity">
<url-template android:value="myapp://app.examplecafe.com/menu/all-items" />
</intent>
</capability>
В ситуациях, когда URL-адрес веб-инвентаря не возвращается, содержимое пользовательского запроса все равно может использоваться в резервных целях, например, для отображения результатов поиска.
В следующем примере shortcuts.xml
определены два элемента намерения:
- Для первого требуется глубокая ссылка на веб-ресурсы из параметра
menuItem.name
. - Если глубокая ссылка не возвращается, второе намерение отображает результаты поиска, используя пользовательский запрос из
menuItem.name
, если он присутствует.
<capability android:name="actions.intent.ORDER_MENU_ITEM">
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.example.myapp"
android:targetClass="com.example.myapp.OrderMenuItemActivity">
<parameter android:name="menuItem.name">
<data android:pathPattern="https://www.examplecafe.com/items/.*" />
</parameter>
</intent>
<!-- Fallback intent displaying search results, using "menuItem.name" -->
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.example.myapp"
android:targetClass="com.example.myapp.SearchMenuActivity">
<parameter-mapping android:name="menuItem.name" android:key="food" />
<url-template android:value="https://www.examplecafe.com/search?q={?food}" />
</intent>
</capability>
Добавьте поиск в приложении с веб-инвентарем
Вы можете разрешить пользователям искать веб-контент в вашем приложении, объединив веб-инвентарь с реализацией actions.intent.GET\_THING
BII.
Этот BII ищет контент или объекты, используя встроенную функцию поиска по умолчанию в приложении, позволяя запрашивать такие запросы, как: «Эй, Google, покажи мне походы по водопаду в SampleApp». При настройке веб-инвентаризации для параметра thing.name
, передаваемого GET_THING
BII, результаты сопоставления объектов с вашего веб-сайта передаются для выполнения.
Примеры файла shortcuts.xml
веб-инвентаря см. в справочнике GET\_THING
BII .
Тестирование веб-ресурсов
Когда вы определяете веб-инвентарь для выполнения BII, Ассистент создает глубокую ссылку, используя веб-результаты, соответствующие шаблону urlTemplate
, который вы определили для указанного параметра BII. Если результат веб-инвентаризации не удается найти, Ассистент создает URL-адрес, соответствующий шаблону urlTemplate
вашего резервного намерения. Вы можете протестировать реализацию своего веб-инвентаря, проверив, что ссылки, которые предоставляет Ассистент, являются URL-адресами, соответствующими шаблонам urlTemplate
вашего веб-инвентаря.
В следующем примере ORDER_MENU_ITEM
BII Ассистент создает ссылки для выполнения веб-инвентаря, соответствующие шаблону urlFilter
, указанному в параметре menuItem.name
, например: https://www.examplecafe.com/items/nuggets
. Второе намерение принимает значение menuItem.name
и выполняет поиск, если первое намерение не соответствует шаблону URL-адреса.
<capability android:name="actions.intent.ORDER_MENU_ITEM">
<!-- web inventory fulfillment -->
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.example.myapp"
android:targetClass="com.example.myapp.OrderMenuItemActivity">
<parameter name="menuItem.name">
<data android:pathPattern="https://www.examplecafe.com/items/.*" />
</parameter>
</intent>
<!-- search intent -->
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.example.myapp"
android:targetClass="com.example.myapp.MenuSearchActivity">
<parameter-mapping android:name="menuItem.name" android:key="food" />
<url-template android:value="https://www.examplecafe.com/search?q={?food}" />
</intent>
</capability>
Используйте инструмент тестирования действий приложения , чтобы протестировать веб-инвентарь на физическом или виртуальном устройстве.
Чтобы использовать инструмент тестирования, выполните следующие действия:
- Подключите тестовое устройство с работающим приложением.
- В Android Studio выберите «Инструменты» > «Действия приложения» > «Инструмент проверки действий приложения» .
- Нажмите Создать предварительный просмотр .
- В Android Studio запустите приложение на тестовом устройстве.
- Используйте приложение «Ассистент» на тестовом устройстве, чтобы протестировать действие приложения. Например, вы можете сказать что-то вроде: «Окей, Google, закажи наггетсы в exampleCafe».
- Наблюдайте за поведением своего приложения или используйте отладчик Android Studio , чтобы проверить желаемый результат действия.