Повышайте вовлеченность пользователей, обращаясь к ним там, где они находятся. Интегрируйте Engage SDK, чтобы показывать персональные рекомендации и контент, который пользователи не досмотрели, на разных платформах на устройстве, например в подборках, Entertainment Space и Google Play. Интеграция добавляет менее 50 КБ (в сжатом виде) к среднему размеру APK и занимает у разработчиков около недели. Подробную информацию вы найдете на нашем сайте.
В этом руководстве содержатся инструкции для партнеров-разработчиков по размещению контента о путешествиях и мероприятиях на платформах Google Play Покупок.
Поддерживаемые категории и платформы
Доступность платформ Engage SDK зависит от категории контента в приложении. В таблице ниже указано, какие требования нужно выполнить, чтобы ваши товары показывались на разных платформах.
| Статус | Категория контента или сценарий использования | Поддерживаемые платформы |
|---|---|---|
|
Поддерживается (Доступно на всех платформах) |
|
|
| Чего пользователь не может |
|
Навыки работы с Android
Посмотреть на GitHubИнтегрируйте Engage SDK
android skills add engage-sdk-integrationСведения об интеграции
В этом разделе подробно описаны шаги, модели данных и терминология, необходимые для интеграции с Engage SDK для контента о путешествиях и мероприятиях.
Терминология
Интеграция включает следующие типы кластеров: Рекомендации, Избранное, Бронирование и Продолжить поиск.
Кластеры Рекомендации содержат персонализированные предложения путешествий и мероприятий от отдельных партнеров-разработчиков. Рекомендации могут быть персонализированными или общими (например, популярные товары). Используйте их, чтобы рекомендовать статьи, мероприятия, места проживания или достопримечательности.
- Кластер рекомендаций может состоять из страниц
ArticleEntity,EventEntity,LodgingEntity,PointOfInterestEntityилиStoreEntity, но не из страниц разных типов.
Рекомендации имеют следующую структуру:
Кластер рекомендаций. Раздел интерфейса, в котором собраны рекомендации от одного партнера-разработчика.
Объект. Объект, представляющий один элемент в кластере. Эта интеграция предлагает некоторые объекты, которые будут отображаться с помощью кластера рекомендаций:
ArticleEntity – рекомендация текстового контента, связанного с путешествиями и мероприятиями. Его можно использовать для статей, записей в блогах, маркетингового контента, фрагментов новостей и т. д.
Рисунок 1. Интерфейс с одним объектом ArticleEntity в кластере рекомендаций. EventEntity – объект, представляющий событие, которое произойдет в будущем. Время начала мероприятия – это важная информация, которую необходимо сообщить пользователям.
Рис. 2. Интерфейс с одним объектом EventEntity в кластере рекомендаций. LodgingEntity – объект размещения, например отель, апартаменты или дом для отпуска, который сдается в краткосрочную или долгосрочную аренду.
Рисунок 3. Интерфейс, в котором показан один объект LodgingEntity в кластере рекомендаций. StoreEntity. Представляет магазин, ресторан, кафе и т. д. Выделяет контент, в котором заведение общественного питания или магазин является важной информацией, которую необходимо донести до пользователей.
Рисунок 4. Интерфейс с одним объектом StoreEntity в кластере рекомендаций. PointOfInterestEntity – объект, представляющий интересное место, например заправку, место проведения мероприятия, тематический парк, музей, туристическую достопримечательность, пешеходную тропу и т. д. Он выделяет контент, в котором местоположение является важной информацией, которую необходимо донести до пользователей. Его нельзя использовать для проживания, магазина или ресторана.
Рисунок 5. Интерфейс с одним объектом PointOfInterestEntity в кластере рекомендаций.
- Кластер рекомендаций может состоять из страниц
В кластере Бронирование показывается контент, с которым недавно взаимодействовали пользователи, от нескольких партнеров-разработчиков. Каждый партнер-разработчик может транслировать не более 10 объектов в кластере бронирования.
Контент бронирования может иметь следующую структуру:
RestaurantReservationEntity – бронирование столика в ресторане или кафе. Помогает пользователям отслеживать предстоящие или текущие бронирования.
Рисунок 6. Интерфейс с одним объектом RestaurantReservationEntity в кластере Reservation. EventReservationEntity – бронирование мероприятия. Помогает пользователям отслеживать предстоящие или текущие бронирования. К таким событиям относятся, помимо прочего, следующие:
- Спортивные мероприятия, например бронирование билетов на футбольный матч.
- Игровые события, например бронирование мест на киберспортивных мероприятиях.
- Развлекательные мероприятия, например бронирование билетов в кино, на концерт, в театр или на встречу с писателем.
- Бронирование путешествий или посещения достопримечательностей, например экскурсий или билетов в музей.
- Бронирование мест на общественных мероприятиях, семинарах и конференциях
- Бронирование образовательных / тренинговых сессий
Рисунок 7. Интерфейс, в котором показан один объект EventReservationEntity в кластере Reservation. LodgingReservationEntity – бронирование жилья для путешествий. Помогает пользователям отслеживать предстоящие или текущие бронирования отелей или жилья для отпуска.
Рисунок 8. Интерфейс, в котором показан один объект LodgingReservationEntity в кластере Reservation. TransportationReservationEntity – объект, представляющий бронирование билетов на транспорт любого типа. Помогает пользователям отслеживать бронирования на предстоящие или текущие поездки на самолете, пароме, поезде, автобусе, круизном лайнере или такси.
Рисунок 9. Интерфейс с одним объектом TransportationReservationEntity в кластере Reservation. VehicleRentalReservationEntity представляет бронирование автомобиля напрокат и помогает пользователям отслеживать предстоящие или текущие бронирования.
Рисунок 10. Интерфейс с одним объектом VehicleRentalReservationEntity в кластере Reservation.
В кластере Рекомендуемые показываются объекты от разных партнеров-разработчиков. В верхней части интерфейса будет только один кластер "Рекомендуемые", который будет иметь приоритет над всеми кластерами рекомендаций. Каждый партнер-разработчик сможет транслировать до 10 объектов в кластере "Рекомендуемые".
GenericFeaturedEntity. В отличие от рекомендуемого контента, продвигаемый контент должен быть только один. Это самый важный контент, который будет интересен и полезен пользователям.
Рисунок 11. Интерфейс с FeaturedCluster и списком GenericFeaturedEntity
Кластер Продолжить поиск помогает пользователям возобновить поиск, начатый ранее. В нем показывается список поисковых запросов, которые пользователь недавно вводил во всех своих приложениях для путешествий. Кластер будет закреплен на второй позиции – после бронирований и перед кластерами избранного и рекомендаций. Каждый партнер-разработчик может транслировать до трех объектов в кластере "Продолжить поиск".
- 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.6.0'
}
Сводка
В основе дизайна лежит реализация привязанной службы.
На данные, которые может публиковать клиент, распространяются следующие ограничения для разных типов кластеров:
| Тип кластера | Ограничения кластера | Минимальное количество объектов в кластере | Максимальное количество объектов в кластере |
|---|---|---|---|
| Кластеры рекомендаций | Не более 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 определены разные объекты, представляющие каждый тип товара. Для категории "Путешествия и мероприятия" поддерживаются следующие объекты:
GenericFeaturedEntityArticleEntityEventEntityLodgingEntityStoreEntityPointOfInterestEntityRestaurantReservationEntityEventReservationEntityLodgingReservationEntityTransportationReservationEntityVehicleRentalReservationEntity
В таблицах ниже перечислены доступные атрибуты и требования для каждого типа.
GenericFeaturedEntity
| Атрибут | Требования | Описание | Формат |
|---|---|---|---|
| URI действия | Обязательно |
Ссылка на контент в приложении поставщика. Примечание. Ссылки на контент можно использовать для атрибуции. Ознакомьтесь с разделом часто задаваемых вопросов |
URI |
| Постеры | Обязательно | Если вы добавите несколько изображений, мы покажем только одно из них. Рекомендуемое соотношение сторон – 16:9. Примечание. Если вы используете значок, оставьте свободное пространство в 24 dp сверху и снизу изображения. |
Ознакомьтесь со спецификациями изображений. |
| Название | Необязательно | Название объекта. | Произвольный текст Рекомендуемый размер текста: 50 символов. |
| Описание | Необязательно | Один абзац текста с описанием объекта. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста: 180 символов. |
| Список субтитров | Необязательно | До трех подзаголовков, каждый из которых состоит из одной строки текста. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста для каждой строки субтитров: не более 50 символов. |
| Значки | Необязательно | Каждый значок может быть либо текстом (не более 15 символов), либо небольшим изображением. Специальное оформление UX поверх изображения или видео, например значок, наложенный на изображение.
|
|
| Значок – текст | Необязательно | Название значка Примечание. Для значка требуется текст или изображение. |
Произвольный текст Рекомендуемый размер текста: не более 15 символов. |
| Значок – изображение | Необязательно | Маленькое изображение Специальное оформление UX, например значок поверх миниатюры изображения или видео. Примечание. Для значка требуется текст или изображение. |
Ознакомьтесь со спецификациями изображений. |
| Категории контента | Необязательно | Опишите категорию контента в объекте. | Список перечислений Подробные инструкции вы найдете в разделе Категория контента. |
| DisplayTimeWindow (необязательно) – задает временной интервал, в течение которого контент будет показываться на платформе. | |||
| Временная метка начала | Необязательно |
Временная метка, после которой контент должен показываться на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
| Временная метка окончания | Необязательно |
Временная метка, после которой контент больше не показывается на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
ArticleEntity
| Атрибут | Требования | Описание | Формат |
|---|---|---|---|
| URI действия | Обязательно |
Ссылка на контент в приложении поставщика. Примечание. Ссылки на контент можно использовать для атрибуции. Ознакомьтесь с разделом часто задаваемых вопросов |
URI |
| Название | Обязательно | Название объекта. | Произвольный текст Рекомендуемый размер текста: не более 50 символов. |
| Постеры | Необязательно | Если вы добавите несколько изображений, мы покажем только одно из них. Рекомендуемое соотношение сторон – 16:9. Примечание. Настоятельно рекомендуется добавить изображение. Если вы используете значок, оставьте свободное пространство размером 24 dp в верхней и нижней частях изображения. |
Ознакомьтесь со спецификациями изображений. |
| Источник – название | Необязательно | Имя автора, название организации или имя репортера. | Произвольный текст Рекомендуемый размер текста: менее 25 символов. |
| Источник – изображение | Необязательно | Изображение источника, например автора, организации или репортера. | Ознакомьтесь со спецификациями изображений. |
| Описание | Необязательно | Один абзац текста с описанием объекта. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста: 180 символов. |
| Список субтитров | Необязательно | До трех подзаголовков, каждый из которых состоит из одной строки текста. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста для каждой строки субтитров: не более 50 символов. |
| Значки | Необязательно | Каждый значок может быть либо текстом (не более 15 символов), либо небольшим изображением. Специальное оформление UX поверх изображения или видео, например значок, наложенный на изображение.
|
|
| Значок – текст | Необязательно | Название значка Примечание. Для значка требуется текст или изображение. |
Произвольный текст Рекомендуемый размер текста: не более 15 символов. |
| Значок – изображение | Необязательно | Маленькое изображение Специальное оформление UX, например значок поверх миниатюры изображения или видео. Примечание. Для значка требуется текст или изображение. |
Ознакомьтесь со спецификациями изображений. |
| Время публикации контента | Необязательно | Временная метка в миллисекундах, указывающая, когда контент был опубликован или обновлен в приложении. | Временная метка в миллисекундах с начала отсчета |
| Время последнего взаимодействия | Необязательно | Временная метка в миллисекундах, когда пользователь в последний раз взаимодействовал с этим объектом. |
Временная метка в миллисекундах с начала отсчета |
| Процент выполнения | Необязательно | Процент контента, который пользователь уже посмотрел. |
Целое число от 0 до 100 включительно. |
| Категории контента | Необязательно | Опишите категорию контента в объекте. | Список перечислений Подробные инструкции вы найдете в разделе Категория контента. |
| DisplayTimeWindow (необязательно) – задает временной интервал, в течение которого контент будет показываться на платформе. | |||
| Временная метка начала | Необязательно |
Временная метка, после которой контент должен показываться на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
| Временная метка окончания | Необязательно |
Временная метка, после которой контент больше не показывается на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
EventEntity
| Атрибут | Требования | Описание | Формат |
|---|---|---|---|
| URI действия | Обязательно |
Ссылка на контент в приложении поставщика. Примечание. Ссылки на контент можно использовать для атрибуции. Ознакомьтесь с разделом часто задаваемых вопросов |
URI |
| Название | Обязательно | Название объекта. | Строка Рекомендуемый размер текста: не более 50 символов. |
| Локализованное время начала – временная метка | Обязательно |
Временная метка в формате Unix, когда должно начаться событие. |
Joda-Time Instant |
| Локализованное время начала – часовой пояс | Обязательно |
Часовой пояс, в котором должно начаться мероприятие. |
Joda-Time DateTimeZone Подробную информацию можно найти в спецификациях часовых поясов. |
| Режим событий | Обязательно | Поле, в котором указывается, как будет проходить мероприятие: онлайн, офлайн или в смешанном формате. |
Enum: VIRTUAL, IN_PERSON, or HYBRID |
| Постеры | Обязательно | Если вы добавите несколько изображений, мы покажем только одно из них. Рекомендуемое соотношение сторон – 16:9. Примечание. Настоятельно рекомендуется добавить изображение. Если вы используете значок, оставьте свободное пространство размером 24 dp в верхней и нижней частях изображения. |
Ознакомьтесь со спецификациями изображений. |
| Местоположение – страна | Условно обязательно | Страна, в которой проводится мероприятие. Примечание. Это поле обязательно для событий IN_PERSON и HYBRID. |
Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – город | Условно обязательно | Город, в котором проходит мероприятие. Примечание. Это поле обязательно для событий IN_PERSON и HYBRID. |
Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – отображаемый адрес | Условно обязательно | Адрес или название места проведения мероприятия, которое будет показываться пользователю. Примечание. Это поле обязательно для событий IN_PERSON и HYBRID. |
Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – почтовый адрес | Необязательно | Почтовый адрес (если применимо) места проведения мероприятия. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – штат | Необязательно | Штат или область (если применимо), где проводится мероприятие. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – почтовый индекс | Необязательно | Почтовый индекс места проведения мероприятия (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – район | Необязательно | Район, в котором проводится мероприятие (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Время окончания | Необязательно |
Временная метка эпохи, когда ожидается завершение события. Примечание. Значение указывается в миллисекундах. |
Временная метка в миллисекундах с начала отсчета |
| Описание | Необязательно | Один абзац текста с описанием объекта. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста: 180 символов. |
| Список субтитров | Необязательно | До трех подзаголовков, каждый из которых состоит из одной строки текста. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста для каждой строки субтитров: не более 50 символов. |
| Значки | Необязательно |
Каждый значок может быть либо текстом (не более 15 символов), либо небольшим изображением. |
|
| Значок – текст | Необязательно | Название значка Примечание. Для значка требуется текст или изображение. |
Произвольный текст Рекомендуемый размер текста: не более 15 символов. |
| Значок – изображение | Необязательно | Маленькое изображение Специальное оформление UX, например значок поверх миниатюры изображения или видео. Примечание. Для значка требуется текст или изображение. |
Ознакомьтесь со спецификациями изображений. |
| Price - CurrentPrice | Условно обязательно |
Текущая цена билета или пропуска на мероприятие. Обязателен, если указана зачеркнутая цена. |
Произвольный текст |
| Price – StrikethroughPrice | Необязательно | Первоначальная цена билета или пропуска на мероприятие. | Произвольный текст |
| Уточнение цены | Необязательно | Уточнение цены, чтобы выделить промоакцию, событие или скидку для участников, если они доступны. | Произвольный текст Рекомендуемая длина текста – до 45 символов. Если текст слишком длинный, он может быть сокращен. |
| Категории контента | Необязательно | Опишите категорию контента в объекте. | Список допустимых перечислений
Подробные инструкции вы найдете в разделе Категория контента. |
| DisplayTimeWindow (необязательно) – задает временной интервал, в течение которого контент будет показываться на платформе. | |||
| Временная метка начала | Необязательно |
Временная метка, после которой контент должен показываться на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
| Временная метка окончания | Необязательно |
Временная метка, после которой контент больше не показывается на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
LodgingEntity
| Атрибут | Требования | Описание | Формат |
|---|---|---|---|
| URI действия | Обязательно |
Ссылка на контент в приложении поставщика. Примечание. Ссылки на контент можно использовать для атрибуции. Ознакомьтесь с разделом часто задаваемых вопросов |
URI |
| Название | Обязательно | Название объекта. | Строка Рекомендуемый размер текста: не более 50 символов. |
| Постеры | Обязательно |
Если вы добавите несколько изображений, мы покажем только одно из них. Рекомендуемое соотношение сторон – 16:9. Примечание. Если вы используете значок, оставьте свободное пространство в 24 dp сверху и снизу изображения. |
Ознакомьтесь со спецификациями изображений. |
| Местоположение – страна | Обязательно | Страна, в которой находится жилье. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – город | Обязательно | Город, в котором находится гостиница. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – отображаемый адрес | Обязательно | Адрес, который будет показан пользователю. В большинстве случаев рекомендуется указывать название города и, возможно, штата или страны. Указывайте почтовый адрес или район, только если пользователь находится рядом с этим местом, знаком с ним или если город включен в название кластера. Если вы указываете почтовый адрес, он должен быть кратким. По возможности используйте сокращения, например "ул." вместо "улица" или "пр-т" вместо "проспект". | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – почтовый адрес | Необязательно | Почтовый адрес места проживания (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – штат | Необязательно | Штат или провинция, в которой находится объект размещения (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – почтовый индекс | Необязательно | Почтовый индекс места размещения (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – район | Необязательно | Район, в котором находится гостиница (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Значки | Необязательно |
Каждый значок может быть либо текстом (не более 15 символов), либо небольшим изображением. |
|
| Значок – текст | Необязательно | Название значка Примечание. Для значка требуется текст или изображение. |
Произвольный текст Рекомендуемый размер текста: не более 15 символов. |
| Значок – изображение | Необязательно | Маленькое изображение Специальное оформление UX, например значок поверх миниатюры изображения или видео. Примечание. Для значка требуется текст или изображение. |
Ознакомьтесь со спецификациями изображений. |
| Описание | Необязательно | Один абзац текста с описанием объекта. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста: 180 символов. |
| Список субтитров | Необязательно | До трех подзаголовков, каждый из которых состоит из одной строки текста. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста для каждой строки субтитров: не более 50 символов. |
| AvailabilityTimeWindow – Локализованное время начала – Временная метка | Необязательно | Временная метка, когда место проживания должно быть открыто или доступно. | Joda-Time Instant |
| AvailabilityTimeWindow – Локализованное время начала – Часовой пояс | Необязательно | Часовой пояс, в котором работает гостиница. |
Joda-Time DateTimeZone Подробную информацию можно найти в спецификациях часовых поясов. |
| AvailabilityTimeWindow – локализованное время окончания – временная метка | Необязательно | Временная метка, до которой гостиница будет открыта или доступна. | Joda-Time Instant |
| AvailabilityTimeWindow – локализованное время окончания – часовой пояс | Необязательно | Часовой пояс, в котором работает гостиница. |
Joda-Time DateTimeZone Подробную информацию можно найти в спецификациях часовых поясов. |
| Оценка – максимальное значение | Необязательно | Максимальное значение оценочной шкалы. Обязательно, если указано текущее значение оценки. |
Число >= 0,0 |
| Оценка – текущее значение | Необязательно | Текущее значение оценочной шкалы. Обязательно, если указано максимальное значение оценки. |
Число >= 0,0 |
| Рейтинг – количество | Необязательно | Количество оценок, полученных гостиницей. Примечание. Заполните это поле, если хотите контролировать, как информация будет показываться пользователям. Укажите краткую строку, которая будет показываться пользователю. Например, если количество равно 1 000 000, используйте сокращение "1 млн", чтобы оно не усекалось на экранах меньшего размера. |
Строка |
| Рейтинг – количество оценок | Необязательно | Количество оценок, полученных гостиницей. Примечание. Заполните это поле, если не хотите самостоятельно настраивать логику сокращения. Если указаны оба значения, пользователям будет показываться Count. |
Долгота |
| Price - CurrentPrice | Условно обязательно | Текущая цена проживания. Обязателен, если указана зачеркнутая цена. |
Произвольный текст |
| Price – StrikethroughPrice | Необязательно | Исходная цена проживания, которая будет зачеркнута в интерфейсе. | Произвольный текст |
| Уточнение цены | Необязательно | Уточнение цены, чтобы выделить промоакцию, событие или скидку для участников, если они доступны. | Произвольный текст Рекомендуемая длина текста – до 45 символов. Если текст слишком длинный, он может быть сокращен. |
| DisplayTimeWindow (необязательно) – задает временной интервал, в течение которого контент будет показываться на платформе. | |||
| Временная метка начала | Необязательно |
Временная метка, после которой контент должен показываться на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
| Временная метка окончания | Необязательно |
Временная метка, после которой контент больше не показывается на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
StoreEntity
Объект StoreEntity представляет отдельный магазин, который партнеры-разработчики хотят опубликовать, например популярное заведение общественного питания, которое может быть интересно путешественникам.
| Атрибут | Требования | Описание | Формат |
|---|---|---|---|
| Постеры | Обязательно | Добавьте хотя бы одно изображение. | Ознакомьтесь со спецификациями изображений. |
| URI действия | Обязательно |
Ссылка на контент в приложении поставщика. Примечание. Ссылки на контент можно использовать для атрибуции. Ознакомьтесь с разделом часто задаваемых вопросов |
URI |
| Название | Необязательно | Название магазина. | Произвольный текст Рекомендуемая длина текста: до 45 символов. Если текст слишком длинный, он может быть сокращен и дополнен многоточием. |
| Местоположение | Необязательно | Местоположение магазина. | Произвольный текст Рекомендуемая длина текста: до 45 символов. Если текст слишком длинный, он может быть сокращен и дополнен многоточием. |
| Уточнение | Необязательно | Выноска с информацией о промоакции, событии или обновлении в магазине (если есть). | Произвольный текст Рекомендуемая длина текста: до 45 символов. Если текст слишком длинный, он может быть сокращен. |
| Мелкий шрифт в уточнении | Необязательно | Текст мелким шрифтом для уточнения. | Произвольный текст Рекомендуемая длина текста: до 45 символов. Если текст слишком длинный, он может быть сокращен. |
| Описание | Необязательно | Описание магазина. | Произвольный текст Рекомендуемая длина текста: до 90 символов. Если текст слишком длинный, он может быть сокращен. |
| Категория | Необязательно | Категория магазина. В контексте заведений общественного питания это может быть тип кухни, например "французская", "современная американская", "рамен", "изысканная". |
Произвольный текст Рекомендуемая длина текста: до 45 символов. Если текст слишком длинный, он может быть сокращен. |
| Оценка – максимальное значение | Необязательно | Максимальное значение оценочной шкалы. Обязательно, если указано текущее значение оценки. |
Число >= 0,0 |
| Оценка – текущее значение | Необязательно | Текущее значение оценочной шкалы. Обязательно, если указано максимальное значение оценки. |
Число >= 0,0 |
| Рейтинг – количество | Необязательно | Количество оценок, полученных гостиницей. Примечание. Заполните это поле, если хотите контролировать, как информация будет показываться пользователям. Укажите краткую строку, которая будет показываться пользователю. Например, если количество равно 1 000 000, используйте сокращение "1 млн", чтобы оно не усекалось на экранах меньшего размера. |
Строка |
| Рейтинг – количество оценок | Необязательно | Количество оценок, полученных гостиницей. Примечание. Заполните это поле, если не хотите самостоятельно настраивать логику сокращения. Если указаны оба значения, пользователям будет показываться Count. |
Долгота |
| DisplayTimeWindow (необязательно) – задает временной интервал, в течение которого контент будет показываться на платформе. | |||
| Временная метка начала | Необязательно |
Временная метка, после которой контент должен показываться на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
| Временная метка окончания | Необязательно |
Временная метка, после которой контент больше не показывается на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
PointOfInterestEntity
| Атрибут | Требования | Описание | Формат |
|---|---|---|---|
| URI действия | Обязательно |
Ссылка на контент в приложении поставщика. Примечание. Ссылки на контент можно использовать для атрибуции. Ознакомьтесь с разделом часто задаваемых вопросов |
URI |
| Название | Обязательно | Название объекта. | Строка Рекомендуемый размер текста: не более 50 символов. |
| Постеры | Условно обязательно |
Если вы добавите несколько изображений, мы покажем только одно из них. Рекомендуемое соотношение сторон – 16:9. Примечание. Изображение обязательно, если объект входит в кластер рекомендаций. Если вы добавляете значок, убедитесь, что сверху и снизу изображения есть свободное пространство размером 24 dp. |
Ознакомьтесь со спецификациями изображений. |
| Время последнего взаимодействия | Условно обязательно |
Временная метка последнего взаимодействия пользователя с этим объектом. Примечание. Это поле обязательно, если объект является частью кластера продолжения поиска. |
Joda-Time Instant |
| Местоположение – страна | Условно обязательно |
Страна, в которой находится объект инфраструктуры. Примечание. Это поле является обязательным, если объект входит в кластер рекомендаций. |
Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – город | Условно обязательно |
Город, в котором находится объект инфраструктуры. Примечание. Это поле является обязательным, если объект входит в кластер рекомендаций. |
Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – отображаемый адрес | Условно обязательно |
Адрес, который будет показан пользователю. Укажите краткий адрес, по возможности используя сокращения (например, "ул." вместо "улица"). Эта строка может быть усечена в зависимости от устройства и настроек пользователя. Укажите название города, чтобы было понятно, о каком аэропорте идет речь. Примечание. Это поле обязательно, если объект входит в кластер рекомендаций. |
Произвольный текст Рекомендуемый размер текста: не более 35 символов. |
| Местоположение – почтовый адрес | Необязательно | Почтовый адрес объекта инфраструктуры (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – штат | Необязательно | Штат или провинция (если применимо), в которых находится объект. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – почтовый индекс | Необязательно | Почтовый индекс объекта инфраструктуры (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – район | Необязательно | Район (если применимо), в котором находится объект инфраструктуры. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| AvailabilityTimeWindow - Localized Start Time - Timestamp | Необязательно | Временная метка, указывающая, когда объект будет открыт или доступен. | Joda-Time Instant |
| AvailabilityTimeWindow – Локализованное время начала – Часовой пояс | Необязательно | Часовой пояс, в котором объект инфраструктуры должен быть открыт или доступен. |
Joda-Time DateTimeZone Подробную информацию можно найти в спецификациях часовых поясов. |
| AvailabilityTimeWindow – локализованное время окончания – временная метка | Необязательно | Временная метка, до которой объект инфраструктуры будет открыт или доступен. | Joda-Time Instant |
| AvailabilityTimeWindow – локализованное время окончания – часовой пояс | Необязательно | Часовой пояс, в котором объект инфраструктуры должен быть открыт или доступен. |
Joda-Time DateTimeZone Подробную информацию можно найти в спецификациях часовых поясов. |
| Значки | Необязательно |
Каждый значок может быть либо текстом (не более 15 символов), либо небольшим изображением. |
|
| Значок – текст | Необязательно | Название значка Примечание. Для значка требуется текст или изображение. |
Произвольный текст Рекомендуемый размер текста: не более 15 символов. |
| Значок – изображение | Необязательно | Маленькое изображение Специальное оформление UX, например значок поверх миниатюры изображения или видео. Примечание. Для значка требуется текст или изображение. |
Ознакомьтесь со спецификациями изображений. |
| Описание | Необязательно | Один абзац текста с описанием объекта. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста: 180 символов. |
| Список субтитров | Необязательно | До трех подзаголовков, каждый из которых состоит из одной строки текста. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста для каждой строки субтитров: не более 50 символов. |
| Оценка – максимальное значение | Необязательно | Максимальное значение оценочной шкалы. Обязательно, если указано текущее значение оценки. |
Число >= 0,0 |
| Оценка – текущее значение | Необязательно | Текущее значение оценочной шкалы. Обязательно, если указано максимальное значение оценки. |
Число >= 0,0 |
| Рейтинг – количество | Необязательно | Количество оценок объекта инфраструктуры. Примечание. Заполните это поле, если хотите контролировать, как информация будет показываться пользователям. Укажите краткую строку, которая может быть показана пользователю. Например, если количество равно 1 000 000, используйте сокращение "1 млн", чтобы оно не усекалось на экранах меньшего размера. |
Строка |
| Рейтинг – количество оценок | Необязательно | Количество оценок объекта инфраструктуры. Примечание. Заполните это поле, если не хотите самостоятельно настраивать логику сокращения. Если указаны оба значения, пользователям будет показываться Count. |
Долгота |
| Price - CurrentPrice | Условно обязательно |
Текущая цена билетов или пропусков для посещения объекта инфраструктуры. Обязателен, если указана зачеркнутая цена. |
Произвольный текст |
| Price – StrikethroughPrice | Необязательно | Исходная цена билетов или входных билетов для объекта инфраструктуры. | Произвольный текст |
| Уточнение цены | Необязательно | Уточнение цены, чтобы выделить промоакцию, событие или скидку для участников, если они доступны. |
Произвольный текст Рекомендуемая длина текста: не более 45 символов (слишком длинный текст может быть сокращен). |
| Категории контента | Необязательно | Опишите категорию контента в объекте. | Список допустимых перечислений
Подробные инструкции вы найдете в разделе Категория контента. |
| DisplayTimeWindow (необязательно) – задает временной интервал, в течение которого контент будет показываться на платформе. | |||
| Временная метка начала | Необязательно |
Временная метка, после которой контент должен показываться на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
| Временная метка окончания | Необязательно |
Временная метка, после которой контент больше не показывается на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
RestaurantReservationEntity
| Атрибут | Требования | Описание | Формат |
|---|---|---|---|
| URI действия | Обязательно |
Ссылка на контент в приложении поставщика. Примечание. Ссылки на контент можно использовать для атрибуции. Ознакомьтесь с разделом часто задаваемых вопросов |
URI |
| Название | Обязательно | Название объекта. | Строка Рекомендуемый размер текста: не более 50 символов. |
| Локализованное время начала бронирования – временная метка | Обязательно | Временная метка эпохи, когда должно начаться резервирование. | Joda-Time Instant |
| Локализованное время начала бронирования – часовой пояс | Обязательно | Часовой пояс, в котором должно начаться бронирование. |
Joda-Time DateTimeZone Подробную информацию вы найдете в спецификациях часовых поясов. |
| Местоположение – страна | Обязательно | Страна, в которой находится ресторан. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – город | Обязательно | Город, в котором находится ресторан. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – отображаемый адрес | Обязательно | Адрес ресторана, который будет показан пользователю. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – почтовый адрес | Необязательно | Почтовый адрес ресторана (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – штат | Необязательно | Область или регион, в котором находится ресторан (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – почтовый индекс | Необязательно | Почтовый индекс ресторана (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – район | Необязательно | Район, в котором находится ресторан (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Постеры | Необязательно | Если вы добавите несколько изображений, мы покажем только одно из них. Рекомендуемое соотношение сторон – 16:9. | Ознакомьтесь со спецификациями изображений. |
| Описание | Необязательно | Один абзац текста с описанием объекта. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста: 180 символов. |
| Список субтитров | Необязательно | До трех подзаголовков, каждый из которых состоит из одной строки текста. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста для каждой строки субтитров: не более 50 символов. |
| Размер стола | Необязательно | Количество человек в группе бронирования | Целое число больше 0 |
| DisplayTimeWindow (необязательно) – задает временной интервал, в течение которого контент будет показываться на платформе. | |||
| Временная метка начала | Необязательно |
Временная метка, после которой контент должен показываться на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
| Временная метка окончания | Необязательно |
Временная метка, после которой контент больше не показывается на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
EventReservationEntity
| Атрибут | Требования | Описание | Формат |
|---|---|---|---|
| URI действия | Обязательно |
Ссылка на контент в приложении поставщика. Примечание. Ссылки на контент можно использовать для атрибуции. Ознакомьтесь с разделом часто задаваемых вопросов |
URI |
| Название | Обязательно | Название объекта. | Строка Рекомендуемый размер текста: не более 50 символов. |
| Локализованное время начала – временная метка | Обязательно |
Временная метка в формате Unix, когда должно начаться событие. |
Joda-Time Instant |
| Локализованное время начала – часовой пояс | Обязательно |
Часовой пояс, в котором должно начаться мероприятие. |
Joda-Time DateTimeZone Подробную информацию можно найти в спецификациях часовых поясов. |
| Режим событий | Обязательно | Поле, в котором указывается, как будет проходить мероприятие: онлайн, офлайн или в смешанном формате. |
Enum: VIRTUAL, IN_PERSON, or HYBRID |
| Местоположение – страна | Условно обязательно | Страна, в которой проводится мероприятие. Примечание. Это поле обязательно для событий IN_PERSON и HYBRID. |
Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – город | Условно обязательно | Город, в котором проходит мероприятие. Примечание. Это поле обязательно для событий IN_PERSON и HYBRID. |
Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – отображаемый адрес | Условно обязательно | Адрес или название места проведения мероприятия, которое будет показываться пользователю. Примечание. Это поле обязательно для событий IN_PERSON и HYBRID. |
Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – почтовый адрес | Необязательно | Почтовый адрес (если применимо) места проведения мероприятия. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – штат | Необязательно | Штат или область (если применимо), где проводится мероприятие. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – почтовый индекс | Необязательно | Почтовый индекс места проведения мероприятия (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – район | Необязательно | Район, в котором проводится мероприятие (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Постеры | Необязательно | Если вы добавите несколько изображений, мы покажем только одно из них. Рекомендуемое соотношение сторон – 16:9. Примечание. Настоятельно рекомендуется добавить изображение. Если вы используете значок, оставьте свободное пространство размером 24 dp в верхней и нижней частях изображения. |
Ознакомьтесь со спецификациями изображений. |
| Локализованное время окончания – временная метка | Необязательно |
Временная метка эпохи, когда ожидается завершение события. |
Joda-Time Instant |
| Локализованное время окончания – часовой пояс | Необязательно |
Часовой пояс, в котором должно закончиться мероприятие. |
Joda-Time DateTimeZone Подробную информацию можно найти в спецификациях часовых поясов. |
| Поставщик услуг – название | Необязательно |
Название поставщика услуг. Примечание. Для поставщика услуг необходимо указать либо текст, либо изображение. |
Произвольный текст. Например, название организатора мероприятия или тура. |
| Поставщик услуг – изображение | Необязательно |
Логотип или изображение поставщика услуг. Примечание. Для поставщика услуг необходимо указать либо текст, либо изображение. |
Ознакомьтесь со спецификациями изображений. |
| Описание | Необязательно | Один абзац текста с описанием объекта. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста: 180 символов. |
| Список субтитров | Необязательно | До трех подзаголовков, каждый из которых состоит из одной строки текста. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста для каждой строки субтитров: не более 50 символов. |
| Значки | Необязательно |
Каждый значок может быть либо текстом (не более 15 символов), либо небольшим изображением. |
|
| Значок – текст | Необязательно | Название значка Примечание. Для значка требуется текст или изображение. |
Произвольный текст Рекомендуемый размер текста: не более 15 символов. |
| Значок – изображение | Необязательно | Маленькое изображение Специальное оформление UX, например значок поверх миниатюры изображения или видео. Примечание. Для значка требуется текст или изображение. |
Ознакомьтесь со спецификациями изображений. |
| Идентификатор резервирования | Необязательно | Идентификатор бронирования мероприятия. | Произвольный текст |
| Price - CurrentPrice | Условно обязательно |
Текущая цена билета или пропуска на мероприятие. Обязателен, если указана зачеркнутая цена. |
Произвольный текст |
| Price – StrikethroughPrice | Необязательно | Первоначальная цена билета или пропуска на мероприятие. | Произвольный текст |
| Уточнение цены | Необязательно | Уточнение цены, чтобы выделить промоакцию, событие или скидку для участников, если они доступны. | Произвольный текст Рекомендуемая длина текста – до 45 символов. Если текст слишком длинный, он может быть сокращен. |
| Оценка – максимальное значение | Необязательно | Максимальное значение оценочной шкалы. Обязательно, если указано текущее значение оценки. |
Число >= 0,0 |
| Оценка – текущее значение | Необязательно | Текущее значение оценочной шкалы. Обязательно, если указано максимальное значение оценки. |
Число >= 0,0 |
| Рейтинг – количество | Необязательно | Количество оценок события. Примечание. Заполните это поле, если хотите контролировать, как информация будет показываться пользователям. Укажите краткую строку, которая может быть показана пользователю. Например, если количество равно 1 000 000, используйте сокращение "1 млн", чтобы оно не усекалось на экранах меньшего размера. |
Строка |
| Рейтинг – количество оценок | Необязательно | Количество оценок события. Примечание. Заполните это поле, если не хотите самостоятельно настраивать логику сокращения. Если указаны оба значения, пользователям будет показываться Count. |
Долгота |
| Категории контента | Необязательно | Опишите категорию контента в объекте. | Список допустимых перечислений
Подробные инструкции вы найдете в разделе Категория контента. |
| DisplayTimeWindow (необязательно) – задает временной интервал, в течение которого контент будет показываться на платформе. | |||
| Временная метка начала | Необязательно |
Временная метка, после которой контент должен показываться на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
| Временная метка окончания | Необязательно |
Временная метка, после которой контент больше не показывается на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
LodgingReservationEntity
| Атрибут | Требования | Описание | Формат |
|---|---|---|---|
| URI действия | Обязательно |
Ссылка на контент в приложении поставщика. Примечание. Ссылки на контент можно использовать для атрибуции. Ознакомьтесь с разделом часто задаваемых вопросов |
URI |
| Название | Обязательно | Название объекта. | Произвольный текст. Например, "Ваше бронирование с 12 декабря". Рекомендуемый размер текста: не более 50 символов. |
| Локализованное время заезда – временная метка | Обязательно | Временная метка эпохи, представляющая время регистрации заезда для забронированного номера. | Joda-Time Instant |
| Локализованное время заезда – часовой пояс | Обязательно | Часовой пояс, в котором указано время заезда. |
Joda-Time DateTimeZone Подробную информацию можно найти в спецификациях часовых поясов. |
| Локализованное время выезда – временная метка | Обязательно | Временная метка, представляющая время выезда. | Joda-Time Instant |
| Локализованное время выезда – часовой пояс | Обязательно | Часовой пояс, в котором указано время выезда. |
Joda-Time DateTimeZone Подробную информацию можно найти в спецификациях часовых поясов. |
| Местоположение – страна | Обязательно | Страна, в которой находится место проживания. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – город | Обязательно | Город, в котором находится гостиница. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – отображаемый адрес | Обязательно | Адрес, который будет показан пользователю. Укажите краткий адрес, по возможности используя сокращения (например, "ул." вместо "улица"). Эта строка может быть усечена в зависимости от устройства и настроек пользователя. Укажите название города, чтобы было понятно, о каком месте идет речь. | Произвольный текст Рекомендуемый размер текста: не более 35 символов. |
| Местоположение – почтовый адрес | Необязательно | Почтовый адрес места проживания (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – штат | Необязательно | Штат или провинция, в которой находится объект размещения (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – почтовый индекс | Необязательно | Почтовый индекс места размещения (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Местоположение – район | Необязательно | Район, в котором находится гостиница (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Постеры | Необязательно |
Если вы добавите несколько изображений, мы покажем только одно из них. Рекомендуемое соотношение сторон – 16:9. Примечание. Если вы используете значок, оставьте свободное пространство размером 24 dp в верхней и нижней частях изображения. |
Ознакомьтесь со спецификациями изображений. |
| Описание | Необязательно | Один абзац текста с описанием объекта. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста: 180 символов. |
| Список субтитров | Необязательно | До трех подзаголовков, каждый из которых состоит из одной строки текста. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста для каждой строки субтитров: не более 50 символов. |
| Идентификатор резервирования | Необязательно | Идентификатор бронирования жилья. | Произвольный текст |
| Оценка – максимальное значение | Необязательно | Максимальное значение оценочной шкалы. Обязательно, если указано текущее значение оценки. |
Число >= 0,0 |
| Оценка – текущее значение | Необязательно | Текущее значение оценочной шкалы. Обязательно, если указано максимальное значение оценки. |
Число >= 0,0 |
| Рейтинг – количество | Необязательно | Количество оценок, полученных гостиницей. Примечание. Заполните это поле, если хотите контролировать, как информация будет показываться пользователям. Укажите краткую строку, которая будет показываться пользователю. Например, если количество равно 1 000 000, используйте сокращение "1 млн", чтобы оно не усекалось на экранах меньшего размера. |
Строка |
| Рейтинг – количество оценок | Необязательно | Количество оценок, полученных гостиницей. Примечание. Заполните это поле, если не хотите самостоятельно настраивать логику сокращения. Если указаны оба значения, пользователям будет показываться Count. |
Долгота |
| Price - CurrentPrice | Условно обязательно | Текущая цена проживания. Обязателен, если указана зачеркнутая цена. |
Произвольный текст |
| Price – StrikethroughPrice | Необязательно | Исходная цена проживания, которая будет зачеркнута в интерфейсе. | Произвольный текст |
| Уточнение цены | Необязательно | Уточнение цены, чтобы выделить промоакцию, событие или скидку для участников, если они доступны. | Произвольный текст Рекомендуемая длина текста – до 45 символов. Если текст слишком длинный, он может быть сокращен. |
| DisplayTimeWindow (необязательно) – задает временной интервал, в течение которого контент будет показываться на платформе. | |||
| Временная метка начала | Необязательно |
Временная метка, после которой контент должен показываться на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
| Временная метка окончания | Необязательно |
Временная метка, после которой контент больше не показывается на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
TransportationReservationEntity
| Атрибут | Требования | Описание | Формат |
|---|---|---|---|
| URI действия | Обязательно |
Ссылка на контент в приложении поставщика. Примечание. Ссылки на контент можно использовать для атрибуции. Ознакомьтесь с разделом часто задаваемых вопросов |
URI |
| Название | Обязательно | Название объекта. | Произвольный текст. Пример: "SFO to SAN". Рекомендуемый размер текста: не более 50 символов. |
| Вид транспорта | Обязательно | Тип транспорта, для которого оформлено бронирование. | Перечисление: FLIGHT, TRAIN, BUS, FERRY. |
| Локализованное время вылета – временная метка | Обязательно | Временная метка, обозначающая время отправления. | Joda-Time Instant |
| Локализованное время вылета – часовой пояс | Обязательно | Часовой пояс времени отправления. |
Joda-Time DateTimeZone Подробную информацию можно найти в спецификациях часовых поясов. |
| Локализованное время прибытия – временная метка | Обязательно | Временная метка в формате Unix, которая представляет время прибытия. | Joda-Time Instant |
| Локализованное время прибытия – часовой пояс | Обязательно | Часовой пояс времени прибытия. |
Joda-Time DateTimeZone Подробную информацию можно найти в спецификациях часовых поясов. |
| Номер транспортного средства | Обязательно | Номер рейса, автобуса, поезда, парома или круиза. | Произвольный текст |
| Локализованное время посадки – временная метка | Обязательно | Временная метка эпохи, представляющая время посадки для бронирования (если применимо). | Joda-Time Instant |
| Локализованное время посадки – часовой пояс | Обязательно | Часовой пояс времени посадки для бронирования (если применимо). |
Joda-Time DateTimeZone Подробную информацию можно найти в спецификациях часовых поясов. |
| Страна отправления | Необязательно | Страна отправления. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Место отправления – город | Необязательно | Город отправления. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Место отправления – отображаемый адрес | Необязательно | Место отправления, которое будет показано пользователю. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Место отправления – почтовый адрес | Необязательно | Почтовый адрес места отправления (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Место отправления – штат | Необязательно | Штат или провинция (если применимо) места отправления. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Почтовый индекс места отправления | Необязательно | Почтовый индекс места отправления (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Место отправления – район | Необязательно | Район (если применимо) места отправления. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Место прибытия – страна | Необязательно | Страна прибытия. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Место прибытия – город | Необязательно | Город прибытия. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Место прибытия – отображаемый адрес | Необязательно | Место прибытия, которое будет показано пользователю. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Место прибытия – почтовый адрес | Необязательно | Почтовый адрес (если применимо) места прибытия. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Место прибытия – штат | Необязательно | Штат или провинция (если применимо) места прибытия. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Место прибытия – почтовый индекс | Необязательно | Почтовый индекс (если применимо) места прибытия. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Место прибытия – микрорайон | Необязательно | Район (если применимо) места прибытия. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Поставщик услуг – название | Необязательно |
Название поставщика услуг. Примечание. Для поставщика услуг необходимо указать либо текст, либо изображение. |
Произвольный текст. Например, название авиакомпании. |
| Поставщик услуг – изображение | Необязательно |
Логотип или изображение поставщика услуг. Примечание. Для поставщика услуг необходимо указать либо текст, либо изображение. |
Ознакомьтесь со спецификациями изображений. |
| Постеры | Необязательно |
Если вы добавите несколько изображений, мы покажем только одно из них. Рекомендуемое соотношение сторон – 16:9. |
Ознакомьтесь со спецификациями изображений. |
| Описание | Необязательно | Один абзац текста с описанием объекта. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста: 180 символов. |
| Список субтитров | Необязательно | До трех подзаголовков, каждый из которых состоит из одной строки текста. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста для каждой строки субтитров: не более 50 символов. |
| Идентификатор резервирования | Необязательно | Идентификатор бронирования транспорта. | Произвольный текст |
| Price - CurrentPrice | Условно обязательно | Текущая цена бронирования. Обязателен, если указана зачеркнутая цена. |
Произвольный текст |
| Price – StrikethroughPrice | Необязательно | Исходная цена бронирования, которая будет зачеркнута в интерфейсе. | Произвольный текст |
| Уточнение цены | Необязательно | Уточнение цены, чтобы выделить промоакцию, событие или скидку для участников, если они доступны. | Произвольный текст Рекомендуемая длина текста – до 45 символов. Если текст слишком длинный, он может быть сокращен. |
| DisplayTimeWindow (необязательно) – задает временной интервал, в течение которого контент будет показываться на платформе. | |||
| Временная метка начала | Необязательно |
Временная метка, после которой контент должен показываться на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
| Временная метка окончания | Необязательно |
Временная метка, после которой контент больше не показывается на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
VehicleRentalReservationEntity
| Атрибут | Требования | Описание | Формат |
|---|---|---|---|
| URI действия | Обязательно |
Ссылка на контент в приложении поставщика. Примечание. Ссылки на контент можно использовать для атрибуции. Ознакомьтесь с разделом часто задаваемых вопросов |
URI |
| Название | Обязательно | Название объекта. | Произвольный текст. Пример: "Avis Union Square SF". Рекомендуемый размер текста: не более 50 символов. |
| Локализованное время получения – временная метка | Обязательно | Временная метка в формате Unix, обозначающая время получения заказа. | Joda-Time Instant |
| Локализованное время получения – часовой пояс | Обязательно | Часовой пояс времени получения автомобиля. |
Joda-Time DateTimeZone Подробную информацию можно найти в спецификациях часовых поясов. |
| Локализованное время возврата – временная метка | Необязательно | Временная метка в формате Epoch, представляющая время выезда. | Joda-Time Instant |
| Локализованное время возврата – часовой пояс | Необязательно | Часовой пояс времени выезда. |
Joda-Time DateTimeZone Подробную информацию можно найти в спецификациях часовых поясов. |
| Pickup Address - Country | Необязательно | Страна, в которой находится пункт самовывоза. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Адрес места получения – город | Необязательно | Город, в котором находится место посадки. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Адрес самовывоза – отображаемый адрес | Необязательно | Место самовывоза, которое будет показываться пользователю. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Адрес места получения – почтовый адрес | Необязательно | Почтовый адрес места посадки (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Адрес самовывоза – штат | Необязательно | Штат или провинция (если применимо), где находится пункт самовывоза. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Адрес самовывоза – почтовый индекс | Необязательно | Почтовый индекс места самовывоза (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Адрес места посадки – район | Необязательно | Район (если применимо) места посадки. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Адрес для возвратов – страна | Необязательно | Страна, в которой находится пункт возврата. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Адрес для возвратов – город | Необязательно | Город, в котором находится пункт возврата. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Адрес для возвратов – отображаемый адрес | Необязательно | Адрес возврата, который будет показываться пользователю. | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Адрес для возвратов – почтовый адрес | Необязательно | Почтовый адрес пункта возврата (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Адрес для возвратов – штат | Необязательно | Область или регион, где находится пункт возврата (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Адрес для возвратов – почтовый индекс | Необязательно | Почтовый индекс пункта возврата (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Адрес для возвратов – район | Необязательно | Район, в котором находится пункт возврата (если применимо). | Произвольный текст Рекомендуемый размер текста: не более 20 символов. |
| Поставщик услуг – название | Необязательно |
Название поставщика услуг. Примечание. Для поставщика услуг необходимо указать либо текст, либо изображение. |
Произвольный текст. Пример: "Прокат автомобилей Avis". |
| Поставщик услуг – изображение | Необязательно |
Логотип или изображение поставщика услуг. Примечание. Для поставщика услуг необходимо указать либо текст, либо изображение. |
Ознакомьтесь со спецификациями изображений. |
| Постеры | Необязательно |
Если вы добавите несколько изображений, мы покажем только одно из них. Рекомендуемое соотношение сторон – 16:9. |
Ознакомьтесь со спецификациями изображений. |
| Описание | Необязательно | Один абзац текста с описанием объекта. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста: 180 символов. |
| Список субтитров | Необязательно | До трех подзаголовков, каждый из которых состоит из одной строки текста. Примечание. Пользователю будет показано либо описание, либо список подзаголовков, но не оба элемента. |
Произвольный текст Рекомендуемый размер текста для каждой строки субтитров: не более 50 символов. |
| Идентификатор подтверждения | Необязательно | Идентификатор подтверждения бронирования автомобиля. | Произвольный текст |
| Price - CurrentPrice | Условно обязательно | Текущая цена бронирования. Обязателен, если указана зачеркнутая цена. |
Произвольный текст |
| Price – StrikethroughPrice | Необязательно | Исходная цена бронирования, которая будет зачеркнута в интерфейсе. | Произвольный текст |
| Уточнение цены | Необязательно | Уточнение цены, чтобы выделить промоакцию, событие или скидку для участников, если они доступны. | Произвольный текст Рекомендуемая длина текста – до 45 символов. Если текст слишком длинный, он может быть сокращен. |
| DisplayTimeWindow (необязательно) – задает временной интервал, в течение которого контент будет показываться на платформе. | |||
| Временная метка начала | Необязательно |
Временная метка, после которой контент должен показываться на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
| Временная метка окончания | Необязательно |
Временная метка, после которой контент больше не показывается на платформе. Если правило не настроено, контент может показываться на платформе. |
Временная метка в миллисекундах с начала отсчета |
Требования к картинкам
Требования к объектам изображений приведены в таблице ниже.
| Соотношение сторон | Минимальный размер (пиксели) | Рекомендуемый размер (пиксели) |
|---|---|---|
Квадрат (1:1). Предпочтительный |
300x300 | 1200x1200 |
| Горизонтальное (1,91:1) | 600x314 | 1200x628 |
| Вертикальное (4:5) | 480x600 | 960x1200 |
Изображения должны размещаться в общедоступных сетях доставки контента, чтобы у Google был к ним доступ.
Форматы файлов
PNG, JPG, статический GIF, WebP
Максимальный размер файла
5120 КБ
Дополнительные рекомендации
- Рекомендуемые пределы допустимой области изображения: важный контент должен занимать центральные 80% изображения.
- Используйте прозрачный фон, чтобы изображение правильно отображалось в светлой и темной темах.
Спецификации часовых поясов
Рекомендуем использовать идентификатор (например, "America/Los_Angeles"), а не смещение (например, "-07:00").
Пример использования: DateTimeZone.forID("America/Los_Angeles")
Категория контента
Категория контента позволяет приложениям публиковать контент, относящийся к нескольким категориям. Это позволяет сопоставить контент с некоторыми стандартными категориями, а именно:
TYPE_EDUCATIONTYPE_SPORTSTYPE_MOVIES_AND_TV_SHOWSTYPE_BOOKSTYPE_AUDIOBOOKSTYPE_MUSICTYPE_DIGITAL_GAMESTYPE_TRAVEL_AND_LOCALTYPE_HOME_AND_AUTOTYPE_BUSINESSTYPE_NEWSTYPE_FOOD_AND_DRINKTYPE_SHOPPINGTYPE_HEALTH_AND_FITENESSTYPE_MEDICALTYPE_PARENTINGTYPE_DATING
Изображения должны размещаться в общедоступных сетях доставки контента, чтобы у Google был к ним доступ.
Рекомендации по использованию категорий контента
- Некоторые объекты, например ArticleEntity и GenericFeaturedEntity, могут использовать любые категории контента. Для других объектов, таких как EventEntity, EventReservationEntity и PointOfInterestEntity, доступно только подмножество этих категорий. Прежде чем заполнять список, проверьте, какие категории подходят для того или иного типа объекта.
Для некоторых категорий контента используйте определенный тип объекта, а не сочетание общих объектов и ContentCategory:
- TYPE_MOVIES_AND_TV_SHOWS – прежде чем использовать общие объекты, ознакомьтесь с объектами из руководства по интеграции с Google TV.
- TYPE_BOOKS – прежде чем использовать общие объекты, ознакомьтесь с информацией об объекте EbookEntity.
- TYPE_AUDIOBOOKS – прежде чем использовать общие объекты, ознакомьтесь с AudiobookEntity.
- TYPE_SHOPPING – прежде чем использовать общие объекты, ознакомьтесь с информацией об объекте ShoppingEntity.
- TYPE_FOOD_AND_DRINK – прежде чем использовать общие объекты, ознакомьтесь с объектами из руководства по интеграции с сервисами заказа еды.
Поле ContentCategory необязательно. Если контент не относится ни к одной из перечисленных выше категорий, оставьте его пустым.
Если вы указываете несколько категорий контента, расположите их в порядке релевантности, начиная с самой подходящей.
Шаг 2. Предоставьте данные о кластере
Рекомендуется выполнять публикацию контента в фоновом режиме (например, с помощью WorkManager) и запланировать ее на регулярной основе или на основе событий (например, каждый раз, когда пользователь открывает приложение или когда пользователь только что добавил что-то в свою корзину).
AppEngageTravelClient отвечает за публикацию кластеров.
Для публикации кластеров в клиенте используются следующие API:
isServiceAvailablepublishRecommendationClusterspublishFeaturedClusterpublishReservationClusterpublishContinueSearchClusterpublishUserAccountManagementRequestupdatePublishStatusdeleteRecommendationsClustersdeleteFeaturedClusterdeleteReservationClusterdeleteContinueSearchClusterdeleteUserManagementClusterdeleteClusters
isServiceAvailable
Этот API используется, чтобы проверить, доступен ли сервис для интеграции и можно ли показывать контент на устройстве.
Для Engage SDK версии 1.6.0 и выше (рекомендуется)
Навыки работы с Android
Посмотреть на GitHubИнтеграция Engage SDK
android skills add engage-sdk-integrationUse the engage-sdk-integration skill to use Engage SDK 1.6.0 and refactor isServiceAvailable to pass ServiceAvailabilityRequest for publishing all cluster types.Вы можете проверить доступность сервиса для каждого типа кластера, который вы собираетесь опубликовать. API isServiceAvailable принимает объект запроса ServiceAvailabilityRequest, который содержит типы кластеров, для которых необходимо проверить доступность сервиса. В таблице ниже приведены значения перечисления ClusterType, необходимые для ServiceAvailabilityRequest.
| Тип кластера | Константа типа кластера | Целочисленное значение |
|---|---|---|
| Неизвестно | TYPE_UNKNOWN |
0 |
| Кластер рекомендаций | TYPE_RECOMMENDATION |
1 |
| Рекомендуемый кластер | TYPE_FEATURED |
2 |
| Кластер продолжения | TYPE_CONTINUATION |
3 |
| Кластер управления пользователями | TYPE_ENGAGEMENT |
8 |
| Кластер подписок | TYPE_SUBSCRIPTION |
12 |
| Продолжить поиск кластера | TYPE_CONTINUE_SEARCH |
13 |
| Кластер резервирования | TYPE_RESERVATION |
14 |
Kotlin
val request = ServiceAvailabilityRequest.Builder()
.addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
.addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
.build()
client.isServiceAvailable(request).addOnCompleteListener { task ->
if (task.isSuccessful) {
val availabilityMap = task.result
if (availabilityMap[ClusterType.TYPE_CONTINUATION] == true) {
// Proceed with publishing continuation content
}
if (availabilityMap[ClusterType.TYPE_RECOMMENDATION] == true) {
// Proceed with publishing recommendation content
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
}
Java
ServiceAvailabilityRequest request =
new ServiceAvailabilityRequest.Builder()
.addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
.addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
.build();
client.isServiceAvailable(request).addOnCompleteListener(task -> {
if (task.isSuccessful()) {
Map<Integer, Boolean> availabilityMap = task.getResult();
if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_CONTINUATION))) {
// Proceed with publishing continuation content
}
if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_RECOMMENDATION))) {
// Proceed with publishing recommendation content
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
});
Функция условной доступности сервиса
В некоторых интегрированных приложениях запрашивается специальная конфигурация, которая периодически включает и отключает сервис Engage, чтобы снизить общую стоимость. Однако такая стратегия периодического приема контента негативно влияет на удобство использования: устаревший контент не будет показываться, а некоторые платформы не будут обслуживаться.
Начиная с версии 1.6.0 Engage SDK позволяет проверять доступность определенных типов кластеров. Если ваше приложение использует прерывистую передачу данных:
- Кластеры продолжения (например, "Бронирование" и "Продолжить поиск") по умолчанию включены на всех поддерживаемых устройствах.
- Другие типы кластеров (например, рекомендации) включаются и отключаются периодически.
Если эта конфигурация по умолчанию вам не подходит, напишите на адрес engage-developers@google.com.
Для версий SDK до 1.6.0 (поддержка прекращена)
Kotlin
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.
Kotlin
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.
Kotlin
client.publishFeaturedCluster(
PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
FeaturedCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.build())
.build())
Java
client.publishFeaturedCluster(
new PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
new FeaturedCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.build())
.build());
Когда сервис получает запрос, в рамках одной транзакции выполняются следующие действия:
- Существующие данные
FeaturedClusterот партнера-разработчика удаляются. - Данные из запроса анализируются и сохраняются в обновленной группе.
В случае ошибки весь запрос отклоняется и сохраняется существующее состояние.
publishReservationCluster
Этот API используется для публикации объекта ReservationCluster.
Kotlin
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());
Когда сервис получает запрос, в рамках одной транзакции выполняются следующие действия:
- Существующие данные
ReservationClusterот партнера-разработчика удаляются. - Данные из запроса анализируются и сохраняются в обновленном кластере резервирования.
В случае ошибки весь запрос отклоняется и сохраняется существующее состояние.
publishContinueSearchCluster
Этот API используется для публикации списка объектов ContinueSearchCluster.
Kotlin
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());
Когда сервис получает запрос, в рамках одной транзакции выполняются следующие действия:
- Существующие данные
ContinueSearchClusterот партнера-разработчика удаляются. - Данные из запроса анализируются и сохраняются в обновленном кластере продолжения поиска.
В случае ошибки весь запрос отклоняется и сохраняется существующее состояние.
publishUserAccountManagementRequest
Этот API используется для публикации карточки входа . Действие "Войти" направляет пользователей на страницу входа в приложение, чтобы оно могло публиковать контент (или предоставлять более персонализированный контент).
В карточке входа содержатся следующие метаданные:
| Атрибут | Требования | Описание |
|---|---|---|
| URI действия | Обязательно | Ссылка на контент для действия (например, переход на страницу входа в приложение) |
| Изображение | Необязательно. Если не указано, необходимо указать название. |
Изображение на карточке Изображения с соотношением сторон 16:9 и разрешением 1264 x 712. |
| Название | Необязательно. Если не указано, необходимо добавить изображение. | Название на карточке |
| Текст действия | Необязательно | Текст, который будет показываться в призыве к действию (например, "Войти") |
| Подзаголовок | Необязательно | Необязательный подзаголовок на карточке |
Kotlin
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.
Kotlin
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());
deleteRecommendationsClusters
Этот API используется для удаления контента из кластеров рекомендаций.
Kotlin
client.deleteRecommendationsClusters()
Java
client.deleteRecommendationsClusters();
Когда сервис получает запрос, он удаляет существующие данные из кластеров рекомендаций. В случае ошибки весь запрос отклоняется и сохраняется существующее состояние.
deleteFeaturedCluster
Этот API используется для удаления контента из рекомендуемой группы.
Kotlin
client.deleteFeaturedCluster()
Java
client.deleteFeaturedCluster();
Когда сервис получает запрос, он удаляет существующие данные из рекомендуемого кластера. В случае ошибки весь запрос отклоняется, а существующее состояние сохраняется.
deleteReservationCluster
Этот API используется для удаления контента кластера резервирования.
Kotlin
client.deleteReservationCluster()
Java
client.deleteReservationCluster();
Когда сервис получает запрос, он удаляет существующие данные из кластера резервирования. В случае ошибки весь запрос отклоняется и сохраняется существующее состояние.
deleteUserManagementCluster
Этот API используется для удаления контента кластера UserAccountManagement.
Kotlin
client.deleteUserManagementCluster()
Java
client.deleteUserManagementCluster();
Когда сервис получает запрос, он удаляет существующие данные из кластера UserAccountManagement. В случае ошибки весь запрос отклоняется и сохраняется существующее состояние.
deleteContinueSearchCluster
Этот API используется для удаления контента из кластера "Продолжить поиск".
Kotlin
client.deleteContinueSearchCluster()
Java
client.deleteContinueSearchCluster();
Когда сервис получает запрос, он удаляет существующие данные из кластера продолжения поиска. В случае ошибки весь запрос отклоняется, а существующее состояние сохраняется.
deleteClusters
Этот API используется для удаления контента кластера определенного типа.
Kotlin
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 публикации, чтобы можно было предпринять последующие действия по восстановлению и повторной отправке успешной задачи.
Kotlin
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 для получения запроса на публикацию контента.
Цель широковещательных намерений – повторная активация приложения и принудительная синхронизация данных. Широковещательные намерения не предназначены для частой отправки. Он запускается, только когда сервис Google Play Объекты определяет, что контент может быть устаревшим (например, ему неделя). Это позволяет пользователю видеть актуальный контент, даже если приложение не запускалось в течение длительного периода времени.
BroadcastReceiver необходимо настроить двумя способами:
Динамически зарегистрируйте экземпляр класса
BroadcastReceiverс помощьюContext.registerReceiver(). Это позволяет приложениям, которые все ещё находятся в памяти, обмениваться данными.
Kotlin
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);
}
Статически объявите реализацию с помощью тега
<receiver>в файлеAndroidManifest.xml. Это позволяет приложению получать намерения широковещательной рассылки, когда оно не запущено, а также публиковать контент.
<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_SEARCHПри получении этого намерения рекомендуется начать вызовpublishContinueSearchCluster.com.google.android.engage.action.travel.PUBLISH_RESERVATIONПри получении этого намерения рекомендуется начать вызовpublishReservationCluster.
Процесс интеграции
Пошаговые инструкции по проверке интеграции после ее завершения можно найти в руководстве по интеграции для разработчиков.
Часто задаваемые вопросы
Часто задаваемые вопросы об Engage SDK
Контакт
Если у вас возникнут вопросы в процессе интеграции, обратитесь в engage-developers@google.com.
Дальнейшие действия
После завершения интеграции выполните следующие действия:
- Отправьте электронное письмо на адрес
engage-developers@google.comи прикрепите к нему интегрированный APK-файл, готовый к тестированию специалистами Google. - Google выполняет проверку, чтобы убедиться, что интеграция работает правильно. Если потребуются изменения, Google свяжется с вами и сообщит необходимые сведения.
- Если тестирование прошло успешно и изменения не требуются, Google сообщит вам, что вы можете опубликовать обновленный и интегрированный APK-файл в Google Play.
- После того как Google подтвердит, что обновленный APK-файл опубликован в Google Play, ваши кластеры Рекомендации, Избранное, Бронирование и Продолжить поиск могут быть опубликованы и стать видны пользователям.