Повысьте вовлеченность пользователей в приложение, взаимодействуя с ними там, где они находятся. Интегрируйте Engage SDK, чтобы предоставлять персонализированные рекомендации и дополнительный контент непосредственно пользователям на различных платформах устройства, таких как «Коллекции» , «Развлекательное пространство » и Play Store. Интеграция добавляет менее 50 КБ (в сжатом виде) к среднему размеру APK-файла и занимает у большинства приложений около недели на разработку. Узнайте больше на нашем корпоративном сайте .
В этом руководстве содержатся инструкции для партнеров-разработчиков по размещению контента о путешествиях и мероприятиях на информационных платформах Engage.
Детали интеграции
Терминология
Данная интеграция включает следующие типы кластеров: Рекомендации , Рекомендуемые , Бронирование и Продолжить поиск .
Кластеры рекомендаций отображают персонализированные предложения по путешествиям и мероприятиям от конкретного разработчика-партнера. Эти рекомендации могут быть персонализированы для пользователя или обобщены (например, актуальные темы). Используйте их для отображения рекомендаций по статьям, мероприятиям, вариантам размещения или достопримечательностям.
- Кластер рекомендаций может состоять из объявлений типов
ArticleEntity,EventEntity,LodgingEntity,PointOfInterestEntityилиStoreEntity, но не из смеси различных типов сущностей.
Ваши рекомендации имеют следующую структуру:
Кластер рекомендаций: элемент пользовательского интерфейса, содержащий группу рекомендаций от одного и того же партнера-разработчика.
Сущность: Объект, представляющий отдельный элемент в кластере. Данная интеграция предоставляет некоторые сущности, которые будут отображаться с помощью кластера рекомендаций:
ArticleEntity : ArticleEntity представляет собой рекомендацию текстового контента, связанного с путешествиями и мероприятиями. Его можно использовать для статей, постов в блогах, маркетингового контента, новостных фрагментов и т. д.

Рисунок 1: Пользовательский интерфейс, отображающий отдельный объект ArticleEntity в кластере «Рекомендации». EventEntity : EventEntity представляет собой событие, которое произойдет в будущем. Время начала события — это важная информация, которую необходимо передать пользователям.

Рисунок 2: Пользовательский интерфейс, отображающий отдельный объект EventEntity в кластере «Рекомендации». LodgingEntity : LodgingEntity обозначает тип жилья, например, отель, апартаменты или дом для отдыха, сдаваемый в краткосрочную и долгосрочную аренду.

Рисунок 3: Пользовательский интерфейс, отображающий отдельный объект размещения (LodgingEntity) в кластере рекомендаций. StoreEntity : StoreEntity обозначает магазин, ресторан, кафе и т. д. Он выделяет контент, где информация о заведении общественного питания или магазине является критически важной для передачи пользователям.

Рисунок 4: Пользовательский интерфейс, отображающий отдельный объект StoreEntity в кластере «Рекомендации». Объект PointOfInterestEntity : PointOfInterestEntity обозначает место, представляющее интерес, например, автозаправочную станцию, место проведения мероприятия, тематический парк, музей, туристическую достопримечательность, пешеходную тропу и т. д. Он выделяет контент, где местоположение является критически важной информацией, которую необходимо передать пользователям. Его не следует использовать для обозначения гостиниц, магазинов или ресторанов.

Рисунок 5: Пользовательский интерфейс, отображающий отдельный объект PointOfInterestEntity в кластере «Рекомендации».
- Кластер рекомендаций может состоять из объявлений типов
В кластере «Бронирование» отображается контент, недавно использованный пользователями из разных партнерских компаний-разработчиков, в рамках одной группы пользовательского интерфейса. Каждому партнеру-разработчику будет разрешено транслировать максимум 10 объектов в кластере «Бронирование».
Содержание вашего бронирования может иметь следующую структуру:
RestaurantReservationEntity : RestaurantReservationEntity представляет собой бронирование столика в ресторане или кафе и помогает пользователям отслеживать предстоящие или текущие бронирования в ресторанах.

Рисунок 6. Пользовательский интерфейс, отображающий отдельный объект RestaurantReservationEntity в кластере бронирований. EventReservationEntity : EventReservationEntity представляет собой бронирование на мероприятие и помогает пользователям отслеживать бронирования предстоящих или текущих мероприятий. Мероприятия могут включать, помимо прочего, следующие:
- Спортивные мероприятия, такие как бронирование мест на футбольный матч.
- Игровые мероприятия, такие как бронирование мест для киберспорта.
- Развлекательные мероприятия, такие как бронирование билетов в кинотеатр, концерт, театр, автограф-сессия.
- Бронирование поездок или посещение достопримечательностей, таких как экскурсии с гидом, билеты в музеи.
- Бронирование мест на мероприятия / семинары / конференции
- Бронирование образовательных/тренинговых сессий

Рисунок 7. Пользовательский интерфейс, отображающий отдельный объект EventReservationEntity в кластере резервирования. LodgingReservationEntity : LodgingEntityReservation представляет собой бронирование жилья для путешествия и помогает пользователям отслеживать предстоящие или текущие бронирования отелей или апартаментов для отдыха.

Рисунок 8. Пользовательский интерфейс, отображающий отдельный объект LodgingReservationEntity в кластере бронирований. TransportationReservationEntity : TransportationReservationEntity представляет собой объект бронирования транспортных услуг любым видом транспорта и помогает пользователям отслеживать бронирования на предстоящие или текущие рейсы, паромы, поезда, автобусы, услуги такси или круизы.

Рисунок 9. Пользовательский интерфейс, отображающий отдельный объект TransportationReservationEntity в кластере бронирований. VehicleRentalReservationEntity : VehicleRentalReservationEntity представляет собой объект бронирования автомобиля в аренду и помогает пользователям отслеживать предстоящие или текущие бронирования автомобилей в аренду.

Рисунок 10. Пользовательский интерфейс, отображающий отдельный объект VehicleRentalReservationEntity в кластере бронирований.
В разделе «Рекомендуемые» отображается подборка объектов от нескольких партнеров-разработчиков в одном интерфейсе. Будет создан единый раздел «Рекомендуемые», который будет отображаться в верхней части интерфейса с приоритетным размещением над всеми разделами «Рекомендуемые». Каждому партнеру-разработчику будет разрешено транслировать до 10 объектов в разделе «Рекомендуемые».
GenericFeaturedEntity : GenericFeaturedEntity отличается от элемента «Рекомендация» тем, что элемент «Рекомендуемый» должен использоваться для отображения одного наиболее важного контента от разработчиков и представлять собой единственный наиболее важный контент, который будет интересен и актуален для пользователей.

Рисунок 11: Пользовательский интерфейс, отображающий FeaturedCluster со списком GenericFeaturedEntity.
Кластер «Продолжить поиск» помогает пользователям возобновить предыдущий поиск путешествий, отображая список поисковых запросов, которые пользователь недавно использовал во всех своих приложениях для путешествий. Кластер будет закреплен на второй позиции, после бронирований и перед кластерами рекомендуемых и рекомендуемых приложений. Каждому партнеру-разработчику будет разрешено транслировать до 3 объектов в кластере «Продолжить поиск».
- Объект PointOfInterestEntity: PointOfInterestEntity представляет собой место, представляющее интерес, например, автозаправочную станцию, место проведения мероприятия, тематический парк, музей, туристическую достопримечательность, пешеходную тропу и т. д. Он выделяет контент, который пользователь ранее искал.
Предварительная работа
Минимальный уровень API: 19
Добавьте библиотеку com.google.android.engage:engage-core в ваше приложение:
dependencies {
// Make sure you also include that repository in your project's build.gradle file.
implementation 'com.google.android.engage:engage-core:1.5.12'
}
Краткое содержание
Данная архитектура основана на реализации привязанного сервиса .
Для различных типов кластеров объем данных, которые может публиковать клиент, ограничен следующими лимитами:
| Тип кластера | Границы кластера | Минимальное количество объектов в кластере | Максимальное количество объектов в кластере. |
|---|---|---|---|
| Кластер(ы) рекомендаций | Максимум 7 | По крайней мере 1 | Не более 50 ( ArticleEntity , EventEntity , LodgingEntity , StoreEntity или PointOfInterestEntity ) |
| Кластер бронирования | Не более 1 | По крайней мере 1 | Не более 20 ( RestaurantReservationEntity , EventReservationEntity , LodgingReservationEntity , TransportationReservationEntity или VehicleRentalReservationEntity ) |
| Выделенный кластер | Не более 1 | По крайней мере 1 | Максимум 20 ( GenericFeaturedEntity ) |
| Продолжить поиск кластера | Не более 1 | По крайней мере 1 | Не более 3 ( PointOfInterestEntity ) |
Шаг 1: Предоставьте данные сущности.
В SDK определены различные сущности для представления каждого типа элементов. Для категории «Путешествия и мероприятия» мы поддерживаем следующие сущности:
-
GenericFeaturedEntity -
ArticleEntity -
EventEntity -
LodgingEntity -
StoreEntity -
PointOfInterestEntity -
RestaurantReservationEntity -
EventReservationEntity -
LodgingReservationEntity -
TransportationReservationEntity -
VehicleRentalReservationEntity
Приведенные ниже диаграммы описывают доступные характеристики и требования для каждого типа.
GenericFeaturedEntity
| Атрибут | Требование | Описание | Формат |
|---|---|---|---|
| Action Uri | Необходимый | Прямая ссылка на сущность в приложении поставщика. Примечание: Для указания источника можно использовать прямые ссылки. См. этот раздел часто задаваемых вопросов. | Ури |
| Изображения для плакатов | Необходимый | При предоставлении нескольких изображений будет показано только одно. Рекомендуемое соотношение сторон — 16:9. Примечание: Если предоставляется бейдж, обеспечьте безопасное расстояние в 24 dps как сверху, так и снизу изображения. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Заголовок | Необязательный | Название организации. | Свободный текст Рекомендуемый размер текста: 50 символов. |
| Описание | Необязательный | Один абзац текста, описывающий объект. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста: 180 символов. |
| список субтитров | Необязательный | До 3 субтитров, каждый из которых представляет собой отдельную строку текста. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста для каждого субтитра: максимум 50 символов. |
| Значки | Необязательный | Каждый значок представляет собой либо произвольный текст (максимум 15 символов), либо небольшое изображение. Специальная обработка пользовательского интерфейса поверх изображения/видео, например, в виде наложения значка на изображение.
| |
| Значок - Текст | Необязательный | Название для значка Примечание: для значка требуется либо текст, либо изображение. | Свободный текст Рекомендуемый размер текста: максимум 15 символов. |
| Значок - Изображение | Необязательный | Маленькое изображение Особое оформление пользовательского интерфейса, например, наложение значка на миниатюру изображения/видео. Примечание: для значка требуется либо текст, либо изображение. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Категории контента | Необязательный | Опишите категорию контента в сущности. | Список перечислений См. раздел «Категории контента» для получения рекомендаций. |
| DisplayTimeWindow (необязательно) — задайте временной интервал для отображения контента на поверхности. | |||
| Отметка времени начала | Необязательный | Временная метка эпохи, после которой контент должен отображаться на поверхности. Если параметр не задан, контент может отображаться на поверхности. | Временная метка эпохи в миллисекундах |
| Отметка времени окончания | Необязательный | Временная метка эпохи, после которой контент больше не отображается на поверхности. Если параметр не задан, контент может отображаться на поверхности. | Временная метка эпохи в миллисекундах |
ArticleEntity
| Атрибут | Требование | Описание | Формат |
|---|---|---|---|
| Action Uri | Необходимый | Прямая ссылка на сущность в приложении поставщика. Примечание: Для указания источника можно использовать прямые ссылки. См. этот раздел часто задаваемых вопросов. | Ури |
| Заголовок | Необходимый | Название организации. | Свободный текст Рекомендуемый размер текста: максимум 50 символов. |
| Изображения для плакатов | Необязательный | При предоставлении нескольких изображений будет показано только одно. Рекомендуемое соотношение сторон — 16:9. Примечание: Настоятельно рекомендуется использовать изображение. Если предоставляется бейдж, обеспечьте безопасное пространство в 24 dps как сверху, так и снизу изображения. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Источник - Название | Необязательный | Имя автора, организации или журналиста. | Свободный текст Рекомендуемый размер текста: менее 25 символов. |
| Источник - Изображение | Необязательный | Изображение источника, например, автора, организации, репортера. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Описание | Необязательный | Один абзац текста, описывающий объект. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста: 180 символов. |
| список субтитров | Необязательный | До 3 субтитров, каждый из которых представляет собой отдельную строку текста. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста для каждого субтитра: максимум 50 символов. |
| Значки | Необязательный | Каждый значок представляет собой либо произвольный текст (максимум 15 символов), либо небольшое изображение. Специальная обработка пользовательского интерфейса поверх изображения/видео, например, в виде наложения значка на изображение.
| |
| Значок - Текст | Необязательный | Название для значка Примечание: для значка требуется либо текст, либо изображение. | Свободный текст Рекомендуемый размер текста: максимум 15 символов. |
| Значок - Изображение | Необязательный | Маленькое изображение Особое оформление пользовательского интерфейса, например, наложение значка на миниатюру изображения/видео. Примечание: для значка требуется либо текст, либо изображение. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Время публикации контента | Необязательный | Это метка времени в миллисекундах, соответствующая дате публикации/обновления контента в приложении. | Временная метка эпохи в миллисекундах |
| Последнее время помолвки | Необязательный | Временная метка в миллисекундах, отражающая момент последнего взаимодействия пользователя с данным объектом. | Временная метка эпохи в миллисекундах |
| Процент выполнения | Необязательный | Процент от общего объема контента, потребленного пользователем на данный момент. | Целочисленное значение в диапазоне от 0 до 100 включительно. |
| Категории контента | Необязательный | Опишите категорию контента в сущности. | Список перечислений См. раздел «Категории контента» для получения рекомендаций. |
| DisplayTimeWindow (необязательно) — задайте временной интервал для отображения контента на поверхности. | |||
| Отметка времени начала | Необязательный | Временная метка эпохи, после которой контент должен отображаться на поверхности. Если параметр не задан, контент может отображаться на поверхности. | Временная метка эпохи в миллисекундах |
| Отметка времени окончания | Необязательный | Временная метка эпохи, после которой контент больше не отображается на поверхности. Если параметр не задан, контент может отображаться на поверхности. | Временная метка эпохи в миллисекундах |
EventEntity
| Атрибут | Требование | Описание | Формат |
|---|---|---|---|
| Action Uri | Необходимый | Прямая ссылка на сущность в приложении поставщика. Примечание: Для указания источника можно использовать прямые ссылки. См. этот раздел часто задаваемых вопросов. | Ури |
| Заголовок | Необходимый | Название организации. | Нить Рекомендуемый размер текста: максимум 50 символов. |
| Локализованное время начала - Отметка времени | Необходимый | Временная метка эпохи, когда ожидается начало события. | Joda-Time Instant |
| Локализованное время начала - Часовой пояс | Необходимый | Часовой пояс, в котором ожидается начало мероприятия. | Joda-Time DateTimeZone См. раздел «Условия часовых поясов» для получения дополнительной информации. |
| Режим событий | Необходимый | Поле для указания того, будет ли мероприятие виртуальным, очным или и тем, и другим. | Перечисление: ВИРТУАЛЬНЫЙ, ОЧНЫЙ или ГИБРИДНЫЙ формат |
| Изображения для плакатов | Необходимый | При предоставлении нескольких изображений будет показано только одно. Рекомендуемое соотношение сторон — 16:9. Примечание: Настоятельно рекомендуется использовать изображение. Если предоставляется бейдж, обеспечьте безопасное пространство в 24 dps как сверху, так и снизу изображения. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Местоположение - Страна | Условно обязательно | Страна, в которой проходит мероприятие. Примечание: Это необходимо для мероприятий, проводимых в очном или гибридном формате. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Город | Условно обязательно | Город, в котором проходит мероприятие. Примечание: Это необходимо для мероприятий, проводимых в очном или гибридном формате. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Отображаемый адрес | Условно обязательно | Адрес или название места проведения мероприятия, которое должно быть отображено пользователю. Примечание: Это необходимо для мероприятий, проводимых в очном или гибридном формате. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Уличный адрес | Необязательный | Адрес (если имеется) места проведения мероприятия. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Штат | Необязательный | Штат или провинция (если применимо), в которой проводится мероприятие. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - почтовый индекс | Необязательный | Почтовый индекс (если применимо) места проведения мероприятия. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Район | Необязательный | Район (если применимо), в котором проводится мероприятие. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Конец времени | Необязательный | Временная метка эпохи, когда ожидается завершение события. Примечание: Данные будут представлены в миллисекундах. | Временная метка эпохи в миллисекундах |
| Описание | Необязательный | Один абзац текста, описывающий объект. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста: 180 символов. |
| список субтитров | Необязательный | До 3 субтитров, каждый из которых представляет собой отдельную строку текста. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста для каждого субтитра: максимум 50 символов. |
| Значки | Необязательный | Каждый значок представляет собой либо произвольный текст (максимум 15 символов), либо небольшое изображение. | |
| Значок - Текст | Необязательный | Название для значка Примечание: для значка требуется либо текст, либо изображение. | Свободный текст Рекомендуемый размер текста: максимум 15 символов. |
| Значок - Изображение | Необязательный | Маленькое изображение Особое оформление пользовательского интерфейса, например, наложение значка на миниатюру изображения/видео. Примечание: для значка требуется либо текст, либо изображение. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Цена - Текущая цена | Условно обязательно | Текущая цена билета/пропуска на мероприятие. Необходимо указать, если указана перечеркнутая цена. | Свободный текст |
| Цена - Зачеркнутая цена | Необязательный | Первоначальная цена билета/пропуска на мероприятие. | Свободный текст |
| Указание цены | Необязательный | Укажите цену, чтобы отобразить информацию о промоакции, мероприятии или скидке для участников, если таковая имеется. | Свободный текст Рекомендуемый размер текста: менее 45 символов (слишком длинный текст может содержать многоточие). |
| Категории контента | Необязательный | Опишите категорию контента в сущности. | Список соответствующих требованиям перечней
См. раздел «Категории контента» для получения рекомендаций. |
| DisplayTimeWindow (необязательно) — задайте временной интервал для отображения контента на поверхности. | |||
| Отметка времени начала | Необязательный | Временная метка эпохи, после которой контент должен отображаться на поверхности. Если параметр не задан, контент может отображаться на поверхности. | Временная метка эпохи в миллисекундах |
| Отметка времени окончания | Необязательный | Временная метка эпохи, после которой контент больше не отображается на поверхности. Если параметр не задан, контент может отображаться на поверхности. | Временная метка эпохи в миллисекундах |
LodgingEntity
| Атрибут | Требование | Описание | Формат |
|---|---|---|---|
| Action Uri | Необходимый | Прямая ссылка на сущность в приложении поставщика. Примечание: Для указания источника можно использовать прямые ссылки. См. этот раздел часто задаваемых вопросов. | Ури |
| Заголовок | Необходимый | Название организации. | Нить Рекомендуемый размер текста: максимум 50 символов. |
| Изображения для плакатов | Необходимый | При предоставлении нескольких изображений будет показано только одно. Рекомендуемое соотношение сторон — 16:9. Примечание: Если предоставляется бейдж, обеспечьте безопасное расстояние в 24 dps как сверху, так и снизу изображения. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Местоположение - Страна | Необходимый | Страна, в которой осуществляется размещение. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Город | Необходимый | Город, в котором осуществляется размещение. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Отображаемый адрес | Необходимый | Адрес, который будет отображаться пользователю. В большинстве случаев рекомендуется указывать название города и, возможно, штат или страну. Указывайте адрес улицы или района только в том случае, если пользователь находится рядом с этим местом, знаком с ним или город указан в названии кластера. Если вы указываете адрес улицы, используйте краткий адрес, по возможности сокращая его (например, «St» вместо «Street», «Ave» вместо «Avenue»). | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Уличный адрес | Необязательный | Адрес проживания (если имеется). | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Штат | Необязательный | Штат или провинция (если применимо), в которой находится место проживания. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - почтовый индекс | Необязательный | Почтовый индекс (если имеется) места проживания. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Район | Необязательный | Район (если применимо), где находится жилье. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Значки | Необязательный | Каждый значок представляет собой либо произвольный текст (максимум 15 символов), либо небольшое изображение. | |
| Значок - Текст | Необязательный | Название для значка Примечание: для значка требуется либо текст, либо изображение. | Свободный текст Рекомендуемый размер текста: максимум 15 символов. |
| Значок - Изображение | Необязательный | Маленькое изображение Особое оформление пользовательского интерфейса, например, наложение значка на миниатюру изображения/видео. Примечание: для значка требуется либо текст, либо изображение. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Описание | Необязательный | Один абзац текста, описывающий объект. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста: 180 символов. |
| список субтитров | Необязательный | До 3 субтитров, каждый из которых представляет собой отдельную строку текста. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста для каждого субтитра: максимум 50 символов. |
| AvailabilityTimeWindow - Локализованное время начала - Отметка времени | Необязательный | Отметка времени (epoch), когда ожидается открытие/доступность жилья. | Joda-Time Instant |
| AvailabilityTimeWindow - Локализованное время начала - Часовой пояс | Необязательный | Часовой пояс, в котором, как ожидается, жилье будет открыто/доступно. | Joda-Time DateTimeZone См. раздел «Условия часовых поясов» для получения дополнительной информации. |
| AvailabilityTimeWindow - Локализованное время окончания - Отметка времени | Необязательный | Временная метка, до которой ожидается, что жилье будет открыто/доступно. | Joda-Time Instant |
| AvailabilityTimeWindow - Локализованное время окончания - Часовой пояс | Необязательный | Часовой пояс, в котором, как ожидается, жилье будет открыто/доступно. | Joda-Time DateTimeZone См. раздел «Условия часовых поясов» для получения дополнительной информации. |
| Рейтинг - Максимальное значение | Необязательный | Максимальное значение шкалы оценок. Этот параметр необходимо указать, если также предоставлено текущее значение рейтинга. | Число >= 0,0 |
| Рейтинг - Текущая стоимость | Необязательный | Текущее значение рейтинговой шкалы. Этот параметр необходимо указать, если также указано максимальное значение рейтинга. | Число >= 0,0 |
| Рейтинг - Количество | Необязательный | Количество оценок, выставленных отелю. Примечание: Укажите это поле, если ваше приложение хочет контролировать способ отображения этой информации пользователям. Укажите краткую строку, которая может быть показана пользователю. Например, если значение равно 1 000 000, используйте сокращения, такие как 1M, чтобы оно не обрезалось на экранах меньшего размера. | Нить |
| Рейтинг - Количество значений | Необязательный | Количество оценок, выставленных отелю. Примечание: Укажите это поле, если вы не хотите самостоятельно обрабатывать логику отображения сокращений. Если присутствуют поля «Количество» и «Значение количества», мы будем использовать значение «Количество» для отображения пользователям. | Длинный |
| Цена - Текущая цена | Условно обязательно | Текущая цена проживания. Необходимо указать, если указана перечеркнутая цена. | Свободный текст |
| Цена - Зачеркнутая цена | Необязательный | Первоначальная цена проживания, которая будет зачеркнута в UI. | Свободный текст |
| Указание цены | Необязательный | Укажите цену, чтобы отобразить информацию о промоакции, мероприятии или скидке для участников, если таковая имеется. | Свободный текст Рекомендуемый размер текста: менее 45 символов (слишком длинный текст может содержать многоточие). |
| DisplayTimeWindow (необязательно) — задайте временной интервал для отображения контента на поверхности. | |||
| Отметка времени начала | Необязательный | Временная метка эпохи, после которой контент должен отображаться на поверхности. Если параметр не задан, контент может отображаться на поверхности. | Временная метка эпохи в миллисекундах |
| Отметка времени окончания | Необязательный | Временная метка эпохи, после которой контент больше не отображается на поверхности. Если параметр не задан, контент может отображаться на поверхности. | Временная метка эпохи в миллисекундах |
StoreEntity
Объект StoreEntity представляет собой отдельный магазин, который партнеры-разработчики хотят опубликовать, например, популярное заведение общественного питания или ресторан, имеющие отношение к опыту путешествий.
| Атрибут | Требование | Описание | Формат |
|---|---|---|---|
| Изображения для плакатов | Необходимый | Необходимо предоставить как минимум одно изображение. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Action Uri | Необходимый | Прямая ссылка на сущность в приложении поставщика. Примечание: Для указания источника можно использовать прямые ссылки. См. этот раздел часто задаваемых вопросов. | Ури |
| Заголовок | Необязательный | Название магазина. | Свободный текст Рекомендуемый размер текста: менее 45 символов (слишком длинный текст может содержать многоточие). |
| Расположение | Необязательный | Местоположение магазина. | Свободный текст Рекомендуемый размер текста: менее 45 символов (слишком длинный текст может содержать многоточие). |
| Вызывать | Необязательный | При необходимости укажите ссылку на акцию, мероприятие или обновление информации о магазине. | Свободный текст Рекомендуемый размер текста: менее 45 символов (слишком длинный текст может содержать многоточие). |
| Мелкий шрифт в пояснительной записке | Необязательный | Текст, напечатанный мелким шрифтом для пояснения. | Свободный текст Рекомендуемый размер текста: менее 45 символов (слишком длинный текст может содержать многоточие). |
| Описание | Необязательный | Описание магазина. | Свободный текст Рекомендуемый размер текста: менее 90 символов (слишком длинный текст может содержать многоточие). |
| Категория | Необязательный | В контексте заведений общественного питания категория магазина может включать в себя кухню, например, «французская», «новоамериканская», «рамен», «изысканная кухня». | Свободный текст Рекомендуемый размер текста: менее 45 символов (слишком длинный текст может содержать многоточие). |
| Рейтинг - Максимальное значение | Необязательный | Максимальное значение шкалы оценок. Этот параметр необходимо указать, если также предоставлено текущее значение рейтинга. | Число >= 0,0 |
| Рейтинг - Текущая стоимость | Необязательный | Текущее значение рейтинговой шкалы. Этот параметр необходимо указать, если также указано максимальное значение рейтинга. | Число >= 0,0 |
| Рейтинг - Количество | Необязательный | Количество оценок, выставленных отелю. Примечание: Укажите это поле, если ваше приложение хочет контролировать способ отображения этой информации пользователям. Укажите краткую строку, которая может быть показана пользователю. Например, если значение равно 1 000 000, используйте сокращения, такие как 1M, чтобы оно не обрезалось на экранах меньшего размера. | Нить |
| Рейтинг - Количество значений | Необязательный | Количество оценок, выставленных отелю. Примечание: Укажите это поле, если вы не хотите самостоятельно обрабатывать логику отображения сокращений. Если присутствуют поля «Количество» и «Значение количества», мы будем использовать значение «Количество» для отображения пользователям. | Длинный |
| DisplayTimeWindow (необязательно) — задайте временной интервал для отображения контента на поверхности. | |||
| Отметка времени начала | Необязательный | Временная метка эпохи, после которой контент должен отображаться на поверхности. Если параметр не задан, контент может отображаться на поверхности. | Временная метка эпохи в миллисекундах |
| Отметка времени окончания | Необязательный | Временная метка эпохи, после которой контент больше не отображается на поверхности. Если параметр не задан, контент может отображаться на поверхности. | Временная метка эпохи в миллисекундах |
PointOfInterestEntity
| Атрибут | Требование | Описание | Формат |
|---|---|---|---|
| Action Uri | Необходимый | Прямая ссылка на сущность в приложении поставщика. Примечание: Для указания источника можно использовать прямые ссылки. См. этот раздел часто задаваемых вопросов. | Ури |
| Заголовок | Необходимый | Название организации. | Нить Рекомендуемый размер текста: максимум 50 символов. |
| Изображения для плакатов | Условно обязательно | При предоставлении нескольких изображений будет показано только одно. Рекомендуемое соотношение сторон — 16:9. Примечание: Изображение обязательно, если объект входит в кластер рекомендаций. Если предоставлен значок, обеспечьте безопасное пространство в 24 символа в секунду как сверху, так и снизу изображения. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Последнее время помолвки | Условно обязательно | Временная метка эпохи, когда пользователь в последний раз взаимодействовал с этим объектом. Примечание: это поле обязательно для заполнения, если объект входит в кластер непрерывного поиска. | Joda-Time Instant |
| Местоположение - Страна | Условно обязательно | Страна, в которой происходит событие, представляющее интерес. Примечание: это поле обязательно для заполнения, если сущность входит в кластер рекомендаций. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Город | Условно обязательно | Город, в котором находится интересующее место. Примечание: это поле обязательно для заполнения, если сущность входит в кластер рекомендаций. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Отображаемый адрес | Условно обязательно | Адрес, который будет отображаться пользователю. Укажите краткий адрес, используя по возможности сокращения (например, «St» вместо «Street», «Ave» вместо «Avenue»). Эта строка может быть усечена в зависимости от устройства и настроек пользователя. Укажите название города для наглядности. Примечание: это поле обязательно для заполнения, если сущность входит в кластер рекомендаций. | Свободный текст Рекомендуемый размер текста: максимум ~35 символов. |
| Местоположение - Уличный адрес | Необязательный | Адрес (если имеется) интересующего объекта. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Штат | Необязательный | Штат или провинция (если применимо), в которой находится интересующий объект. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - почтовый индекс | Необязательный | Почтовый индекс (если применимо) интересующего объекта. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Район | Необязательный | Окрестности (если применимо) интересующего объекта. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| AvailabilityTimeWindow - Локализованное время начала - Отметка времени | Необязательный | Временная метка эпохи, когда ожидается, что интересующий нас объект будет открыт/доступен. | Joda-Time Instant |
| AvailabilityTimeWindow - Локализованное время начала - Часовой пояс | Необязательный | Часовой пояс, в котором, как ожидается, будет открыт/доступен интересующий объект. | Joda-Time DateTimeZone См. раздел «Условия часовых поясов» для получения дополнительной информации. |
| AvailabilityTimeWindow - Локализованное время окончания - Отметка времени | Необязательный | Временная метка эпохи, до которой ожидается, что интересующая точка будет открыта/доступна. | Joda-Time Instant |
| AvailabilityTimeWindow - Локализованное время окончания - Часовой пояс | Необязательный | Часовой пояс, в котором, как ожидается, будет открыт/доступен интересующий объект. | Joda-Time DateTimeZone См. раздел «Условия часовых поясов» для получения дополнительной информации. |
| Значки | Необязательный | Каждый значок представляет собой либо произвольный текст (максимум 15 символов), либо небольшое изображение. | |
| Значок - Текст | Необязательный | Название для значка Примечание: для значка требуется либо текст, либо изображение. | Свободный текст Рекомендуемый размер текста: максимум 15 символов. |
| Значок - Изображение | Необязательный | Маленькое изображение Особое оформление пользовательского интерфейса, например, наложение значка на миниатюру изображения/видео. Примечание: для значка требуется либо текст, либо изображение. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Описание | Необязательный | Один абзац текста, описывающий объект. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста: 180 символов. |
| список субтитров | Необязательный | До 3 субтитров, каждый из которых представляет собой отдельную строку текста. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста для каждого субтитра: максимум 50 символов. |
| Рейтинг - Максимальное значение | Необязательный | Максимальное значение шкалы оценок. Этот параметр необходимо указать, если также предоставлено текущее значение рейтинга. | Число >= 0,0 |
| Рейтинг - Текущая стоимость | Необязательный | Текущее значение рейтинговой шкалы. Этот параметр необходимо указать, если также указано максимальное значение рейтинга. | Число >= 0,0 |
| Рейтинг - Количество | Необязательный | Количество оценок для интересующего объекта. Примечание: Укажите это поле, если ваше приложение хочет контролировать способ отображения этой информации пользователям. Укажите краткую строку, которая может быть показана пользователю. Например, если значение равно 1 000 000, используйте сокращения, такие как 1M, чтобы оно не обрезалось на экранах меньшего размера. | Нить |
| Рейтинг - Количество значений | Необязательный | Количество оценок для интересующего объекта. Примечание: Укажите это поле, если вы не хотите самостоятельно обрабатывать логику отображения сокращений. Если присутствуют поля «Количество» и «Значение количества», мы будем использовать значение «Количество» для отображения пользователям. | Длинный |
| Цена - Текущая цена | Условно обязательно | Текущая цена билетов/входного билета в достопримечательность. Необходимо указать, если указана перечеркнутая цена. | Свободный текст |
| Цена - Зачеркнутая цена | Необязательный | Первоначальная цена билетов/входного билета в достопримечательность. | Свободный текст |
| Указание цены | Необязательный | Укажите цену, чтобы отобразить информацию о промоакции, мероприятии или скидке для участников, если таковая имеется. | Свободный текст Рекомендуемый размер текста: менее 45 символов (слишком длинный текст может содержать многоточие). |
| Категории контента | Необязательный | Опишите категорию контента в сущности. | Список соответствующих требованиям перечней
См. раздел «Категории контента» для получения рекомендаций. |
| DisplayTimeWindow (необязательно) — задайте временной интервал для отображения контента на поверхности. | |||
| Отметка времени начала | Необязательный | Временная метка эпохи, после которой контент должен отображаться на поверхности. Если параметр не задан, контент может отображаться на поверхности. | Временная метка эпохи в миллисекундах |
| Отметка времени окончания | Необязательный | Временная метка эпохи, после которой контент больше не отображается на поверхности. Если параметр не задан, контент может отображаться на поверхности. | Временная метка эпохи в миллисекундах |
RestaurantReservationEntity
| Атрибут | Требование | Описание | Формат |
|---|---|---|---|
| Action Uri | Необходимый | Прямая ссылка на сущность в приложении поставщика. Примечание: Для указания источника можно использовать прямые ссылки. См. этот раздел часто задаваемых вопросов. | Ури |
| Заголовок | Необходимый | Название организации. | Нить Рекомендуемый размер текста: максимум 50 символов. |
| Локализованное время начала бронирования - отметка времени | Необходимый | Временная метка эпохи, когда ожидается начало действия бронирования. | Joda-Time Instant |
| Локализованное время начала бронирования - Часовой пояс | Необходимый | Часовой пояс, в котором предполагается начало действия бронирования. | Joda-Time DateTimeZone См. раздел «Условия часовых поясов» для получения дополнительной информации. |
| Местоположение - Страна | Необходимый | Страна, в которой расположен ресторан. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Город | Необходимый | Город, в котором расположен ресторан. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Отображаемый адрес | Необходимый | Адрес ресторана, который будет отображен пользователю. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Уличный адрес | Необязательный | Адрес ресторана (если имеется). | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Штат | Необязательный | Штат или провинция (если применимо), в которой расположен ресторан. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - почтовый индекс | Необязательный | Почтовый индекс (если имеется) ресторана. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Район | Необязательный | Район (если применимо), в котором расположен ресторан. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Изображения для плакатов | Необязательный | При предоставлении нескольких изображений будет показано только одно. Рекомендуемое соотношение сторон — 16:9. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Описание | Необязательный | Один абзац текста, описывающий объект. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста: 180 символов. |
| список субтитров | Необязательный | До 3 субтитров, каждый из которых представляет собой отдельную строку текста. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста для каждого субтитра: максимум 50 символов. |
| Размер стола | Необязательный | Количество человек в резервационной группе | Целое число > 0 |
| DisplayTimeWindow (необязательно) — задайте временной интервал для отображения контента на поверхности. | |||
| Отметка времени начала | Необязательный | Временная метка эпохи, после которой контент должен отображаться на поверхности. Если параметр не задан, контент может отображаться на поверхности. | Временная метка эпохи в миллисекундах |
| Отметка времени окончания | Необязательный | Временная метка эпохи, после которой контент больше не отображается на поверхности. Если параметр не задан, контент может отображаться на поверхности. | Временная метка эпохи в миллисекундах |
EventReservationEntity
| Атрибут | Требование | Описание | Формат |
|---|---|---|---|
| Action Uri | Необходимый | Прямая ссылка на сущность в приложении поставщика. Примечание: Для указания источника можно использовать прямые ссылки. См. этот раздел часто задаваемых вопросов. | Ури |
| Заголовок | Необходимый | Название организации. | Нить Рекомендуемый размер текста: максимум 50 символов. |
| Локализованное время начала - Отметка времени | Необходимый | Временная метка эпохи, когда ожидается начало события. | Joda-Time Instant |
| Локализованное время начала - Часовой пояс | Необходимый | Часовой пояс, в котором ожидается начало мероприятия. | Joda-Time DateTimeZone См. раздел «Условия часовых поясов» для получения дополнительной информации. |
| Режим событий | Необходимый | Поле для указания того, будет ли мероприятие виртуальным, очным или и тем, и другим. | Перечисление: ВИРТУАЛЬНЫЙ, ОЧНЫЙ или ГИБРИДНЫЙ формат |
| Местоположение - Страна | Условно обязательно | Страна, в которой проходит мероприятие. Примечание: Это необходимо для мероприятий, проводимых в очном или гибридном формате. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Город | Условно обязательно | Город, в котором проходит мероприятие. Примечание: Это необходимо для мероприятий, проводимых в очном или гибридном формате. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Отображаемый адрес | Условно обязательно | Адрес или название места проведения мероприятия, которое должно быть отображено пользователю. Примечание: Это необходимо для мероприятий, проводимых в очном или гибридном формате. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Уличный адрес | Необязательный | Адрес (если имеется) места проведения мероприятия. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Штат | Необязательный | Штат или провинция (если применимо), в которой проводится мероприятие. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - почтовый индекс | Необязательный | Почтовый индекс (если применимо) места проведения мероприятия. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Район | Необязательный | Район (если применимо), в котором проводится мероприятие. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Изображения для плакатов | Необязательный | При предоставлении нескольких изображений будет показано только одно. Рекомендуемое соотношение сторон — 16:9. Примечание: Настоятельно рекомендуется использовать изображение. Если предоставляется бейдж, обеспечьте безопасное пространство в 24 dps как сверху, так и снизу изображения. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Локализованное время окончания - Отметка времени | Необязательный | Временная метка эпохи, когда ожидается завершение события. | Joda-Time Instant |
| Локализованное время окончания - Часовой пояс | Необязательный | Часовой пояс, в котором ожидается завершение мероприятия. | Joda-Time DateTimeZone См. раздел «Условия часовых поясов» для получения дополнительной информации. |
| Поставщик услуг - Название | Необязательный | Название поставщика услуг. Примечание: Для предоставления услуг поставщику требуется либо текст, либо изображение. | Свободный текст. Например, название организатора мероприятия/тура. |
| Поставщик услуг - Изображение | Необязательный | Логотип/изображение поставщика услуг. Примечание: Для предоставления услуг поставщику требуется либо текст, либо изображение. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Описание | Необязательный | Один абзац текста, описывающий объект. Note: Either description or subtitle list will be displayed to the user, not both. | Свободный текст Recommended text size: 180 chars |
| Subtitle list | Необязательный | Up to 3 subtitles, with each subtitle a single line of text. Note: Either description or subtitle list will be displayed to the user, not both. | Свободный текст Recommended text size for each subtitle: max 50 chars |
| Значки | Необязательный | Each badge is either free text (max 15 chars) or small image. | |
| Badge - Text | Необязательный | Title for the badge Note: Either text or image is required for the badge | Свободный текст Recommended text size: max 15 chars |
| Badge - Image | Необязательный | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. Note: Either text or image is required for the badge | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Идентификатор бронирования | Необязательный | The reservation ID for the event reservation. | Свободный текст |
| Price - CurrentPrice | Условно обязательно | The current price of the ticket/pass for the event. Must be provided if strikethrough price is provided. | Свободный текст |
| Price - StrikethroughPrice | Необязательный | The original price of the ticket/pass for the event. | Свободный текст |
| Price Callout | Необязательный | Price callout to feature a promo, event, member discount, if available. | Свободный текст Recommended text size: under 45 chars (Text that is too long may show ellipses) |
| Rating - Max value | Необязательный | The maximum value of the rating scale. Must be provided if current value of rating is also provided. | Number >= 0.0 |
| Rating - Current value | Необязательный | The current value of the rating scale. Must be provided if maximum value of rating is also provided. | Number >= 0.0 |
| Rating - Count | Необязательный | The count of the ratings for the event. Note: Provide this field if your app wants to control how this is displayed to the users. Provide the concise string that can be displayed to the user. For example, if the count is 1,000,000, consider using abbreviations like 1M, so that it won't be truncated on smaller display sizes. | Нить |
| Rating - Count Value | Необязательный | The count of the ratings for the event. Note: Provide this field if you don't want to handle the display abbreviation logic yourself. If both Count and Count Value are present, we will use the Count to display to users | Длинный |
| Категории контента | Необязательный | Describe the category of the content in the entity. | List of Eligible Enums
See the Content Category section for guidance. |
| DisplayTimeWindow (Optional) - Set a time window for a content to be shown on the surface | |||
| Start Timestamp | Необязательный | The epoch timestamp after which the content should be shown on the surface. If not set, content is eligible to be shown on the surface. | Epoch timestamp in milliseconds |
| End Timestamp | Необязательный | The epoch timestamp after which the content is no longer shown on the surface. If not set, content is eligible to be shown on the surface. | Epoch timestamp in milliseconds |
LodgingReservationEntity
| Атрибут | Требование | Описание | Формат |
|---|---|---|---|
| Action Uri | Необходимый | Deep Link to the entity in the provider app. Примечание: Для указания источника можно использовать прямые ссылки. См. этот раздел часто задаваемых вопросов. | Ури |
| Заголовок | Необходимый | Title of the entity. | Free text. For example, "Your Stay from Dec 12th" Recommended text size: Max 50 chars |
| Localized Check-in Time - Timestamp | Необходимый | The epoch timestamp that represents the check in time for the reservation. | Joda-Time Instant |
| Localized Check-in Time - Timezone | Необходимый | The timezone in which the check in time exists for the reservation. | Joda-Time DateTimeZone See Timezone Specifications for guidance. |
| Localized Check-out Time - Timestamp | Необходимый | The epoch timestamp that represents the check out time for the reservation. | Joda-Time Instant |
| Localized Check-out Time - Timezone | Необходимый | The timezone in which the check out time exists for the reservation. | Joda-Time DateTimeZone See Timezone Specifications for guidance. |
| Location - Country | Необходимый | The country in which the lodging is located. | Свободный текст Recommended text size: max ~20 chars |
| Location - City | Необходимый | The city in which the lodging is located. | Свободный текст Recommended text size: max ~20 chars |
| Location - Display Address | Необходимый | The address that will be displayed to the user. Provide a succinct address, using abbreviations where possible (for example, "St" for "Street", "Ave" for "Avenue"). This string may be truncated depending on the user's device and settings. Include the city name for clear identification. | Свободный текст Recommended text size: max ~35 chars |
| Location - Street Address | Необязательный | The street address (if applicable) of the lodging. | Свободный текст Recommended text size: max ~20 chars |
| Location - State | Необязательный | The state or province (if applicable) in which the lodging is located. | Свободный текст Recommended text size: max ~20 chars |
| Location - Zip code | Необязательный | The zip code (if applicable) of the lodging. | Свободный текст Recommended text size: max ~20 chars |
| Location - Neighborhood | Необязательный | The neighborhood (if applicable) of the lodging. | Свободный текст Recommended text size: max ~20 chars |
| Изображения для плакатов | Необязательный | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 Note: If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Описание | Необязательный | A single paragraph of text to describe the entity. Note: Either description or subtitle list will be displayed to the user, not both. | Свободный текст Recommended text size: 180 chars |
| Subtitle list | Необязательный | Up to 3 subtitles, with each subtitle a single line of text. Note: Either description or subtitle list will be displayed to the user, not both. | Свободный текст Recommended text size for each subtitle: max 50 chars |
| Идентификатор бронирования | Необязательный | The reservation ID for the lodging reservation. | Свободный текст |
| Rating - Max value | Необязательный | The maximum value of the rating scale. Must be provided if current value of rating is also provided. | Number >= 0.0 |
| Rating - Current value | Необязательный | The current value of the rating scale. Must be provided if maximum value of rating is also provided. | Number >= 0.0 |
| Rating - Count | Необязательный | The count of the ratings for the lodging. Note: Provide this field if your app wants to control how this is displayed to the users. Provide the concise string that can be displayed to the user. For example, if the count is 1,000,000, consider using abbreviations like 1M, so that it won't be truncated on smaller display sizes. | Нить |
| Rating - Count Value | Необязательный | The count of the ratings for the lodging. Note: Provide this field if you don't want to handle the display abbreviation logic yourself. If both Count and Count Value are present, we will use the Count to display to users | Длинный |
| Price - CurrentPrice | Условно обязательно | The current price of the lodging. Must be provided if strikethrough price is provided. | Свободный текст |
| Price - StrikethroughPrice | Необязательный | The original price of the lodging, which is be struck-through in the UI. | Свободный текст |
| Price Callout | Необязательный | Price callout to feature a promo, event, member discount, if available. | Свободный текст Recommended text size: under 45 chars (Text that is too long may show ellipses) |
| DisplayTimeWindow (Optional) - Set a time window for a content to be shown on the surface | |||
| Start Timestamp | Необязательный | The epoch timestamp after which the content should be shown on the surface. If not set, content is eligible to be shown on the surface. | Epoch timestamp in milliseconds |
| End Timestamp | Необязательный | The epoch timestamp after which the content is no longer shown on the surface. If not set, content is eligible to be shown on the surface. | Epoch timestamp in milliseconds |
TransportationReservationEntity
| Атрибут | Требование | Описание | Формат |
|---|---|---|---|
| Action Uri | Необходимый | Deep Link to the entity in the provider app. Примечание: Для указания источника можно использовать прямые ссылки. См. этот раздел часто задаваемых вопросов. | Ури |
| Заголовок | Необходимый | Title of the entity. | Free text. For example, "SFO to SAN" Recommended text size: Max 50 chars |
| Transportation Type | Необходимый | The mode/type of transportation for the reservation. | Enum: FLIGHT, TRAIN, BUS, or FERRY |
| Localized Departure Time - Timestamp | Необходимый | The epoch timestamp that represents the departure time. | Joda-Time Instant |
| Localized Departure Time - Timezone | Необходимый | The timezone of the departure time. | Joda-Time DateTimeZone See Timezone Specifications for guidance. |
| Localized Arrival Time - Timestamp | Необходимый | The epoch timestamp that represents the arrival time. | Joda-Time Instant |
| Localized Arrival Time - Timezone | Необходимый | The timezone of the arrival time. | Joda-Time DateTimeZone See Timezone Specifications for guidance. |
| Transportation Number | Необходимый | The flight number, bus number, train number, or ferry/cruise number. | Свободный текст |
| Localized Boarding Time - Timestamp | Необходимый | The epoch timestamp that represents the boarding time for the reservation (if applicable) | Joda-Time Instant |
| Localized Boarding Time - Timezone | Необходимый | The timezone of the boarding time for the reservation (if applicable) | Joda-Time DateTimeZone See Timezone Specifications for guidance. |
| Departure Location - Country | Необязательный | The country of departure. | Свободный текст Recommended text size: max ~20 chars |
| Departure Location - City | Необязательный | The city of departure. | Свободный текст Recommended text size: max ~20 chars |
| Departure Location - Display Address | Необязательный | The location of departure that will be displayed to the user. | Свободный текст Recommended text size: max ~20 chars |
| Departure Location - Street Address | Необязательный | The street address (if applicable) of the departure location. | Свободный текст Recommended text size: max ~20 chars |
| Departure Location - State | Необязательный | The state or province (if applicable) of the departure location. | Свободный текст Recommended text size: max ~20 chars |
| Departure Location - Zip code | Необязательный | The zip code (if applicable) of the departure location. | Свободный текст Recommended text size: max ~20 chars |
| Departure Location - Neighborhood | Необязательный | The neighborhood (if applicable) of the departure location. | Свободный текст Recommended text size: max ~20 chars |
| Arrival Location - Country | Необязательный | The country of arrival. | Свободный текст Recommended text size: max ~20 chars |
| Arrival Location - City | Необязательный | The city of arrival. | Свободный текст Recommended text size: max ~20 chars |
| Arrival Location - Display Address | Необязательный | The location of arrival that will be displayed to the user. | Свободный текст Recommended text size: max ~20 chars |
| Arrival Location - Street Address | Необязательный | The street address (if applicable) of the arrival location. | Свободный текст Recommended text size: max ~20 chars |
| Arrival Location - State | Необязательный | The state or province (if applicable) of the arrival location. | Свободный текст Recommended text size: max ~20 chars |
| Arrival Location - Zip code | Необязательный | The zip code (if applicable) of the arrival location. | Свободный текст Recommended text size: max ~20 chars |
| Arrival Location - Neighborhood | Необязательный | The neighborhood (if applicable) of the arrival location. | Свободный текст Recommended text size: max ~20 chars |
| Service Provider - Name | Необязательный | The name of the service provider. Note: Either text or image is required for the service provider. | Free text. For example, Airline name |
| Service Provider - Image | Необязательный | The logo/image of the service provider. Note: Either text or image is required for the service provider. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Изображения для плакатов | Необязательный | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Описание | Необязательный | A single paragraph of text to describe the entity. Note: Either description or subtitle list will be displayed to the user, not both. | Свободный текст Recommended text size: 180 chars |
| Subtitle list | Необязательный | Up to 3 subtitles, with each subtitle a single line of text. Note: Either description or subtitle list will be displayed to the user, not both. | Свободный текст Recommended text size for each subtitle: max 50 chars |
| Идентификатор бронирования | Необязательный | The reservation ID for the transportation reservation. | Свободный текст |
| Price - CurrentPrice | Условно обязательно | The current price of the reservation. Must be provided if strikethrough price is provided. | Свободный текст |
| Price - StrikethroughPrice | Необязательный | The original price of the reservation, which is be struck-through in the UI. | Свободный текст |
| Price Callout | Необязательный | Price callout to feature a promo, event, member discount, if available. | Свободный текст Recommended text size: under 45 chars (Text that is too long may show ellipses) |
| DisplayTimeWindow (Optional) - Set a time window for a content to be shown on the surface | |||
| Start Timestamp | Необязательный | The epoch timestamp after which the content should be shown on the surface. If not set, content is eligible to be shown on the surface. | Epoch timestamp in milliseconds |
| End Timestamp | Необязательный | The epoch timestamp after which the content is no longer shown on the surface. If not set, content is eligible to be shown on the surface. | Epoch timestamp in milliseconds |
VehicleRentalReservationEntity
| Атрибут | Требование | Описание | Формат |
|---|---|---|---|
| Action Uri | Необходимый | Deep Link to the entity in the provider app. Примечание: Для указания источника можно использовать прямые ссылки. См. этот раздел часто задаваемых вопросов. | Ури |
| Заголовок | Необходимый | Title of the entity. | Free text. For example, "Avis Union Square SF" Recommended text size: Max 50 chars |
| Localized Pickup Time - Timestamp | Необходимый | The epoch timestamp that represents the pick up time for the reservation. | Joda-Time Instant |
| Localized Pickup Time - Timezone | Необходимый | The timezone of the pick up time for the reservation. | Joda-Time DateTimeZone See Timezone Specifications for guidance. |
| Localized Return Time - Timestamp | Необязательный | The epoch timestamp that represents the check out time for the reservation. | Joda-Time Instant |
| Localized Return Time - Timezone | Необязательный | The timezone of the check out time for the reservation. | Joda-Time DateTimeZone See Timezone Specifications for guidance. |
| Pickup Address - Country | Необязательный | The country of the pickup location. | Свободный текст Recommended text size: max ~20 chars |
| Pickup Address - City | Необязательный | The city of the pickup location. | Свободный текст Recommended text size: max ~20 chars |
| Pickup Address - Display Address | Необязательный | The pickup location that will be displayed to the user. | Свободный текст Recommended text size: max ~20 chars |
| Pickup Address - Street Address | Необязательный | The street address (if applicable) of the pickup location. | Свободный текст Recommended text size: max ~20 chars |
| Pickup Address - State | Необязательный | The state or province (if applicable) of the pickup location. | Свободный текст Recommended text size: max ~20 chars |
| Pickup Address - Zip code | Необязательный | The zip code (if applicable) of the pickup location. | Свободный текст Recommended text size: max ~20 chars |
| Pickup Address - Neighborhood | Необязательный | The neighborhood (if applicable) of the pickup location. | Свободный текст Recommended text size: max ~20 chars |
| Return Address - Country | Необязательный | The country of return location. | Свободный текст Recommended text size: max ~20 chars |
| Return Address - City | Необязательный | The city of return location. | Свободный текст Recommended text size: max ~20 chars |
| Return Address - Display Address | Необязательный | The return location that will be displayed to the user. | Свободный текст Recommended text size: max ~20 chars |
| Return Address - Street Address | Необязательный | The street address (if applicable) of the return location. | Свободный текст Recommended text size: max ~20 chars |
| Return Address - State | Необязательный | The state or province (if applicable) of the return location. | Свободный текст Recommended text size: max ~20 chars |
| Return Address - Zip code | Необязательный | The zip code (if applicable) of the return location. | Свободный текст Recommended text size: max ~20 chars |
| Return Address - Neighborhood | Необязательный | The neighborhood (if applicable) of the return location. | Свободный текст Recommended text size: max ~20 chars |
| Service Provider - Name | Необязательный | The name of the service provider. Note: Either text or image is required for the service provider. | Free text. For example, "Avis Car Rental" |
| Service Provider - Image | Необязательный | The logo/image of the service provider. Note: Either text or image is required for the service provider. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Изображения для плакатов | Необязательный | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Описание | Необязательный | A single paragraph of text to describe the entity. Note: Either description or subtitle list will be displayed to the user, not both. | Свободный текст Recommended text size: 180 chars |
| Subtitle list | Необязательный | Up to 3 subtitles, with each subtitle a single line of text. Note: Either description or subtitle list will be displayed to the user, not both. | Свободный текст Recommended text size for each subtitle: max 50 chars |
| Confirmation ID | Необязательный | The confirmation ID for the vehicle rental reservation. | Свободный текст |
| Price - CurrentPrice | Условно обязательно | The current price of the reservation. Must be provided if strikethrough price is provided. | Свободный текст |
| Price - StrikethroughPrice | Необязательный | The original price of the reservation, which is be struck-through in the UI. | Свободный текст |
| Price Callout | Необязательный | Price callout to feature a promo, event, member discount, if available. | Свободный текст Recommended text size: under 45 chars (Text that is too long may show ellipses) |
| DisplayTimeWindow (Optional) - Set a time window for a content to be shown on the surface | |||
| Start Timestamp | Необязательный | The epoch timestamp after which the content should be shown on the surface. If not set, content is eligible to be shown on the surface. | Epoch timestamp in milliseconds |
| End Timestamp | Необязательный | The epoch timestamp after which the content is no longer shown on the surface. If not set, content is eligible to be shown on the surface. | Epoch timestamp in milliseconds |
Технические характеристики изображения
Required specifications for image assets are listed in this table:
| Соотношение сторон | Minimum pixels | Recommended pixels |
|---|---|---|
Square (1x1) Предпочтительный | 300x300 | 1200x1200 |
| Landscape (1.91x1) | 600x314 | 1200x628 |
| Portrait (4x5) | 480x600 | 960x1200 |
The images are required to be hosted on public CDNs so that Google can access them.
Форматы файлов
PNG, JPG, статический GIF, WebP
Максимальный размер файла
5120 КБ
Дополнительные рекомендации
- Безопасная зона изображения: разместите важный контент в центральных 80% изображения.
- Use a transparent background so that the image can be properly displayed in Dark and Light theme settings.
Timezone specifications
Prefer ID (for example, "America/Los_Angeles") over offset (for example, "-07:00").
Sample usage: DateTimeZone.forID("America/Los_Angeles")
Content Category
The content category allows apps to publish content belonging to multiple categories. This maps the content with some of the predefined categories namely:
-
TYPE_EDUCATION -
TYPE_SPORTS -
TYPE_MOVIES_AND_TV_SHOWS -
TYPE_BOOKS -
TYPE_AUDIOBOOKS -
TYPE_MUSIC -
TYPE_DIGITAL_GAMES -
TYPE_TRAVEL_AND_LOCAL -
TYPE_HOME_AND_AUTO -
TYPE_BUSINESS -
TYPE_NEWS -
TYPE_FOOD_AND_DRINK -
TYPE_SHOPPING -
TYPE_HEALTH_AND_FITENESS -
TYPE_MEDICAL -
TYPE_PARENTING -
TYPE_DATING
The images are required to be hosted on public CDNs so that Google can access them.
Guidelines to use the content categories
- Some entities like ArticleEntity and GenericFeaturedEntity are eligible to use any of the content categories. For other entities like EventEntity , EventReservationEntity , PointOfInterestEntity , only a subset of these categories are eligible. Check the list of categories eligible for an entity type before populating the list.
Use the specific entity type for some content categories over a combination of the Generic entities and the ContentCategory:
- TYPE_MOVIES_AND_TV_SHOWS - Check out the entities from Watch integration guide before using the generic entities.
- TYPE_BOOKS - Check out the EbookEntity before using the generic entities.
- TYPE_AUDIOBOOKS - Check out AudiobookEntity before using the generic entities.
- TYPE_SHOPPING - Check out ShoppingEntity before using the generic entities.
- TYPE_FOOD_AND_DRINK - Check out entities from Food Integration guide before using the generic entities.
The ContentCategory field is optional and should be left blank if the content doesn't belong to any of the categories mentioned earlier.
In case multiple content categories are provided, provide them in the order of relevance to the content with the most relevant content category placed first in the list.
Шаг 2: Предоставьте данные кластера.
It is recommended to have the content publish job executed in the background (for example, using WorkManager ) and scheduled on a regular basis or on an event basis (for example, every time the user opens the app or when the user just added something to their cart).
AppEngageTravelClient is responsible for publishing clusters.
There are following APIs to publish clusters in the client:
-
isServiceAvailable -
publishRecommendationClusters -
publishFeaturedCluster -
publishReservationCluster -
publishContinueSearchCluster -
publishUserAccountManagementRequest -
updatePublishStatus -
deleteRecommendationsClusters -
deleteFeaturedCluster -
deleteReservationCluster -
deleteContinueSearchCluster -
deleteUserManagementCluster -
deleteClusters
isServiceAvailable
Этот API используется для проверки доступности сервиса для интеграции и возможности отображения контента на устройстве.
Котлин
client.isServiceAvailable.addOnCompleteListener { task ->
if (task.isSuccessful) {
// Handle IPC call success
if(task.result) {
// Service is available on the device, proceed with content publish
// calls.
} else {
// Service is not available, no further action is needed.
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
}
Java
client.isServiceAvailable().addOnCompleteListener(task - > {
if (task.isSuccessful()) {
// Handle success
if(task.getResult()) {
// Service is available on the device, proceed with content publish
// calls.
} else {
// Service is not available, no further action is needed.
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
});
publishRecommendationClusters
Этот API используется для публикации списка объектов RecommendationCluster .
Котлин
client.publishRecommendationClusters(
PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Top Picks For You")
.build()
)
.build()
)
Java
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
new RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Top Picks For You")
.build())
.build());
После получения запроса сервисом в рамках одной транзакции выполняются следующие действия:
- Существующие данные
RecommendationClusterот партнера-разработчика удалены. - Данные из запроса анализируются и сохраняются в обновленном кластере рекомендаций.
В случае ошибки весь запрос отклоняется, и сохраняется текущее состояние.
publishFeaturedCluster
Этот API используется для публикации списка объектов FeaturedCluster .
Котлин
client.publishFeaturedCluster(
PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
FeaturedCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.build())
.build())
Java
client.publishFeaturedCluster(
new PublishFeaturedClustersRequest.Builder()
.addFeaturedCluster(
new FeaturedCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.build())
.build());
После получения запроса сервисом в рамках одной транзакции выполняются следующие действия:
- Существующие данные
FeaturedClusterот партнера-разработчика удаляются. - Данные из запроса анализируются и сохраняются в обновленном кластере избранных элементов.
В случае ошибки весь запрос отклоняется, и сохраняется текущее состояние.
publishReservationCluster
This API is used to publish a ReservationCluster object.
Котлин
client.publishReservationCluster(
PublishReservationClusterRequest.Builder()
.setReservationCluster(
ReservationCluster.Builder()
.addLodgingReservationEntity(lodgingReservationEntity)
.addVehicleRentalReservationEntity(vehicleRentalReservationEntity)
.addTransportationReservationEntity(transportationReservationEntity)
.addEventReservationEntity(eventReservationEntity)
.addRestaurantReservationEntity(restaurantReservationEntity)
.build())
.build())
Java
client.publishReservationCluster(
new PublishReservationClusterRequest.Builder()
.setReservationCluster(
new ReservationCluster.Builder()
.addLodgingReservationEntity(lodgingReservationEntity)
.addVehicleRentalReservationEntity(vehicleRentalReservationEntity)
.addTransportationReservationEntity(transportationReservationEntity)
.addEventReservationEntity(eventReservationEntity)
.addRestaurantReservationEntity(restaurantReservationEntity)
.build())
.build());
После получения запроса сервисом в рамках одной транзакции выполняются следующие действия:
- Existing
ReservationClusterdata from the developer partner is removed. - Data from the request is parsed and stored in the updated Reservation Cluster.
В случае ошибки весь запрос отклоняется, и сохраняется текущее состояние.
publishContinueSearchCluster
This API is used to publish a list of ContinueSearchCluster objects.
Котлин
client.publishContinueSearchCluster(
PublishContinueSearchClusterRequest.Builder()
.setContinueSearchCluster(
ContinueSearchCluster.Builder()
.addPointOfInterestEntity(entity1)
.addPointOfInterestEntity(entity2)
.build())
.build())
Java
client.publishContinueSearchCluster(
new PublishContinueSearchClusterRequest.Builder()
.setContinueSearchCluster(
new ContinueSearchCluster.Builder()
.addPointOfInterestEntity(entity1)
.addPointOfInterestEntity(entity2)
.build())
.build());
После получения запроса сервисом в рамках одной транзакции выполняются следующие действия:
- Existing
ContinueSearchClusterdata from the developer partner is removed. - Data from the request is parsed and stored in the updated Continue Search Cluster.
В случае ошибки весь запрос отклоняется, и сохраняется текущее состояние.
publishUserAccountManagementRequest
Этот API используется для публикации карточки входа. Действие входа перенаправляет пользователей на страницу авторизации приложения, чтобы приложение могло публиковать контент (или предоставлять более персонализированный контент).
Следующие метаданные являются частью карточки входа в систему:
| Атрибут | Требование | Описание |
|---|---|---|
| Action Uri | Необходимый | Глубокая ссылка на действие (т.е. переход на страницу входа в приложение) |
| Изображение | Необязательно — если не указано, необходимо указать заголовок. | Изображение, показанное на карте Изображения с соотношением сторон 16x9 и разрешением 1264x712. |
| Заголовок | Изображение необязательно — если не указано, его необходимо предоставить. | Название на карточке |
| Текст действия | Необязательный | Текст, отображаемый в призыве к действию (например, при входе в систему) |
| Субтитры | Необязательный | Дополнительный подзаголовок на карточке (по желанию) |
Котлин
var SIGN_IN_CARD_ENTITY =
SignInCardEntity.Builder()
.addPosterImage(
Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(500)
.setImageWidthInPixel(500)
.build())
.setActionText("Sign In")
.setActionUri(Uri.parse("http://xx.com/signin"))
.build()
client.publishUserAccountManagementRequest(
PublishUserAccountManagementRequest.Builder()
.setSignInCardEntity(SIGN_IN_CARD_ENTITY)
.build());
Java
SignInCardEntity SIGN_IN_CARD_ENTITY =
new SignInCardEntity.Builder()
.addPosterImage(
new Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(500)
.setImageWidthInPixel(500)
.build())
.setActionText("Sign In")
.setActionUri(Uri.parse("http://xx.com/signin"))
.build();
client.publishUserAccountManagementRequest(
new PublishUserAccountManagementRequest.Builder()
.setSignInCardEntity(SIGN_IN_CARD_ENTITY)
.build());
После получения запроса сервисом в рамках одной транзакции выполняются следующие действия:
- Существующие данные
UserAccountManagementClusterот партнера-разработчика удаляются. - Данные из запроса анализируются и сохраняются в обновленном кластере UserAccountManagementCluster.
В случае ошибки весь запрос отклоняется, и сохраняется текущее состояние.
updatePublishStatus
Если по каким-либо внутренним причинам ни один из кластеров не опубликован, мы настоятельно рекомендуем обновить статус публикации с помощью API updatePublishStatus . Это важно, потому что:
- Указание статуса во всех сценариях, даже когда контент опубликован (STATUS == PUBLISHED), имеет решающее значение для заполнения панелей мониторинга, которые используют этот явный статус для отображения состояния и других показателей вашей интеграции.
- Если контент не опубликован, но статус интеграции не нарушен (STATUS == NOT_PUBLISHED), Google может избежать срабатывания оповещений на панелях мониторинга состояния приложения. Это подтверждает, что контент не опубликован из-за ожидаемой ситуации с точки зрения поставщика.
- Это помогает разработчикам получать информацию о том, когда данные публикуются, а когда нет.
- Google может использовать коды состояния, чтобы подтолкнуть пользователя к выполнению определенных действий в приложении, чтобы он мог увидеть контент приложения или обойти его ограничения.
Список допустимых кодов статуса публикации:
// Content is published
AppEngagePublishStatusCode.PUBLISHED,
// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,
// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,
// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,
// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,
// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,
// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,
// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,
// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER
Если контент не публикуется из-за того, что пользователь не авторизован, Google рекомендует опубликовать карточку входа. Если по какой-либо причине поставщики не могут опубликовать карточку входа, мы рекомендуем вызвать API updatePublishStatus со статусом NOT_PUBLISHED_REQUIRES_SIGN_IN.
Котлин
client.updatePublishStatus(
PublishStatusRequest.Builder()
.setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
.build())
Java
client.updatePublishStatus(
new PublishStatusRequest.Builder()
.setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
.build());
deleteRecommendationClusters
Этот API используется для удаления содержимого кластеров рекомендаций.
Котлин
client.deleteRecommendationClusters()
Java
client.deleteRecommendationClusters();
Когда сервис получает запрос, он удаляет существующие данные из кластеров рекомендаций. В случае ошибки весь запрос отклоняется, и сохраняется текущее состояние.
deleteFeaturedCluster
Этот API используется для удаления содержимого раздела "Рекомендуемые кластеры".
Котлин
client.deleteFeaturedCluster()
Java
client.deleteFeaturedCluster();
Когда сервис получает запрос, он удаляет существующие данные из кластера избранных данных. В случае ошибки весь запрос отклоняется, и сохраняется существующее состояние.
deleteReservationCluster
This API is used to delete the content of Reservation Cluster.
Котлин
client.deleteReservationCluster()
Java
client.deleteReservationCluster();
When the service receives the request, it removes the existing data from the Reservation Cluster. In case of an error, the entire request is rejected and the existing state is maintained.
deleteUserManagementCluster
Этот API используется для удаления содержимого кластера UserAccountManagement.
Котлин
client.deleteUserManagementCluster()
Java
client.deleteUserManagementCluster();
Когда служба получает запрос, она удаляет существующие данные из кластера UserAccountManagement. В случае ошибки весь запрос отклоняется, и сохраняется существующее состояние.
deleteContinueSearchCluster
This API is used to delete the content of Continue Search Cluster.
Котлин
client.deleteContinueSearchCluster()
Java
client.deleteContinueSearchCluster();
When the service receives the request, it removes the existing data from the Continue Search Cluster. In case of an error, the entire request is rejected, and the existing state is maintained.
deleteClusters
Этот API используется для удаления содержимого кластера определенного типа.
Котлин
client.deleteClusters(
DeleteClustersRequest.Builder()
.addClusterType(ClusterType.TYPE_RESERVATION)
.addClusterType(ClusterType.TYPE_FEATURED)
.addClusterType(ClusterType.TYPE_RECOMMENDATION)
.addClusterType(ClusterType.TYPE_CONTINUE_SEARCH)
.build())
Java
client.deleteClusters(
new DeleteClustersRequest.Builder()
.addClusterType(ClusterType.TYPE_RESERVATION)
.addClusterType(ClusterType.TYPE_FEATURED)
.addClusterType(ClusterType.TYPE_RECOMMENDATION)
.addClusterType(ClusterType.TYPE_CONTINUE_SEARCH)
.build());
Когда сервис получает запрос, он удаляет существующие данные из всех кластеров, соответствующих указанным типам кластеров. Клиенты могут указать один или несколько типов кластеров. В случае ошибки весь запрос отклоняется, и сохраняется текущее состояние.
Обработка ошибок
Настоятельно рекомендуется отслеживать результаты выполнения задачи через API публикации, чтобы иметь возможность предпринять дальнейшие действия для восстановления и повторной отправки успешно выполненной задачи.
Котлин
client.publishRecommendationClusters(
PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(..)
.build())
.addOnCompleteListener { task ->
if (task.isSuccessful) {
// do something
} else {
val exception = task.exception
if (exception is AppEngageException) {
@AppEngageErrorCode val errorCode = exception.errorCode
if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
// do something
}
}
}
}
Java
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(...)
.build())
.addOnCompleteListener(
task -> {
if (task.isSuccessful()) {
// do something
} else {
Exception exception = task.getException();
if (exception instanceof AppEngageException) {
@AppEngageErrorCode
int errorCode = ((AppEngageException) exception).getErrorCode();
if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
// do something
}
}
}
});
В результате возникает ошибка, которая возвращается как AppEngageException , при этом причина ошибки указывается в виде кода ошибки.
| Код ошибки | Название ошибки | Примечание |
|---|---|---|
1 | SERVICE_NOT_FOUND | Данная услуга недоступна на указанном устройстве. |
2 | SERVICE_NOT_AVAILABLE | Услуга доступна на данном устройстве, но недоступна в момент звонка (например, она явно отключена). |
3 | SERVICE_CALL_EXECUTION_FAILURE | Выполнение задачи завершилось с ошибкой из-за проблем с многопоточностью. В этом случае можно повторить попытку. |
4 | SERVICE_CALL_PERMISSION_DENIED | Звонившему не разрешается вызывать специалиста для оказания услуги. |
5 | SERVICE_CALL_INVALID_ARGUMENT | Запрос содержит недопустимые данные (например, большее количество кластеров, чем разрешено). |
6 | SERVICE_CALL_INTERNAL | На стороне сервиса произошла ошибка. |
7 | SERVICE_CALL_RESOURCE_EXHAUSTED | Вызов сервисной службы происходит слишком часто. |
Шаг 3: Обработка широковещательных намерений
Помимо выполнения вызовов API для публикации контента через задание, также необходимо настроить BroadcastReceiver для приема запросов на публикацию контента.
Основная цель широковещательных интентов — повторная активация приложения и принудительная синхронизация данных. Широковещательные интенты не предназначены для частой отправки. Они срабатывают только тогда, когда служба Engage определяет, что контент может быть устаревшим (например, недельной давности). Таким образом, обеспечивается большая уверенность в том, что пользователь получит актуальный контент, даже если приложение долгое время не запускалось.
Для настройки BroadcastReceiver необходимо использовать два следующих способа:
Динамически зарегистрируйте экземпляр класса
BroadcastReceiverс помощьюContext.registerReceiver(). Это позволит осуществлять связь с приложениями, которые всё ещё находятся в оперативной памяти.
Котлин
class AppEngageBroadcastReceiver : BroadcastReceiver(){
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger continue search cluster publish when PUBLISH_CONTINUE_SEARCH
// broadcast is received
// Trigger reservation cluster publish when PUBLISH_RESERVATION broadcast is
// received
}
fun registerBroadcastReceivers(context: Context){
var context = context
context = context.applicationContext
// Register Recommendation Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Featured Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Continue Search Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(com.google.android.engage.travel.service.Intents.ACTION_PUBLISH_CONTINUE_SEARCH),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Reservation Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(com.google.android.engage.travel.service.Intents.ACTION_PUBLISH_RESERVATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
}
Java
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger continue search cluster publish when PUBLISH_CONTINUE_SEARCH
// broadcast is received
// Trigger reservation cluster publish when PUBLISH_RESERVATION broadcast is
// received
}
public static void registerBroadcastReceivers(Context context) {
context = context.getApplicationContext();
// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Continue Search Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.travel.service.Intents.ACTION_PUBLISH_CONTINUE_SEARCH),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Reservation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.travel.service.Intents.ACTION_PUBLISH_RESERVATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
}
В файле
AndroidManifest.xmlстатически объявите реализацию с помощью тега<receiver>. Это позволит приложению получать широковещательные интенты, когда оно не запущено, а также позволит приложению публиковать контент.
<application>
<receiver
android:name=".AppEngageBroadcastReceiver"
android:permission="com.google.android.engage.REQUEST_ENGAGE_DATA"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.travel.PUBLISH_CONTINUE_SEARCH" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.travel.PUBLISH_RESERVATION" />
</intent-filter>
</receiver>
</application>
Сервис отправляет следующие намерения :
-
com.google.android.engage.action.PUBLISH_RECOMMENDATIONРекомендуется инициировать вызовpublishRecommendationClustersпри получении этого намерения. -
com.google.android.engage.action.PUBLISH_FEATUREDРекомендуется инициировать вызовpublishFeaturedClusterпри получении этого намерения. -
com.google.android.engage.action.travel.PUBLISH_CONTINUE_SEARCHIt is recommended to start apublishContinueSearchClustercall when receiving this intent. -
com.google.android.engage.action.travel.PUBLISH_RESERVATIONIt is recommended to start apublishReservationClustercall when receiving this intent.
Рабочий процесс интеграции
Пошаговое руководство по проверке интеграции после ее завершения см. в разделе «Рабочий процесс интеграции для разработчиков Engage» .
Часто задаваемые вопросы
Часто задаваемые вопросы по Engage SDK можно найти в разделе "Часто задаваемые вопросы".
Контакт
В случае возникновения вопросов в процессе интеграции обращайтесь по адресу engage-developers@google.com .
Следующие шаги
После завершения интеграции ваши дальнейшие действия будут следующими:
- Отправьте электронное письмо на адрес
engage-developers@google.comи прикрепите к нему свой интегрированный APK-файл, готовый к тестированию компанией Google. - Google проводит внутреннюю проверку и анализ, чтобы убедиться, что интеграция работает должным образом. Если потребуются изменения, Google свяжется с вами и предоставит всю необходимую информацию.
- После завершения тестирования и если никаких изменений не потребуется, Google свяжется с вами, чтобы уведомить о возможности публикации обновленного и интегрированного APK-файла в Play Store.
- After Google has confirmed that your updated APK has been published to the Play Store, your Recommendation , Featured , Reservation , and Continue Search clusters may be published and visible to users.