Engage SDK Travel: сторонние инструкции по технической интеграции, Engage SDK Travel: сторонние инструкции по технической интеграции

Google создает поверхность на устройстве, которая организует приложения пользователей по вертикалям и обеспечивает новый захватывающий опыт для персонализированного потребления и обнаружения контента приложений. Этот полноэкранный режим дает партнерам-разработчикам возможность продемонстрировать свой лучший насыщенный контент на специальном канале за пределами своего приложения. В этом руководстве содержатся инструкции для партнеров-разработчиков по интеграции контента о путешествиях и мероприятиях с помощью Engage SDK для заполнения этой новой области поверхности.

Детали интеграции

Терминология

Эта интеграция включает следующие три типа кластеров: Рекомендация , Рекомендуемые и Продолжение .

  • В кластерах рекомендаций отображаются персонализированные предложения о поездках и мероприятиях от отдельного партнера-разработчика. Эти рекомендации могут быть персонализированы для пользователя или обобщены (например, трендовые элементы). Используйте их для поиска статей, мероприятий, жилья или рекомендаций по достопримечательностям.

    • Кластер рекомендаций может состоять из списков ArticleEntity , EventEntity , LodgingEntity , PointOfInterestEntity или StoreEntity , но не из смеси различных типов сущностей.

    Ваши рекомендации имеют следующую структуру:

    • Кластер рекомендаций: представление пользовательского интерфейса, содержащее группу рекомендаций от одного и того же партнера-разработчика.

    • Сущность: объект, представляющий один элемент в кластере. Эта интеграция предлагает некоторые сущности, которые будут отображаться с использованием кластера рекомендаций:

      • ArticleEntity : ArticleEntity представляет собой рекомендацию по текстовому контенту, связанному с путешествиями и событиями. Его можно использовать для статей, постов в блогах, маркетингового контента, фрагментов новостей и т. д.

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

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

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

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

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

    Ваш контент-продолжение может иметь следующую структуру:

    • ArticleEntity : ArticleEntity представляет собой рекомендацию по контенту, связанному с путешествиями и событиями. Этот объект можно использовать для представления незаконченных новостных статей или другого контента, который пользователь хотел бы продолжать использовать с того места, где он его оставил. Пример: фрагмент новостей, фрагмент сообщения в блоге о пункте назначения или событии.

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

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

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

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

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

      Рис. 11. Пользовательский интерфейс, показывающий один VehicleRentalReservationEntity в кластере продолжения.
  • Кластер Featured — это представление пользовательского интерфейса, которое демонстрирует выбранного героя GenericFeaturedEntity от многих партнеров-разработчиков в одной группе пользовательского интерфейса. Существует один кластер «Рекомендуемые», который отображается в верхней части пользовательского интерфейса и имеет приоритетное размещение над всеми кластерами «Рекомендации». Каждому партнеру-разработчику разрешено транслировать одну сущность поддерживаемого типа в избранном, а множество сущностей (возможно, разных типов) от нескольких разработчиков приложений в избранном кластере.

    • GenericFeaturedEntity : GenericFeaturedEntity отличается от элемента «Рекомендация» тем, что избранный элемент должен использоваться для одного основного контента от разработчиков и должен представлять единственный наиболее важный контент, который будет интересен и актуален для пользователей.

      Рис. 12. Пользовательский интерфейс, показывающий FeaturedCluster со списком GenericFeaturedEntity.

Предварительная работа

Минимальный уровень API: 19

Добавьте библиотеку com.google.android.engage:engage-core в свое приложение:

dependencies {
    // Make sure you also include that repository in your project's build.gradle file.
    implementation 'com.google.android.engage:engage-core:1.5.2'
}

Краткое содержание

Проект основан на реализации привязанного сервиса .

На данные, которые клиент может публиковать, распространяются следующие ограничения для разных типов кластеров:

Тип кластера Ограничения кластера Минимальные ограничения на сущности в кластере Максимальные ограничения объектов в кластере
Кластер(ы) рекомендаций Максимум 5 минимум 5 Не более 25 ( ArticleEntity , EventEntity , LodgingEntity , StoreEntity или PointOfInterestEntity )
Продолжение кластера Максимум 1 минимум 1 Не более 10 ( ArticleEntity , RestaurantReservationEntity EventReservationEntity , LodgingReservationEntity , TransportationReservationEntity или VehicleRentalReservationEntity )
Рекомендуемый кластер Максимум 1 минимум 1 Не более 10 ( GenericFeaturedEntity ).

Шаг 1. Предоставьте данные об объекте

В SDK определены разные объекты для представления каждого типа элементов. Мы поддерживаем следующие организации в категории «Путешествия и мероприятия»:

  1. GenericFeaturedEntity
  2. ArticleEntity
  3. EventEntity
  4. LodgingEntity
  5. StoreEntity
  6. PointOfInterestEntity
  7. RestaurantReservationEntity
  8. EventReservationEntity
  9. LodgingReservationEntity
  10. TransportationReservationEntity
  11. VehicleRentalReservationEntity

В таблицах ниже показаны доступные атрибуты и требования для каждого типа.

GenericFeaturedEntity

Атрибут Требование Описание Формат
Действие Ури Необходимый

Глубокая ссылка на объект в приложении поставщика.

Примечание. Для атрибуции можно использовать глубокие ссылки. Обратитесь к этому FAQ

Ури
Изображения для плакатов Необходимый

Если предоставлено несколько изображений, мы покажем только одно изображение. Рекомендуемое соотношение сторон — 16:9.

Примечание. Если значок предоставляется, обеспечьте безопасное пространство в 24 dps как вверху, так и внизу изображения.

Дополнительные сведения см. в разделе «Спецификации изображения» .
Заголовок Необязательный Название сущности.

Открытый текст

Рекомендуемый размер текста: 50 символов.

Описание Необязательный

Один абзац текста для описания объекта.

Примечание. Пользователю будет отображаться либо описание, либо список субтитров, но не оба одновременно.

Открытый текст

Рекомендуемый размер текста: 180 символов.

Список субтитров Необязательный

До трех субтитров, каждый из которых представляет собой одну строку текста.

Примечание. Пользователю будет отображаться либо описание, либо список субтитров, но не оба одновременно.

Открытый текст

Рекомендуемый размер текста для каждого субтитра: максимум 50 символов.

Значки Необязательный

Каждый значок представляет собой либо произвольный текст (максимум 15 символов), либо небольшое изображение.

Специальная UX-обработка поверх изображения/видео, например, в виде наложения значка на изображение.

  • "В прямом эфире обновление"
  • Продолжительность чтения статьи
Значок – текст Необязательный

Название для значка

Примечание. Для значка требуется текст или изображение.

Открытый текст

Рекомендуемый размер текста: максимум 15 символов.

Значок – изображение Необязательный

Маленькое изображение

Специальная UX-обработка, например наложение значка на миниатюру изображения или видео.

Примечание. Для значка требуется текст или изображение.

Дополнительные сведения см. в разделе «Спецификации изображения» .
Категории контента Необязательный Опишите категорию контента в сущности.

Список перечислений

Дополнительные сведения см. в разделе «Категория контента» .

ArticleEntity

Атрибут Требование Описание Формат
Действие Ури Необходимый

Глубокая ссылка на объект в приложении поставщика.

Примечание. Для атрибуции можно использовать глубокие ссылки. Обратитесь к этому FAQ

Ури
Заголовок Необходимый Название сущности.

Открытый текст

Рекомендуемый размер текста: максимум 50 символов.

Изображения для плакатов Необязательный

Если предоставлено несколько изображений, мы покажем только одно изображение. Рекомендуемое соотношение сторон — 16:9.

Примечание. Изображение настоятельно рекомендуется. Если имеется значок, обеспечьте безопасное пространство в 24 dps вверху и внизу изображения.

Дополнительные сведения см. в разделе «Спецификации изображения» .
Источник - Название Необязательный Имя автора, организации или репортера

Открытый текст

Рекомендуемый размер текста: до 25 символов.

Источник – изображение Необязательный Изображение источника, например автора, организации, репортера. Дополнительные сведения см. в разделе «Спецификации изображения» .
Описание Необязательный

Один абзац текста для описания объекта.

Примечание. Пользователю будет отображаться либо описание, либо список субтитров, но не оба одновременно.

Открытый текст

Рекомендуемый размер текста: 180 символов.

Список субтитров Необязательный

До трех субтитров, каждый из которых представляет собой одну строку текста.

Примечание. Пользователю будет отображаться либо описание, либо список субтитров, но не оба одновременно.

Открытый текст

Рекомендуемый размер текста для каждого субтитра: максимум 50 символов.

Значки Необязательный

Каждый значок представляет собой либо произвольный текст (максимум 15 символов), либо небольшое изображение.

Специальная UX-обработка поверх изображения/видео, например, в виде значка на изображении.

  • "В прямом эфире обновление"
  • Продолжительность чтения статьи
Значок – текст Необязательный

Название для значка

Примечание. Для значка требуется текст или изображение.

Открытый текст

Рекомендуемый размер текста: максимум 15 символов.

Значок – изображение Необязательный

Маленькое изображение

Специальная UX-обработка, например наложение значка на миниатюру изображения или видео.

Примечание. Для значка требуется текст или изображение.

Дополнительные сведения см. в разделе «Спецификации изображения» .
Время публикации контента Необязательный Это временная метка эпохи в миллисекундах, когда контент был опубликован/обновлен в приложении. Временная метка эпохи в миллисекундах
Время последнего взаимодействия Условно требуется

Временная метка эпохи в миллисекундах, когда пользователь последний раз взаимодействовал с этим объектом.

Примечание. Это поле является обязательным, если данный объект является частью кластера продолжения.

Временная метка эпохи в миллисекундах
Процент прогресса Условно требуется

Процент всего контента, использованного пользователем на сегодняшний день.

Примечание. Это поле является обязательным, если данный объект является частью кластера продолжения.

Целое значение от 0 до 100 включительно.
Категории контента Необязательный Опишите категорию контента в сущности.

Список перечислений

Дополнительные сведения см. в разделе «Категория контента» .

EventEntity

Атрибут Требование Описание Формат
Действие Ури Необходимый

Глубокая ссылка на объект в приложении поставщика.

Примечание. Для атрибуции можно использовать глубокие ссылки. Обратитесь к этому FAQ

Ури
Заголовок Необходимый Название сущности.

Нить

Рекомендуемый размер текста: максимум 50 символов.

Время начала Необходимый

Временная метка эпохи, когда ожидается начало события.

Примечание. Это будет указано в миллисекундах.

Временная метка эпохи в миллисекундах
Режим событий Необходимый

Поле, указывающее, будет ли мероприятие виртуальным, очным или и тем, и другим.

Перечисление: VIRTUAL, IN_PERSON или HYBRID.
Изображения для плакатов Необходимый

Если предоставлено несколько изображений, мы покажем только одно изображение. Рекомендуемое соотношение сторон — 16:9.

Примечание. Изображение настоятельно рекомендуется. Если имеется значок, обеспечьте безопасное пространство в 24 dps вверху и внизу изображения.

Дополнительные сведения см. в разделе «Спецификации изображения» .
Местоположение - Страна Условно требуется

Страна, в которой происходит событие.

Примечание. Это необходимо для событий IN_PERSON или HYBRID.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение - Город Условно требуется

Город, в котором происходит событие.

Примечание. Это необходимо для событий IN_PERSON или HYBRID.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение – отображение адреса Условно требуется

Адрес или название места проведения мероприятия, которое должно отображаться пользователю.

Примечание. Это необходимо для событий IN_PERSON или HYBRID.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение – адрес Необязательный Адрес (если применимо) места проведения мероприятия.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение — штат Необязательный Штат или провинция (если применимо), в которой проводится мероприятие.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение — почтовый индекс Необязательный Почтовый индекс (если применимо) места, в котором проводится мероприятие.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение – район Необязательный Район (если применимо), в котором проводится мероприятие.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Время окончания Необязательный

Временная метка эпохи, когда ожидается завершение события.

Примечание. Это будет указано в миллисекундах.

Временная метка эпохи в миллисекундах
Описание Необязательный

Один абзац текста для описания объекта.

Примечание. Пользователю будет отображаться либо описание, либо список субтитров, но не оба одновременно.

Открытый текст

Рекомендуемый размер текста: 180 символов.

Список субтитров Необязательный

До трех субтитров, каждый из которых представляет собой одну строку текста.

Примечание. Пользователю будет отображаться либо описание, либо список субтитров, но не оба одновременно.

Открытый текст

Рекомендуемый размер текста для каждого субтитра: максимум 50 символов.

Значки Необязательный

Каждый значок представляет собой либо произвольный текст (максимум 15 символов), либо небольшое изображение.

Значок – текст Необязательный

Название для значка

Примечание. Для значка требуется текст или изображение.

Открытый текст

Рекомендуемый размер текста: максимум 15 символов.

Значок – изображение Необязательный

Маленькое изображение

Специальная UX-обработка, например наложение значка на миниатюру изображения или видео.

Примечание. Для значка требуется текст или изображение.

Дополнительные сведения см. в разделе «Спецификации изображения» .
Цена - Текущая цена Условно требуется

Текущая цена билета/пропуска на мероприятие.

Должно быть указано, если указана зачеркнутая цена.

Открытый текст
Цена - Зачеркнутая цена Необязательный Первоначальная цена билета/пропуска на мероприятие. Открытый текст
Выноска цен Необязательный Выноска цены, чтобы указать промо-акцию, мероприятие, скидку для участников, если таковая имеется.

Открытый текст

Рекомендуемый размер текста: до 45 символов (слишком длинный текст может содержать многоточие).

Категории контента Необязательный Опишите категорию контента в сущности.

Список подходящих перечислений

  • TYPE_MOVIES_AND_TV_SHOWS (пример – кино)
  • TYPE_DIGITAL_GAMES (пример — киберспорт)
  • TYPE_MUSIC (пример — концерт)
  • TYPE_TRAVEL_AND_LOCAL (Пример — тур, фестиваль)
  • TYPE_HEALTH_AND_FITENESS (Пример — занятия йогой)
  • TYPE_EDUCATION (пример – класс)
  • TYPE_SPORTS (Пример – футбольный матч)
  • TYPE_DATING (Пример – встреча)

Дополнительные сведения см. в разделе «Категория контента» .

LodgingEntity

Атрибут Требование Описание Формат
Действие Ури Необходимый

Глубокая ссылка на объект в приложении поставщика.

Примечание. Для атрибуции можно использовать глубокие ссылки. Обратитесь к этому FAQ

Ури
Заголовок Необходимый Название сущности.

Нить

Рекомендуемый размер текста: максимум 50 символов.

Изображения для плакатов Необходимый

Если предоставлено несколько изображений, мы покажем только одно изображение. Рекомендуемое соотношение сторон — 16:9.

Примечание. Если значок предоставляется, обеспечьте безопасное пространство в 24 dps как вверху, так и внизу изображения.

Дополнительные сведения см. в разделе «Спецификации изображения» .
Местоположение - Страна Необходимый Страна, в которой происходит проживание.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение - Город Необходимый Город, в котором происходит проживание.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение – отображение адреса Необходимый Адрес проживания, который будет отображаться пользователю.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение – адрес Необязательный Адрес (если применимо) места проживания.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение — штат Необязательный Штат или провинция (если применимо), в которой находится жилье.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение — почтовый индекс Необязательный Почтовый индекс (если применимо) места проживания.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение – район Необязательный Район (если применимо) места проживания.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Значки Необязательный

Каждый значок представляет собой либо произвольный текст (максимум 15 символов), либо небольшое изображение.

Значок – текст Необязательный

Название для значка

Примечание. Для значка требуется текст или изображение.

Открытый текст

Рекомендуемый размер текста: максимум 15 символов.

Значок – изображение Необязательный

Маленькое изображение

Специальная UX-обработка, например наложение значка на миниатюру изображения или видео.

Примечание. Для значка требуется текст или изображение.

Дополнительные сведения см. в разделе «Спецификации изображения» .
Описание Необязательный

Один абзац текста для описания объекта.

Примечание. Пользователю будет отображаться либо описание, либо список субтитров, но не оба одновременно.

Открытый текст

Рекомендуемый размер текста: 180 символов.

Список субтитров Необязательный

До трех субтитров, каждый из которых представляет собой одну строку текста.

Примечание. Пользователю будет отображаться либо описание, либо список субтитров, но не оба одновременно.

Открытый текст

Рекомендуемый размер текста для каждого субтитра: максимум 50 символов.

AvailabilityTimeWindow — время начала Необязательный Временная метка эпохи в миллисекундах, когда ожидается, что жилье будет открыто/доступно. Временная метка эпохи в миллисекундах
AvailabilityTimeWindow — время окончания Необязательный Временная метка эпохи в миллисекундах, до которой жилье будет открыто/доступно. Временная метка эпохи в миллисекундах
Рейтинг – максимальное значение Необязательный

Максимальное значение рейтинговой шкалы.

Должно быть указано, если также указано текущее значение рейтинга.

Число >= 0,0
Рейтинг - Текущее значение Необязательный

Текущее значение оценочной шкалы.

Должно быть указано, если также указано максимальное значение рейтинга.

Число >= 0,0
Рейтинг – подсчет Необязательный

Подсчет оценок за жилье.

Примечание. Укажите это поле, если ваше приложение хочет контролировать, как оно отображается пользователям. Укажите краткую строку, которая может быть отображена пользователю. Например, если количество составляет 1 000 000, рассмотрите возможность использования сокращений, таких как 1M, чтобы оно не обрезалось на дисплеях меньшего размера.

Нить
Рейтинг – значение подсчета Необязательный

Подсчет оценок за жилье.

Примечание. Укажите это поле, если вы не хотите самостоятельно обрабатывать логику отображаемых сокращений. Если присутствуют и счетчик, и значение счетчика, мы будем использовать счетчик для отображения пользователям.

Длинный
Цена - Текущая цена Условно требуется

Текущая стоимость проживания.

Должно быть указано, если указана зачеркнутая цена.

Открытый текст
Цена - Зачеркнутая цена Необязательный Исходная цена проживания, которая будет зачеркнута в пользовательском интерфейсе. Открытый текст
Выноска цен Необязательный Выноска цены, чтобы указать промо-акцию, мероприятие, скидку для участников, если таковая имеется.

Открытый текст

Рекомендуемый размер текста: до 45 символов (слишком длинный текст может содержать многоточие).

StoreEntity

Объект StoreEntity представляет отдельный магазин, который партнеры-разработчики хотят опубликовать, например ресторан или продуктовый магазин.

Атрибут Требование Описание Формат
Изображения для плакатов Необходимый Необходимо предоставить хотя бы одно изображение. Дополнительные сведения см. в разделе «Спецификации изображения» .
Действие Ури Необходимый

Глубокая ссылка на объект в приложении поставщика.

Примечание. Для атрибуции можно использовать глубокие ссылки. Обратитесь к этому FAQ

Ури
Заголовок Необязательный Название магазина.

Открытый текст

Рекомендуемый размер текста: до 45 символов (слишком длинный текст может содержать многоточие).

Расположение Необязательный Расположение магазина.

Открытый текст

Рекомендуемый размер текста: до 45 символов (слишком длинный текст может содержать многоточие).

Вызывать Необязательный Выноска, чтобы рассказать об акции, событии или обновлении магазина, если таковое имеется.

Открытый текст

Рекомендуемый размер текста: до 45 символов (слишком длинный текст может содержать многоточие).

Выноска мелким шрифтом Необязательный Текст выноски мелким шрифтом.

Открытый текст

Рекомендуемый размер текста: до 45 символов (слишком длинный текст может содержать многоточие).

Описание Необязательный Описание магазина.

Открытый текст

Рекомендуемый размер текста: до 90 символов (слишком длинный текст может содержать многоточие).

Рейтинг – максимальное значение Необязательный

Максимальное значение рейтинговой шкалы.

Должно быть указано, если также указано текущее значение рейтинга.

Число >= 0,0
Рейтинг - Текущее значение Необязательный

Текущее значение оценочной шкалы.

Должно быть указано, если также указано максимальное значение рейтинга.

Число >= 0,0
Рейтинг – подсчет Необязательный

Подсчет оценок за жилье.

Примечание. Укажите это поле, если ваше приложение хочет контролировать, как оно отображается пользователям. Укажите краткую строку, которая может быть отображена пользователю. Например, если количество составляет 1 000 000, рассмотрите возможность использования сокращений, таких как 1M, чтобы оно не обрезалось на дисплеях меньшего размера.

Нить
Рейтинг – значение подсчета Необязательный

Подсчет оценок за жилье.

Примечание. Укажите это поле, если вы не хотите самостоятельно обрабатывать логику отображаемых сокращений. Если присутствуют и счетчик, и значение счетчика, мы будем использовать счетчик для отображения пользователям.

Длинный

PointOfInterestEntity

Атрибут Требование Описание Формат
Действие Ури Необходимый

Глубокая ссылка на объект в приложении поставщика.

Примечание. Для атрибуции можно использовать глубокие ссылки. Обратитесь к этому FAQ

Ури
Заголовок Необходимый Название сущности.

Нить

Рекомендуемый размер текста: максимум 50 символов.

Изображения для плакатов Необходимый

Если предоставлено несколько изображений, мы покажем только одно изображение. Рекомендуемое соотношение сторон — 16:9.

Примечание. Изображение настоятельно рекомендуется. Если имеется значок, обеспечьте безопасное пространство в 24 dps вверху и внизу изображения.

Дополнительные сведения см. в разделе «Спецификации изображения» .
Местоположение - Страна Необходимый Страна, в которой происходит событие.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение - Город Необходимый Город, в котором происходит достопримечательность.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение – отображение адреса Необходимый Адрес достопримечательности, которая будет отображаться пользователю.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение – адрес Необязательный Уличный адрес (если применимо) достопримечательности.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение — штат Необязательный Штат или провинция (если применимо), в которой расположена достопримечательность.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение — почтовый индекс Необязательный Почтовый индекс (если применимо) достопримечательности.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение – район Необязательный Окрестности (если применимо) интересующей точки.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

AvailabilityTimeWindow — время начала Необязательный Временная метка эпохи в миллисекундах, когда ожидается, что точка интереса будет открыта/доступна. Временная метка эпохи в миллисекундах
AvailabilityTimeWindow — время окончания Необязательный Временная метка эпохи в миллисекундах, до которой ожидается, что точка интереса будет открыта/доступна. Временная метка эпохи в миллисекундах
Значки Необязательный

Каждый значок представляет собой либо произвольный текст (максимум 15 символов), либо небольшое изображение.

Значок – текст Необязательный

Название для значка

Примечание. Для значка требуется текст или изображение.

Открытый текст

Рекомендуемый размер текста: максимум 15 символов.

Значок – изображение Необязательный

Маленькое изображение

Специальная UX-обработка, например наложение значка на миниатюру изображения или видео.

Примечание. Для значка требуется текст или изображение.

Дополнительные сведения см. в разделе «Спецификации изображения» .
Описание Необязательный

Один абзац текста для описания объекта.

Примечание. Пользователю будет отображаться либо описание, либо список субтитров, но не оба одновременно.

Открытый текст

Рекомендуемый размер текста: 180 символов.

Список субтитров Необязательный

До трех субтитров, каждый из которых представляет собой одну строку текста.

Примечание. Пользователю будет отображаться либо описание, либо список субтитров, но не оба одновременно.

Открытый текст

Рекомендуемый размер текста для каждого субтитра: максимум 50 символов.

Рейтинг – максимальное значение Необязательный

Максимальное значение рейтинговой шкалы.

Должно быть указано, если также указано текущее значение рейтинга.

Число >= 0,0
Рейтинг - Текущее значение Необязательный

Текущее значение оценочной шкалы.

Должно быть указано, если также указано максимальное значение рейтинга.

Число >= 0,0
Рейтинг – подсчет Необязательный

Подсчет оценок для точки интереса.

Примечание. Укажите это поле, если ваше приложение хочет контролировать, как оно отображается пользователям. Укажите краткую строку, которая может быть отображена пользователю. Например, если количество составляет 1 000 000, рассмотрите возможность использования сокращений, таких как 1M, чтобы оно не обрезалось на дисплеях меньшего размера.

Нить
Рейтинг – значение подсчета Необязательный

Подсчет оценок для точки интереса.

Примечание. Укажите это поле, если вы не хотите самостоятельно обрабатывать логику отображаемых сокращений. Если присутствуют и счетчик, и значение счетчика, мы будем использовать счетчик для отображения пользователям.

Длинный
Цена - Текущая цена Условно требуется

Текущая цена билетов/пропуска на достопримечательность.

Должно быть указано, если указана зачеркнутая цена.

Открытый текст
Цена - Зачеркнутая цена Необязательный Первоначальная цена билетов/входного пропуска на достопримечательность. Открытый текст
Выноска цен Необязательный Выноска цены, чтобы указать промо-акцию, мероприятие, скидку для участников, если таковая имеется.

Открытый текст

Рекомендуемый размер текста: до 45 символов (слишком длинный текст может содержать многоточие).

Категории контента Необязательный Опишите категорию контента в сущности.

Список подходящих перечислений

  • TYPE_TRAVEL_AND_LOCAL
  • TYPE_MOVIES_AND_TV_SHOWS (пример – театр)
  • TYPE_MEDICAL (Пример — больница)
  • TYPE_EDUCATION (пример — школа)
  • TYPE_SPORTS (Пример — стадион)

Дополнительные сведения см. в разделе «Категория контента» .

RestaurantReservationEntity

Атрибут Требование Описание Формат
Действие Ури Необходимый

Глубокая ссылка на объект в приложении поставщика.

Примечание. Для атрибуции можно использовать глубокие ссылки. Обратитесь к этому FAQ

Ури
Заголовок Необходимый Название сущности.

Нить

Рекомендуемый размер текста: максимум 50 символов.

Время начала резервирования Необходимый Временная метка эпохи в миллисекундах, когда ожидается начало резервирования. Временная метка эпохи в миллисекундах
Местоположение - Страна Необходимый Страна, в которой работает ресторан.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение - Город Необходимый Город, в котором происходит ресторан.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение – отображение адреса Необходимый Адрес ресторана, который будет отображаться пользователю.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение – адрес Необязательный Адрес (если применимо) ресторана.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение — штат Необязательный Штат или провинция (если применимо), в которой расположен ресторан.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение — почтовый индекс Необязательный Почтовый индекс (если применимо) ресторана.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение – район Необязательный Район (если применимо) ресторана.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Изображения для плакатов Необязательный Если предоставлено несколько изображений, мы покажем только одно изображение. Рекомендуемое соотношение сторон — 16:9. Дополнительные сведения см. в разделе «Спецификации изображения» .
Описание Необязательный

Один абзац текста для описания объекта.

Примечание. Пользователю будет отображаться либо описание, либо список субтитров, но не оба одновременно.

Открытый текст

Рекомендуемый размер текста: 180 символов.

Список субтитров Необязательный

До трех субтитров, каждый из которых представляет собой одну строку текста.

Примечание. Пользователю будет отображаться либо описание, либо список субтитров, но не оба одновременно.

Открытый текст

Рекомендуемый размер текста для каждого субтитра: максимум 50 символов.

Размер стола Необязательный Количество человек в группе бронирования Целое число > 0

EventReservationEntity

Атрибут Требование Описание Формат
Действие Ури Необходимый

Глубокая ссылка на объект в приложении поставщика.

Примечание. Для атрибуции можно использовать глубокие ссылки. Обратитесь к этому FAQ

Ури
Заголовок Необходимый Название сущности.

Нить

Рекомендуемый размер текста: максимум 50 символов.

Время начала Необходимый

Временная метка эпохи, когда ожидается начало события.

Примечание. Это будет указано в миллисекундах.

Временная метка эпохи в миллисекундах
Режим событий Необходимый

Поле, указывающее, будет ли мероприятие виртуальным, очным или и тем, и другим.

Перечисление: VIRTUAL, IN_PERSON или HYBRID.
Местоположение - Страна Условно требуется

Страна, в которой происходит событие.

Примечание. Это необходимо для событий IN_PERSON или HYBRID.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение - Город Условно требуется

Город, в котором происходит событие.

Примечание. Это необходимо для событий IN_PERSON или HYBRID.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение – отображение адреса Условно требуется

Адрес или название места проведения мероприятия, которое должно отображаться пользователю.

Примечание. Это необходимо для событий IN_PERSON или HYBRID.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение – адрес Необязательный Адрес (если применимо) места проведения мероприятия.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение — штат Необязательный Штат или провинция (если применимо), в которой проводится мероприятие.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение — почтовый индекс Необязательный Почтовый индекс (если применимо) места, в котором проводится мероприятие.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение – район Необязательный Район (если применимо), в котором проводится мероприятие.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Изображения для плакатов Необязательный

Если предоставлено несколько изображений, мы покажем только одно изображение. Рекомендуемое соотношение сторон — 16:9.

Примечание. Изображение настоятельно рекомендуется. Если имеется значок, обеспечьте безопасное пространство в 24 dps вверху и внизу изображения.

Дополнительные сведения см. в разделе «Спецификации изображения» .
Время окончания Необязательный

Временная метка эпохи, когда ожидается завершение события.

Примечание. Это будет указано в миллисекундах.

Временная метка эпохи в миллисекундах
Поставщик услуг – имя Необязательный

Имя поставщика услуг.

Примечание. Для поставщика услуг требуется либо текст, либо изображение.

Открытый текст. Например, имя организатора мероприятия/тура.
Поставщик услуг – изображение Необязательный

Логотип/изображение поставщика услуг.

Примечание. Для поставщика услуг требуется либо текст, либо изображение.

См. инструкции в разделе «Технические характеристики изображения» .
Описание Необязательный

Один абзац текста для описания объекта.

Примечание. Пользователю будет отображаться либо описание, либо список субтитров, но не оба одновременно.

Открытый текст

Рекомендуемый размер текста: 180 символов.

Список субтитров Необязательный

До трех субтитров, каждый из которых представляет собой одну строку текста.

Примечание. Пользователю будет отображаться либо описание, либо список субтитров, но не оба одновременно.

Открытый текст

Рекомендуемый размер текста для каждого субтитра: максимум 50 символов.

Значки Необязательный

Каждый значок представляет собой либо произвольный текст (максимум 15 символов), либо небольшое изображение.

Значок – текст Необязательный

Название для значка

Примечание. Для значка требуется текст или изображение.

Открытый текст

Рекомендуемый размер текста: максимум 15 символов.

Значок – изображение Необязательный

Маленькое изображение

Специальная UX-обработка, например наложение значка на миниатюру изображения или видео.

Примечание. Для значка требуется текст или изображение.

Дополнительные сведения см. в разделе «Спецификации изображения» .
Идентификатор резервирования Необязательный Идентификатор резервирования для резервирования события. Открытый текст
Цена - Текущая цена Условно требуется

Текущая цена билета/пропуска на мероприятие.

Должно быть указано, если указана зачеркнутая цена.

Открытый текст
Цена — Зачеркнутая цена Необязательный Первоначальная цена билета/пропуска на мероприятие. Открытый текст
Выноска цены Необязательный Выноска цены, чтобы указать промо-акцию, мероприятие, скидку для участников, если таковая имеется.

Открытый текст

Рекомендуемый размер текста: до 45 символов (слишком длинный текст может содержать многоточие).

Рейтинг – максимальное значение Необязательный

Максимальное значение рейтинговой шкалы.

Должно быть указано, если также указано текущее значение рейтинга.

Число >= 0,0
Рейтинг - Текущее значение Необязательный

Текущее значение оценочной шкалы.

Должно быть указано, если также указано максимальное значение рейтинга.

Число >= 0,0
Рейтинг – подсчет Необязательный

Подсчет рейтингов события.

Примечание. Укажите это поле, если ваше приложение хочет контролировать, как оно отображается пользователям. Укажите краткую строку, которая может быть отображена пользователю. Например, если количество составляет 1 000 000, рассмотрите возможность использования сокращений, таких как 1M, чтобы оно не обрезалось на дисплеях меньшего размера.

Нить
Рейтинг – значение подсчета Необязательный

Подсчет рейтингов события.

Примечание. Укажите это поле, если вы не хотите самостоятельно обрабатывать логику отображаемых сокращений. Если присутствуют и счетчик, и значение счетчика, мы будем использовать счетчик для отображения пользователям.

Длинный
Категории контента Необязательный Опишите категорию контента в сущности.

Список подходящих перечислений

  • TYPE_MOVIES_AND_TV_SHOWS (пример – кино)
  • TYPE_DIGITAL_GAMES (пример — киберспорт)
  • TYPE_MUSIC (пример — концерт)
  • TYPE_TRAVEL_AND_LOCAL (Пример — тур, фестиваль)
  • TYPE_HEALTH_AND_FITENESS (Пример — занятия йогой)
  • TYPE_EDUCATION (пример – класс)
  • TYPE_SPORTS (Пример – футбольный матч)
  • TYPE_DATING (Пример – встреча)

Дополнительные сведения см. в разделе «Категория контента» .

LodgingReservationEntity

Атрибут Требование Описание Формат
Действие Ури Необходимый

Глубокая ссылка на объект в приложении поставщика.

Примечание. Для атрибуции можно использовать глубокие ссылки. Обратитесь к этому FAQ

Ури
Заголовок Необходимый Название сущности.

Открытый текст. Например, «Ваше пребывание с 12 декабря».

Рекомендуемый размер текста: максимум 50 символов.

Время заезда Необходимый Временная метка эпохи в миллисекундах, обозначающая время прибытия для резервирования. Временная метка эпохи в миллисекундах
Время выезда Необходимый Временная метка эпохи в миллисекундах, которая представляет время выезда для бронирования. Временная метка эпохи в миллисекундах
Местоположение - Страна Необходимый Страна, в которой находится жилье.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение - Город Необходимый Город, в котором находится жилье.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение – отображение адреса Необходимый Адрес проживания, который будет отображаться пользователю.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение – адрес Необязательный Адрес (если применимо) места проживания.

Открытый текст

Рекомендуемый размер текста: максимум ~20 символов.

Местоположение — штат Необязательный Штат или провинция (если применимо), в которой находится жилье.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Местоположение - почтовый индекс Необязательный Почтовый индекс (если применимо) жилья.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Расположение - район Необязательный Соседство (если применимо) жилья.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Плакатные изображения Необязательный

Мы покажем только 1 изображение, когда будут предоставлены несколько изображений. Рекомендуемое соотношение сторон - 16: 9

Примечание. Если предоставлен значок, убедитесь, что безопасное пространство 24 DPS как в верхней, так и внизу изображения

См. Спецификации изображения для руководства.
Описание Необязательный

Один абзац текста для описания сущности.

ПРИМЕЧАНИЕ. Либо описание или список подзаголовок будут отображаться пользователю, а не обоим.

Открытый текст

Рекомендуемый размер текста: 180 chars

Список субтитров Необязательный

До 3 субтитров, с каждым подзаготором одной линией текста.

ПРИМЕЧАНИЕ. Либо описание или список подзаголовок будут отображаться пользователю, а не обоим.

Открытый текст

Рекомендуемый размер текста для каждого подзатинка: макс. 50 Chars

Идентификатор резервации Необязательный Идентификатор резервирования для бронирования жилья. Открытый текст
Рейтинг - максимальное значение Необязательный

Максимальное значение шкалы оценки.

Должен быть предоставлен, если также предоставлено текущая стоимость рейтинга.

Число> = 0,0
Рейтинг - текущее значение Необязательный

Текущее значение шкалы оценки.

Должен быть предоставлен, если также предусмотрено максимальное значение рейтинга.

Число> = 0,0
Рейтинг - счет Необязательный

Подсчет рейтингов для жилья.

Примечание. Предоставьте это поле, если ваше приложение хочет контролировать, как это отображается пользователям. Предоставьте краткую строку, которая может быть отображена пользователю. Например, если количество составляет 1 000 000, рассмотрите возможность использования сокращений, таких как 1 м, чтобы он не был усечен на меньших размерах дисплея.

Нить
Рейтинг - значение счета Необязательный

Подсчет рейтингов для жилья.

Примечание. Предоставьте это поле, если вы не хотите обрабатывать логику аббревиатуры дисплея. Если присутствуют как количество, так и значение счета, мы будем использовать счет для отображения пользователям

Длинный
Цена - текущая плести Условно требуется

Текущая цена жилья.

Должен быть предоставлен, если предоставлена ​​цена.

Открытый текст
Цена - Strikethroughprice Необязательный Первоначальная цена жилья, которая проходит через пользовательский интерфейс. Открытый текст
Ценовой выносный Необязательный Прайский выносливый, чтобы включить промо, событие, скидка участника, если таковые имеются.

Открытый текст

Рекомендуемый размер текста: до 45 chars (текст, который слишком длинный, может показать эллипсы)

TransportationReservationEntity

Атрибут Требование Описание Формат
Действие URI Необходимый

Глубокая ссылка на сущность в приложении поставщика.

Примечание. Вы можете использовать глубокие ссылки для атрибуции. Обратитесь к этому FAQ

Ури
Заголовок Необходимый Название сущности.

Открытый текст. Например, "SFO в Сан"

Рекомендуемый размер текста: максимум 50 Chars

Тип транспорта Необходимый Режим/тип транспорта для резервации. Enum: рейс, поезд, автобус или паром
Время отправления Необходимый Эпоха временная метка в миллисекундах, которая представляет время отправления. Эпоха временной метки в миллисекундах
Время прибытия Необходимый Эпоха временной метки в миллисекундах, которая представляет время прибытия. Эпоха временной метки в миллисекундах
Место отправления - страна Необязательный Страна отправления.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Место вылета - город Необязательный Город отправленного.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Место вылета - адрес отображения Необязательный Расположение отъезда, которое будет отображаться пользователю.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Место вылета - адрес улицы Необязательный Уличный адрес (если применимо) места вылета.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Место вылета - штат Необязательный Государство или провинция (если применимо) места вылета.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Место вылета - почтовый индекс Необязательный Почтовый индекс (если применимо) места вылета.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Место отправления - район Необязательный Район (если применимо) места вылета.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Место прибытия - страна Необязательный Страна прибытия.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Место прибытия - город Необязательный Город прибытия.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Место прибытия - адрес отображения Необязательный Расположение прибытия, которое будет отображаться пользователю.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Место прибытия - адрес улицы Необязательный Уличный адрес (если применимо) места прибытия.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Место прибытия - состояние Необязательный Государство или провинция (если применимо) места прибытия.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Место прибытия - почтовый индекс Необязательный Почтовый индекс (если применимо) места прибытия.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Место прибытия - окрестности Необязательный Соседство (если применимо) места прибытия.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Поставщик услуг - имя Необязательный

Название поставщика услуг.

Примечание. Либо текст или изображение требуется для поставщика услуг.

Открытый текст. Например, название авиакомпании
Поставщик услуг - изображение Необязательный

Логотип/изображение поставщика услуг.

Примечание. Либо текст или изображение требуется для поставщика услуг.

См. Спецификации изображения для руководства.
Плакатные изображения Необязательный

Мы покажем только 1 изображение, когда будут предоставлены несколько изображений. Рекомендуемое соотношение сторон - 16: 9

См. Спецификации изображения для руководства.
Описание Необязательный

Один абзац текста для описания сущности.

ПРИМЕЧАНИЕ. Либо описание или список подзаголовок будут отображаться пользователю, а не обоим.

Открытый текст

Рекомендуемый размер текста: 180 chars

Список субтитров Необязательный

До 3 субтитров, с каждым подзаготором одной линией текста.

ПРИМЕЧАНИЕ. Либо описание или список подзаголовок будут отображаться пользователю, а не обоим.

Открытый текст

Рекомендуемый размер текста для каждого подзатинка: макс. 50 Chars

Идентификатор резервации Необязательный Идентификатор резервирования для бронирования транспорта. Открытый текст
Цена - текущая плести Условно требуется

Текущая цена резервации.

Должен быть предоставлен, если предоставлена ​​цена.

Открытый текст
Цена - Strikethroughprice Необязательный Первоначальная цена резервации, которая проходит через пользовательский интерфейс. Открытый текст
Ценовой выносный Необязательный Прайский выносливый, чтобы включить промо, событие, скидка участника, если таковые имеются.

Открытый текст

Рекомендуемый размер текста: до 45 chars (текст, который слишком длинный, может показать эллипсы)

Транспортный номер Необходимый Номер полета, номер автобуса, номер поезда или номер паром/круиз. Открытый текст
Время посадки Необходимый Эпоха временной метки, которая представляет время посадки для резервирования (если применимо) Эпоха временной метки в миллисекундах

VehicleRentalReservationEntity

Атрибут Требование Описание Формат
Действие URI Необходимый

Глубокая ссылка на сущность в приложении поставщика.

Примечание. Вы можете использовать глубокие ссылки для атрибуции. Обратитесь к этому FAQ

Ури
Заголовок Необходимый Название сущности.

Открытый текст. Например, "Avis Union Square SF"

Рекомендуемый размер текста: максимум 50 Chars

Время забирать Необходимый Эпоха временной метки, которая представляет время забора для резервации. Эпоха временной метки в миллисекундах
Время возврата Необязательный Эпоха временной метки, которая представляет время проверки для резервации. Эпоха временной метки в миллисекундах
Адрес пикапа - страна Необязательный Страна места пикапа.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Адрес пикапа - город Необязательный Город места пикапа.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Адрес отбора - адрес отображения Необязательный Место закуска, которое будет отображаться пользователю.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Адрес раската - уличный адрес Необязательный Адрес улицы (если применимо) места набора.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Адрес пикапа - состояние Необязательный Государство или провинция (если применимо) места для получения.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Адрес пикапа - почтовый индекс Необязательный Почтовый индекс (если применимо) местоположения забора.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Адрес пикапа - соседство Необязательный Соседство (если применимо) местоположения забора.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Обратный адрес - страна Необязательный Страна возвращения.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Обратный адрес - город Необязательный Расположение города возвращения.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Адрес возврата - адрес отображения Необязательный Место возврата, которое будет отображаться пользователю.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Адрес возврата - адрес улицы Необязательный Уличный адрес (если применимо) места возврата.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Адрес возврата - состояние Необязательный Государство или провинция (если применимо) места возврата.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Адрес возврата - почтовый индекс Необязательный Почтовый индекс (если применимо) места возврата.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Обратный адрес - соседство Необязательный Район (если применимо) места возврата.

Открытый текст

Рекомендуемый размер текста: максимум ~ 20 Chars

Поставщик услуг - имя Необязательный

Название поставщика услуг.

Примечание. Либо текст или изображение требуется для поставщика услуг.

Открытый текст. Например, "Авиация автомобиля" прокат "
Поставщик услуг - изображение Необязательный

Логотип/изображение поставщика услуг.

Примечание. Либо текст или изображение требуется для поставщика услуг.

См. Спецификации изображения для руководства.
Плакатные изображения Необязательный

Мы покажем только 1 изображение, когда будут предоставлены несколько изображений. Рекомендуемое соотношение сторон - 16: 9

См. Спецификации изображения для руководства.
Описание Необязательный

Один абзац текста для описания сущности.

ПРИМЕЧАНИЕ. Либо описание или список подзаголовок будут отображаться пользователю, а не обоим.

Открытый текст

Рекомендуемый размер текста: 180 chars

Список субтитров Необязательный

До 3 субтитров, с каждым подзаготором одной линией текста.

ПРИМЕЧАНИЕ. Либо описание или список подзаголовок будут отображаться пользователю, а не обоим.

Открытый текст

Рекомендуемый размер текста для каждого подзатинка: макс. 50 Chars

Идентификатор подтверждения Необязательный Идентификатор подтверждения для бронирования аренды автомобиля. Открытый текст
Цена - текущая плести Условно требуется

Текущая цена резервации.

Должен быть предоставлен, если предоставлена ​​цена.

Открытый текст
Цена - Strikethroughprice Необязательный Первоначальная цена резервации, которая проходит через пользовательский интерфейс. Открытый текст
Ценовой выносный Необязательный Прайский выносливый, чтобы включить промо, событие, скидка участника, если таковые имеются.

Открытый текст

Рекомендуемый размер текста: до 45 chars (текст, который слишком длинный, может показать эллипсы)

Характеристики изображения

Требуемые спецификации для активов изображений перечислены в этой таблице:

Соотношение сторон Минимальные пиксели Рекомендуемые пиксели

Квадрат (1x1)

Предпочтительный

300x300 1200x1200
Ландшафт (1,91x1) 600x314 1200x628
Портрет (4x5) 480x600 960x1200

Изображения должны быть размещены на публичных CDN, чтобы Google мог получить к ним доступ.

Форматы файлов

Png, JPG, Static Gif, Webp

Максимальный размер файла

5120 КБ

Дополнительные рекомендации

  • Зона безопасного изображения: поместите свой важный контент в центр 80% изображения.
  • Используйте прозрачный фон, чтобы изображение могло быть правильно отображаться в темных и легких настройках тем.

Категория контента

Категория контента позволяет приложениям публиковать контент, принадлежащий нескольким категориям. Это отображает содержание с некоторыми из предопределенных категорий, а именно:

  • TYPE_EDUCATION
  • TYPE_SPORTS
  • TYPE_MOVIES_AND_TV_SHOWS
  • TYPE_BOOKS
  • TYPE_AUDIOBOOKS
  • TYPE_MUSIC
  • TYPE_DIGITAL_GAMES
  • TYPE_TRAVEL_AND_LOCAL
  • TYPE_HOME_AND_AUTO
  • TYPE_BUSINESS
  • TYPE_NEWS
  • TYPE_FOOD_AND_DRINK
  • TYPE_SHOPPING
  • TYPE_HEALTH_AND_FITENESS
  • TYPE_MEDICAL
  • TYPE_PARENTING
  • TYPE_DATING

Изображения должны быть размещены на публичных CDN, чтобы Google мог получить к ним доступ.

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

  1. Некоторые сущности, такие как статья и genericfeaturedentity, имеют право использовать любую из категорий контента. Для других сущностей, таких как Evententity , EventReservationality , PointOfEntestity , только подмножество этих категорий имеет право. Проверьте список категорий, имеющих право на тип объекта, прежде чем заполнить список.
  2. Используйте конкретный тип объекта для некоторых категорий контента по комбинации общих объектов и ContentCategory:

  3. Поле ContentCategory является необязательным и должно быть оставлено пустым, если контент не принадлежит ни к одной из категорий, упомянутых ранее.

  4. В случае предоставлены несколько категорий контента, предоставьте их в порядке релевантности для контента с наиболее релевантной категорией контента, размещенной первым в списке.

Шаг 2: Предоставьте данные кластера

Рекомендуется, чтобы контент опубликовал задание, выполняемую в фоновом режиме (например, с использованием WorkManager ) и регулярно запланированным или на основе событий (например, каждый раз, когда пользователь открывает приложение или когда пользователь просто что -то добавил к их тележка).

AppEngagePublishClient отвечает за публикацию кластеров.

Есть следующие API для публикации кластеров в клиенте:

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishContinuationCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteContinuationCluster
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

Этот API используется для проверки того, доступна ли служба для интеграции и может ли контент быть представлен на устройстве.

Котлин


client.isServiceAvailable.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        // Handle IPC call success
        if(task.result) {
          // Service is available on the device, proceed with content publish
          // calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
}

Джава


client.isServiceAvailable().addOnCompleteListener(task - > {
    if (task.isSuccessful()) {
        // Handle success
        if(task.getResult()) {
          // Service is available on the device, proceed with content publish
          // calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
});

publishRecommendationClusters

Этот API используется для публикации списка объектов RecommendationCluster .

Котлин


client.publishRecommendationClusters(
      PublishRecommendationClustersRequest.Builder()
        .addRecommendationCluster(
          RecommendationCluster.Builder()
            .addEntity(entity1)
            .addEntity(entity2)
            .setTitle("Top Picks For You")
            .build()
        )
        .build()
    )

Джава


client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Top Picks For You")
                        .build())
                .build());

Когда служба получает запрос, в рамках одной транзакции происходят следующие действия:

  • Существующие данные RecommendationCluster от партнера разработчика удалены.
  • Данные из запроса анализируются и хранятся в обновленном кластере рекомендаций.

В случае ошибки весь запрос отклоняется, и существующее состояние сохраняется.

publishFeaturedCluster

Этот API используется для публикации списка объектов FeaturedCluster .

Котлин


client.publishFeaturedCluster(
    PublishFeaturedClusterRequest.Builder()
      .setFeaturedCluster(
        FeaturedCluster.Builder()
          .addEntity(entity1)
          .addEntity(entity2)
          .build())
      .build())

Джава


client.publishFeaturedCluster(
            new PublishFeaturedClustersRequest.Builder()
                .addFeaturedCluster(
                    new FeaturedCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build());

Когда служба получает запрос, в рамках одной транзакции происходят следующие действия:

  • Существующие данные FeaturedCluster от партнера разработчика удалены.
  • Данные из запроса проанализированы и хранятся в обновленном избранном кластере.

В случае ошибки весь запрос отклоняется, и существующее состояние сохраняется.

publishContinuationCluster

Этот API используется для публикации объекта ContinuationCluster .

Котлин


client.publishContinuationCluster(
    PublishContinuationClusterRequest.Builder()
      .setContinuationCluster(
        ContinuationCluster.Builder()
          .addEntity(entity1)
          .addEntity(entity2)
          .build())
      .build())

Джава


client.publishContinuationCluster(
            new PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    new ContinuationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build());

Когда служба получает запрос, в рамках одной транзакции происходят следующие действия:

  • Существующие данные ContinuationCluster от партнера разработчика удалены.
  • Данные из запроса анализируются и хранятся в обновленном кластере продолжения.

В случае ошибки весь запрос отклоняется, и существующее состояние сохраняется.

publishUserAccountManagementRequest

Этот API используется для публикации знаки в карте. Действие SIGNIN направляет пользователей на страницу входа в приложение, чтобы приложение могло публиковать контент (или предоставлять более персонализированный контент)

Следующие метаданные являются частью знаки в карте -

Атрибут Требование Описание
Действие URI Необходимый DeepLink to Action (т. Е. Перейдите на страницу входа в приложение)
Изображение Необязательно - если не предоставлено, название должно быть предоставлено

Изображение, показанное на карте

Изображения соотношения сторон 16x9 с разрешением 1264x712

Заголовок Необязательно - если не предоставлено, изображение должно быть предоставлено Название на карте
Текст действия Необязательный Текст, показанный на CTA (т.е. войти в систему)
Подзаголовок Необязательный Дополнительный субтитры на карте

Котлин


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());

Джава


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 от партнера разработчика удаляются.
  • Данные из запроса анализируются и хранятся в обновленном кластере userAccountmanagementluster.

В случае ошибки весь запрос отклоняется, и существующее состояние сохраняется.

updatePublishStatus

Если по какой -либо внутренней деловой причине, ни один из кластеров не опубликована, мы настоятельно рекомендуем обновить статус публикации, используя API UpdatePublishStatus . Это важно, потому что:

  • Предоставление статуса во всех сценариях, даже когда контент опубликован (Status == Опубликовано), имеет решающее значение для заполнения информационных панелей, которые используют этот явный статус для передачи здоровья и других показателей вашей интеграции.
  • Если контент не опубликовано, но статус интеграции не нарушено (состояние == not_published), Google может избежать запуска оповещений на панели оздоровительных панелей приложения. Это подтверждает, что содержание не опубликовано из -за ожидаемой ситуации с точки зрения поставщика.
  • Это помогает разработчикам дать представление о том, когда данные опубликованы по сравнению с нет.
  • Google может использовать коды состояния, чтобы подтолкнуть пользователя для выполнения определенных действий в приложении, чтобы они могли видеть содержимое приложения или преодолеть его.

Список подходящих кодов статуса публикации:

// Content is published
AppEngagePublishStatusCode.PUBLISHED,

// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,

// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,

// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,

// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,

// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,

// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,

// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,

// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER

Если контент не опубликован из -за того, что пользователь не вошел в систему, Google рекомендует опубликовать карту знаки. Если по какой -либо причине поставщики не могут опубликовать карту подписи, мы рекомендуем позвонить в API UpdatePublishStatus с кодом состояния not_published_requires_sign_in

Котлин


client.updatePublishStatus(
   PublishStatusRequest.Builder()
     .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
     .build())

Джава


client.updatePublishStatus(
    new PublishStatusRequest.Builder()
        .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
        .build());

deleteRecommendationClusters

Этот API используется для удаления содержания кластеров рекомендаций.

Котлин


client.deleteRecommendationClusters()

Джава


client.deleteRecommendationClusters();

Когда служба получает запрос, он удаляет существующие данные из кластеров рекомендаций. В случае ошибки весь запрос отклоняется, и существующее состояние сохраняется.

deleteFeaturedCluster

Этот API используется для удаления содержания избранного кластера.

Котлин


client.deleteFeaturedCluster()

Джава


client.deleteFeaturedCluster();

Когда служба получает запрос, он удаляет существующие данные из избранного кластера. В случае ошибки весь запрос отклоняется, и существующее состояние сохраняется.

deleteContinuationCluster

Этот API используется для удаления содержания кластера продолжения.

Котлин


client.deleteContinuationCluster()

Джава


client.deleteContinuationCluster();

Когда служба получает запрос, он удаляет существующие данные из кластера продолжения. В случае ошибки весь запрос отклоняется, и существующее состояние сохраняется.

deleteUserManagementCluster

Этот API используется для удаления содержания кластера UserAccountmanagement.

Котлин


client.deleteUserManagementCluster()

Джава


client.deleteUserManagementCluster();

Когда служба получает запрос, она удаляет существующие данные из кластера UserAccountmanagement. В случае ошибки весь запрос отклоняется, и существующее состояние сохраняется.

deleteClusters

Этот API используется для удаления содержания данного типа кластера.

Котлин


client.deleteClusters(
    DeleteClustersRequest.Builder()
      .addClusterType(ClusterType.TYPE_CONTINUATION)
      .addClusterType(ClusterType.TYPE_FEATURED)
      .addClusterType(ClusterType.TYPE_RECOMMENDATION)
      .build())

Джава


client.deleteClusters(
            new DeleteClustersRequest.Builder()
                .addClusterType(ClusterType.TYPE_CONTINUATION)
                .addClusterType(ClusterType.TYPE_FEATURED)
                .addClusterType(ClusterType.TYPE_RECOMMENDATION)
                .build());

Когда служба получает запрос, она удаляет существующие данные из всех кластеров, соответствующих указанным типам кластеров. Клиенты могут выбрать проход одного или многих типов кластеров. В случае ошибки весь запрос отклоняется, и существующее состояние сохраняется.

Обработка ошибок

Настоятельно рекомендуется прослушать результат задачи из публикации API, чтобы можно было предпринять последующее действие для восстановления и повторного представления успешной задачи.

Котлин


client.publishRecommendationClusters(
        PublishRecommendationClustersRequest.Builder()
          .addRecommendationCluster(..)
          .build())
      .addOnCompleteListener { task ->
        if (task.isSuccessful) {
          // do something
        } else {
          val exception = task.exception
          if (exception is AppEngageException) {
            @AppEngageErrorCode val errorCode = exception.errorCode
            if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
              // do something
            }
          }
        }
      }

Джава


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 с причиной, включенной в качестве кода ошибки.

Код ошибки Примечание
SERVICE_NOT_FOUND Сервис недоступен на данном устройстве.
SERVICE_NOT_AVAILABLE Служба доступна на данном устройстве, но он недоступен во время вызова (например, он явно отключен).
SERVICE_CALL_EXECUTION_FAILURE Выполнение задачи не удалось из -за проблем с потоком. В этом случае его можно повторно.
SERVICE_CALL_PERMISSION_DENIED Вызывающему не разрешено совершать сервисный звонок.
SERVICE_CALL_INVALID_ARGUMENT Запрос содержит неверные данные (например, больше, чем разрешенное количество кластеров).
SERVICE_CALL_INTERNAL Есть ошибка на стороне службы.
SERVICE_CALL_RESOURCE_EXHAUSTED Сервисный звонок выполняется слишком часто.

Шаг 3: Обработка вещания

В дополнение к созданию вызовов API публикации контента через работу, также необходимо настроить BroadcastReceiver для получения запроса на публикацию контента.

Целью вещательных намерений является в основном для реактивации приложений и принуждения синхронизации данных. Намерения вещания не предназначены для того, чтобы отправляться очень часто. Это запускается только тогда, когда служба Engage определяет, что содержание может быть несвежим (например, неделя). Таким образом, есть больше уверенности в том, что пользователь может иметь новый опыт контента, даже если приложение не выполнялось в течение длительного периода времени.

BroadcastReceiver должен быть настроен следующим двумя способами:

  • Динамически зарегистрируйте экземпляр класса BroadcastReceiver с использованием Context.registerReceiver() . Это позволяет общаться из приложений, которые все еще живут в памяти.

Котлин

class AppEngageBroadcastReceiver : BroadcastReceiver(){
  // Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
  // is received
  // Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
  // Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
  // received
}

fun registerBroadcastReceivers(context: Context){
  var  context = context
  context = context.applicationContext

// Register Recommendation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_RECOMMENDATION))

// Register Featured Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_FEATURED))

// Register Continuation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION))
}

Джава

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 continuation cluster publish when PUBLISH_CONTINUATION 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));

// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED));

// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION));

}
  • Статически объявить реализацию с помощью тега <receiver> в вашем файле AndroidManifest.xml . Это позволяет приложению получать намерения вещания, когда оно не работает, а также позволяет приложению публиковать контент.
<application>
   <receiver
      android:name=".AppEngageBroadcastReceiver"
      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.PUBLISH_CONTINUATION" />
      </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.PUBLISH_CONTINUATION Рекомендуется начать вызов publishContinuationCluster при получении этого намерения.

Интеграционный рабочий процесс

Для пошагового руководства по проверке вашей интеграции после ее завершения см. Рабочий процесс интеграции разработчика Engage .

Часто задаваемые вопросы

См. Engage SDK часто задают вопросы о часто задаваемых вопросах.

Контакт

Свяжитесь с Engage-developers@google.com, если есть какие-либо вопросы в процессе интеграции.

Следующие шаги

После завершения этой интеграции ваши следующие шаги следующие:

  • Отправьте электронное письмо на engage-developers@google.com и прикрепите свой интегрированный APK, который готов к тестированию Google.
  • Google выполняет проверку и обзоры внутренне, чтобы убедиться, что интеграция работает, как и ожидалось. Если необходимы изменения, Google связывается с вами с любыми необходимыми деталями.
  • Когда тестирование завершено, и никаких изменений не требуется, Google связывается с вами, чтобы уведомить вас, что вы можете начать публиковать обновленный и интегрированный APK в магазин Play.
  • После того, как Google подтвердил, что ваш обновленный APK был опубликован в Play Store, ваша рекомендация , представленные и продолжительные кластеры могут быть опубликованы и видимы для пользователей.
,

Google создает поверхность на грани, которая организует приложения пользователей по вертикали и дает новый захватывающий опыт для персонализированного потребления и обнаружения контента приложения. Этот полноэкранный опыт предоставляет партнерам -разработчикам возможность продемонстрировать свой лучший богатый контент в выделенном канале за пределами их приложения. Это руководство содержит инструкции для партнеров -разработчиков, чтобы интегрировать их контент Travel & Events, используя Engage SDK для заполнения этой новой площади поверхности.

Детали интеграции

Терминология

Эта интеграция включает в себя следующие три типа кластеров: рекомендация , показатели и продолжение .

  • Рекомендационные кластеры показывают персонализированные предложения по путешествиям и мероприятиям от индивидуального партнера по разработчику. Эти рекомендации могут быть персонализированы для пользователя или обобщенного (например, трендовые элементы). Используйте их для поверхности статей, событий, проживания или рекомендаций по интересам.

    • Рекомендационный кластер может быть изготовлен из ArticleEntity , EventEntity , LodgingEntity , PointOfInterestEntity , или списков StoreEntity , но не сочетания различных типов сущностей.

    Ваши рекомендации принимают следующую структуру:

    • Рекомендационные кластеры: представление пользовательского интерфейса, которое содержит группу рекомендаций от одного и того же партнера по разработчику.

    • Сущность: объект, представляющий один элемент в кластере. Эта интеграция предлагает некоторые объекты, которые будут всплыть с помощью кластера рекомендаций:

      • Статья : статья представляет собой рекомендацию для текстового контента, связанного с путешествиями и событиями. Его можно использовать для статей, блогеров, маркетингового контента, фрагментов новостей и т. Д.

        Рисунок 1: пользовательский интерфейс, показывающий одну статью в кластере рекомендаций.
      • EventEntity : EventEntity представляет собой событие, которое произойдет в будущем. Время начала события - это критическая информация, которую необходимо передать пользователям.

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

        Рисунок 3: Пользовательский интерфейс, показывающий одну жидкую сторону в кластере рекомендаций.
      • Занятие : Lostentity представляет собой магазин, ресторан, кафе и т. Д., Он выделяет контент, где место для столовой или магазин - это критическая информация, которую необходимо передать пользователям.

        Рисунок 4: Пользовательский интерфейс, показывающий одну закладку в кластере рекомендаций.
      • PointOfEntestentity : PointOfEntestentity представляет собой интересующее место, как заправочная станция, место проведения мероприятий, тематический парк, музей, туристическая достопримечательность, пешеходная тропа и т. Д., Он подчеркивает контент, где место - это критическая информация, которую необходимо передать пользователям. Его не следует использовать для жилья, магазина или столовой.

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

    Ваш контент продолжения может принять следующую структуру:

    • Статья : статья представляет собой рекомендацию для контента, связанного с путешествиями и событиями. Эта сущность может быть использована для представления незавершенных новостных статей или другого контента, которые пользователь хотел бы продолжать потреблять от того места, где он оставил их. Пример: фрагмент новостей, фрагмент блога о пункте назначения или событие.

      Рисунок 6. Пользовательский интерфейс, показывающий одну статью в кластере продолжения.
    • Restaurantreservationality : RestaurantreservationEntity представляет собой бронирование для ресторана или кафе и помогает пользователям отслеживать предстоящие или постоянные бронирования ресторанов.

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

      • Спортивные мероприятия, такие как бронирование для футбольного матча
      • Игровые мероприятия, такие как бронирование для киберспорта
      • Развлекательные мероприятия, такие как бронирование для фильмов в кино, концерт, театр, подписание книг
      • Поездка или оговорки по интересам, такие как экскурсии с гидом, музейные билеты
      • Социальные / Семинар / Конференции Бронирование
      • Образовательные / учебные сессии Бронирование
      Рисунок 8. Пользовательский интерфейс, показывающий единственное событие, в рамках кластера продолжения.
    • LodgingReservationality : LodgingEntityReservation представляет собой резервирование для проживания в путешествии и помогает пользователям отслеживать предстоящие или текущие бронирования аренды отелей или отпуска.

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

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

      Рисунок 11. Пользовательский интерфейс, показывающий одну транспортную машину, в рамках кластера продолжения.
  • Показанный кластер - это представление пользовательского интерфейса, которая демонстрирует выбранный Hero GenericFeaturedEntity от многих партнеров по разработчикам в одной группировке пользовательского интерфейса. Существует единственный представленное кластер, который появляется вблизи вершины пользовательского интерфейса, с приоритетным размещением выше всех кластеров рекомендаций. Каждому партнеру по разработчику разрешено транслировать один объект поддерживаемого типа, который представлен, со многими организациями (потенциально разными типами) от нескольких разработчиков приложений в фиксированном кластере.

    • GenericFeatureTentity : GenericFeatureDentity отличается от элемента рекомендации в этом представленном элементе, который должен использоваться для одного топ -контента от разработчиков и должен представлять собой единственный наиболее важный контент, который будет интересным и актуальным для пользователей.

      Рисунок 12: Пользовательский интерфейс, показывающий фиксацию, со списком GenericFeatureTentity

Предварительная работа

Минимальный уровень API: 19

Добавьте com.google.android.engage:engage-core в ваше приложение:

dependencies {
    // Make sure you also include that repository in your project's build.gradle file.
    implementation 'com.google.android.engage:engage-core:1.5.2'
}

Краткое содержание

Дизайн основан на реализации связанной службы .

Данные, которые клиент может опубликовать, подлежат следующим ограничениям для различных типов кластеров:

Кластерный тип Кластерные ограничения Минимальные ограничения сущности в кластере Максимальные ограничения сущности в кластере
Рекомендационные кластеры (ы) Не более 5 Не менее 5 Не более 25 ( ArticleEntity , EventEntity , LodgingEntity , StoreEntity или PointOfInterestEntity )
Продолжение кластера Не более 1 Не менее 1 Не более 10 ( ArticleEntity , RestaurantReservationEntity EventReservationEntity , LodgingReservationEntity , TransportationReservationEntity или транспортировку или VehicleRentalReservationEntity )
Показанный кластер Не более 1 Не менее 1 Не более 10 ( GenericFeaturedEntity )

Шаг 1: Предоставьте данные объекта

SDK определяет различные объекты для представления каждого типа элемента. Мы поддерживаем следующие объекты для категории путешествий и событий:

  1. GenericFeaturedEntity
  2. ArticleEntity
  3. EventEntity
  4. LodgingEntity
  5. StoreEntity
  6. PointOfInterestEntity
  7. RestaurantReservationEntity
  8. EventReservationEntity
  9. LodgingReservationEntity
  10. TransportationReservationEntity
  11. VehicleRentalReservationEntity

В приведенных ниже диаграммах наброски доступные атрибуты и требования для каждого типа.

GenericFeaturedEntity

Атрибут Требование Описание Формат
Действие URI Необходимый

Глубокая ссылка на сущность в приложении поставщика.

Примечание. Вы можете использовать глубокие ссылки для атрибуции. Обратитесь к этому FAQ

Ури
Плакатные изображения Необходимый

Мы покажем только 1 изображение, когда будут предоставлены несколько изображений. Рекомендуемое соотношение сторон - 16: 9

Примечание. Если предоставлен значок, убедитесь, что безопасное пространство 24 DPS как в верхней, так и внизу изображения

См. Спецификации изображения для руководства.
Заголовок Необязательный Название сущности.

Открытый текст

Рекомендуемый размер текста: 50 Chars

Описание Необязательный

Один абзац текста для описания сущности.

ПРИМЕЧАНИЕ. Либо описание или список подзаголовок будут отображаться пользователю, а не обоим.

Открытый текст

Рекомендуемый размер текста: 180 chars

Список субтитров Необязательный

До 3 субтитров, с каждым подзаготором одной линией текста.

ПРИМЕЧАНИЕ. Либо описание или список подзаголовок будут отображаться пользователю, а не обоим.

Открытый текст

Рекомендуемый размер текста для каждого подзатинка: макс. 50 Chars

Значки Необязательный

Каждый значок - это либо бесплатный текст (максимум 15 Chars), либо небольшое изображение.

Специальное лечение UX в верхней части изображения/видео, например, в качестве наложения значков на изображение

  • "В прямом эфире обновление"
  • Статья ЧИТАЕТ ДОЛЕГО
Значок - текст Необязательный

Название для значка

Примечание: для значка требуется текст или изображение

Открытый текст

Рекомендуемый размер текста: максимум 15 Chars

Значок - изображение Необязательный

Небольшое изображение

Специальное лечение UX, например, как наложение значков на миниатюре изображения/видео.

Примечание: для значка требуется текст или изображение

См. Спецификации изображения для руководства.
Категории контента Необязательный Опишите категорию содержания в сущности.

Список перечислений

См. Раздел категории контента для руководства.

ArticleEntity

Атрибут Требование Описание Формат
Действие URI Необходимый

Глубокая ссылка на сущность в приложении поставщика.

Примечание. Вы можете использовать глубокие ссылки для атрибуции. Обратитесь к этому FAQ

Ури
Заголовок Необходимый Название сущности.

Открытый текст

Рекомендуемый размер текста: максимум 50 Chars

Плакатные изображения Необязательный

Мы покажем только 1 изображение, когда будут предоставлены несколько изображений. Рекомендуемое соотношение сторон - 16: 9

Note: Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image

See Image Specifications for guidance.
Source - Title Необязательный The name of the author, organization, or reporter

Открытый текст

Recommended text size: Under 25 chars

Source - Image Необязательный An image of the source like the author, the organization, reporter See Image Specifications for guidance.
Описание Необязательный

A single paragraph of text to describe the entity.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size: 180 chars

Subtitle list Необязательный

Up to 3 subtitles, with each subtitle a single line of text.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size for each subtitle: max 50 chars

Значки Необязательный

Each badge is either free text (max 15 chars) or small image.

Special UX treatment on top of image/video, for example, as badge overlay on the image

  • "В прямом эфире обновление"
  • Article read duration
Badge - Text Необязательный

Title for the badge

Note: Either text or image is required for the badge

Открытый текст

Recommended text size: max 15 chars

Badge - Image Необязательный

Small image

Special UX treatment, for example as badge overlay on the image/video thumbnail.

Note: Either text or image is required for the badge

See Image Specifications for guidance.
Content Publish Time Необязательный This is the epoch timestamp in milliseconds on when the content was published / updated in the app. Epoch timestamp in milliseconds
Last Engagement Time Conditionally Required

The epoch timestamp in milliseconds when the user interacted with this entity last time.

Note: This field is required if this entity is part of the continuation cluster.

Epoch timestamp in milliseconds
Progress Percentage Conditionally Required

The percentage of the full content consumed by the user to date.

Note: This field is required if this entity is part of the continuation cluster.

An int value between 0~100 inclusive.
Content Categories Необязательный Describe the category of the content in the entity.

List of Enums

See the Content Category section for guidance.

EventEntity

Атрибут Требование Описание Формат
Action Uri Необходимый

Deep Link to the entity in the provider app.

Note: You can use deep links for attribution. Refer to this FAQ

Ури
Заголовок Необходимый Title of the entity.

Нить

Recommended text size: Max 50 chars

Время начала Необходимый

The epoch timestamp when the event is expected to start.

Note: This will be represented in milliseconds.

Epoch timestamp in milliseconds
Event mode Необходимый

A field to indicate whether the event will be virtual, in-person or both.

Enum: VIRTUAL, IN_PERSON, or HYBRID
Poster images Необходимый

We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9

Note: Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image

See Image Specifications for guidance.
Location - Country Conditionally Required

The country in which the event is happening.

Note: This is required for events which are IN_PERSON or HYBRID

Открытый текст

Recommended text size: max ~20 chars

Location - City Conditionally Required

The city in which the event is happening.

Note: This is required for events which are IN_PERSON or HYBRID

Открытый текст

Recommended text size: max ~20 chars

Location - Display Address Conditionally Required

The address or venue name where the event will take place that should be displayed to the user.

Note: This is required for events which are IN_PERSON or HYBRID

Открытый текст

Recommended text size: max ~20 chars

Location - Street Address Необязательный The street address (if applicable) of the location at which event is being hosted.

Открытый текст

Recommended text size: max ~20 chars

Location - State Необязательный The state or province (if applicable) in which the event is being hosted.

Открытый текст

Recommended text size: max ~20 chars

Location - Zip code Необязательный The zip code (if applicable) of the location in which the event is being hosted.

Открытый текст

Recommended text size: max ~20 chars

Location - Neighborhood Необязательный The neighborhood (if applicable) in which the event is being hosted.

Открытый текст

Recommended text size: max ~20 chars

Время окончания Необязательный

The epoch timestamp when the event is expected to end.

Note: This will be represented in milliseconds.

Epoch timestamp in milliseconds
Описание Необязательный

A single paragraph of text to describe the entity.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size: 180 chars

Subtitle list Необязательный

Up to 3 subtitles, with each subtitle a single line of text.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size for each subtitle: max 50 chars

Значки Необязательный

Each badge is either free text (max 15 chars) or small image.

Badge - Text Необязательный

Title for the badge

Note: Either text or image is required for the badge

Открытый текст

Recommended text size: max 15 chars

Badge - Image Необязательный

Small image

Special UX treatment, for example as badge overlay on the image/video thumbnail.

Note: Either text or image is required for the badge

See Image Specifications for guidance.
Price - CurrentPrice Conditionally required

The current price of the ticket/pass for the event.

Must be provided if strikethrough price is provided.

Открытый текст
Price - StrikethroughPrice Необязательный The original price of the ticket/pass for the event. Открытый текст
Price Callout Необязательный Price callout to feature a promo, event, member discount, if available.

Открытый текст

Recommended text size: under 45 chars (Text that is too long may show ellipses)

Content Categories Необязательный Describe the category of the content in the entity.

List of Eligible Enums

  • TYPE_MOVIES_AND_TV_SHOWS (Example - Cinema)
  • TYPE_DIGITAL_GAMES (Example - eSports)
  • TYPE_MUSIC (Example - Concert)
  • TYPE_TRAVEL_AND_LOCAL (Example - Tour, festival)
  • TYPE_HEALTH_AND_FITENESS (Example - Yoga class)
  • TYPE_EDUCATION (Example - Class)
  • TYPE_SPORTS (Example - Football game)
  • TYPE_DATING (Example - meetup)

See the Content Category section for guidance.

LodgingEntity

Атрибут Требование Описание Формат
Action Uri Необходимый

Deep Link to the entity in the provider app.

Note: You can use deep links for attribution. Refer to this FAQ

Ури
Заголовок Необходимый Title of the entity.

Нить

Recommended text size: Max 50 chars

Poster images Необходимый

We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9

Note: If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image

See Image Specifications for guidance.
Location - Country Необходимый The country in which the lodging is happening.

Открытый текст

Recommended text size: max ~20 chars

Location - City Необходимый The city in which the lodging is happening.

Открытый текст

Recommended text size: max ~20 chars

Location - Display Address Необходимый The address of the lodging that will be displayed to the user.

Открытый текст

Recommended text size: max ~20 chars

Location - Street Address Необязательный The street address (if applicable) of the lodging.

Открытый текст

Recommended text size: max ~20 chars

Location - State Необязательный The state or province (if applicable) in which the lodging is located.

Открытый текст

Recommended text size: max ~20 chars

Location - Zip code Необязательный The zip code (if applicable) of the lodging.

Открытый текст

Recommended text size: max ~20 chars

Location - Neighborhood Необязательный The neighborhood (if applicable) of the lodging.

Открытый текст

Recommended text size: max ~20 chars

Значки Необязательный

Each badge is either free text (max 15 chars) or small image.

Badge - Text Необязательный

Title for the badge

Note: Either text or image is required for the badge

Открытый текст

Recommended text size: max 15 chars

Badge - Image Необязательный

Small image

Special UX treatment, for example as badge overlay on the image/video thumbnail.

Note: Either text or image is required for the badge

See Image Specifications for guidance.
Описание Необязательный

A single paragraph of text to describe the entity.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size: 180 chars

Subtitle list Необязательный

Up to 3 subtitles, with each subtitle a single line of text.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size for each subtitle: max 50 chars

AvailabilityTimeWindow - Start Time Необязательный The epoch timestamp in milliseconds when the lodging is expected to be open/available. Epoch timestamp in milliseconds
AvailabilityTimeWindow - End Time Необязательный The epoch timestamp in milliseconds until which the lodging is expected to be open/available. Epoch timestamp in milliseconds
Rating - Max value Необязательный

The maximum value of the rating scale.

Must be provided if current value of rating is also provided.

Number >= 0.0
Rating - Current value Необязательный

The current value of the rating scale.

Must be provided if maximum value of rating is also provided.

Number >= 0.0
Rating - Count Необязательный

The count of the ratings for the lodging.

Note: Provide this field if your app wants to control how this is displayed to the users. Provide the concise string that can be displayed to the user. For example, if the count is 1,000,000, consider using abbreviations like 1M, so that it won't be truncated on smaller display sizes.

Нить
Rating - Count Value Необязательный

The count of the ratings for the lodging.

Note: Provide this field if you don't want to handle the display abbreviation logic yourself. If both Count and Count Value are present, we will use the Count to display to users

Длинный
Price - CurrentPrice Conditionally required

The current price of the lodging.

Must be provided if strikethrough price is provided.

Открытый текст
Price - StrikethroughPrice Необязательный The original price of the lodging, which is be struck-through in the UI. Открытый текст
Price Callout Необязательный Price callout to feature a promo, event, member discount, if available.

Открытый текст

Recommended text size: under 45 chars (Text that is too long may show ellipses)

StoreEntity

The StoreEntity object represents an individual store that developer partners want to publish, such as a restaurant or a grocery store.

Атрибут Требование Описание Формат
Poster images Необходимый At least one image must be provided. See Image Specifications for guidance.
Action Uri Необходимый

Deep Link to the entity in the provider app.

Note: You can use deep links for attribution. Refer to this FAQ

Ури
Заголовок Необязательный The name of the store.

Открытый текст

Recommended text size: under 45 chars (Text that is too long may show ellipses)

Расположение Необязательный The location of the store.

Открытый текст

Recommended text size: under 45 chars (Text that is too long may show ellipses)

Вызывать Необязательный Callout to feature a promo, event, or update for the store, if available.

Открытый текст

Recommended text size: under 45 chars (Text that is too long may show ellipses)

Callout fine print Необязательный Fine print text for the callout.

Открытый текст

Recommended text size: under 45 chars (Text that is too long may show ellipses)

Описание Необязательный A description of the store.

Открытый текст

Recommended text size: under 90 chars (Text that is too long may show ellipses)

Rating - Max value Необязательный

The maximum value of the rating scale.

Must be provided if current value of rating is also provided.

Number >= 0.0
Rating - Current value Необязательный

The current value of the rating scale.

Must be provided if maximum value of rating is also provided.

Number >= 0.0
Rating - Count Необязательный

The count of the ratings for the lodging.

Note: Provide this field if your app wants to control how this is displayed to the users. Provide the concise string that can be displayed to the user. For example, if the count is 1,000,000, consider using abbreviations like 1M, so that it won't be truncated on smaller display sizes.

Нить
Rating - Count Value Необязательный

The count of the ratings for the lodging.

Note: Provide this field if you don't want to handle the display abbreviation logic yourself. If both Count and Count Value are present, we will use the Count to display to users

Длинный

PointOfInterestEntity

Атрибут Требование Описание Формат
Action Uri Необходимый

Deep Link to the entity in the provider app.

Note: You can use deep links for attribution. Refer to this FAQ

Ури
Заголовок Необходимый Title of the entity.

Нить

Recommended text size: Max 50 chars

Poster images Необходимый

We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9

Note: Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image

See Image Specifications for guidance.
Location - Country Необходимый The country in which the point of interest is happening.

Открытый текст

Recommended text size: max ~20 chars

Location - City Необходимый The city in which the point of interest is happening.

Открытый текст

Recommended text size: max ~20 chars

Location - Display Address Необходимый The address of the point of interest that will be displayed to the user.

Открытый текст

Recommended text size: max ~20 chars

Location - Street Address Необязательный The street address (if applicable) of the point of interest.

Открытый текст

Recommended text size: max ~20 chars

Location - State Необязательный The state or province (if applicable) in which the point of interest is located.

Открытый текст

Recommended text size: max ~20 chars

Location - Zip code Необязательный The zip code (if applicable) of the point of interest.

Открытый текст

Recommended text size: max ~20 chars

Location - Neighborhood Необязательный The neighborhood (if applicable) of the point of interest.

Открытый текст

Recommended text size: max ~20 chars

AvailabilityTimeWindow - Start Time Необязательный The epoch timestamp in milliseconds when the point of interest is expected to be open/available. Epoch timestamp in milliseconds
AvailabilityTimeWindow - End Time Необязательный The epoch timestamp in milliseconds until which the point of interest is expected to be open/available. Epoch timestamp in milliseconds
Значки Необязательный

Each badge is either free text (max 15 chars) or small image.

Badge - Text Необязательный

Title for the badge

Note: Either text or image is required for the badge

Открытый текст

Recommended text size: max 15 chars

Badge - Image Необязательный

Small image

Special UX treatment, for example as badge overlay on the image/video thumbnail.

Note: Either text or image is required for the badge

See Image Specifications for guidance.
Описание Необязательный

A single paragraph of text to describe the entity.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size: 180 chars

Subtitle list Необязательный

Up to 3 subtitles, with each subtitle a single line of text.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size for each subtitle: max 50 chars

Rating - Max value Необязательный

The maximum value of the rating scale.

Must be provided if current value of rating is also provided.

Number >= 0.0
Rating - Current value Необязательный

The current value of the rating scale.

Must be provided if maximum value of rating is also provided.

Number >= 0.0
Rating - Count Необязательный

The count of the ratings for the point of interest.

Note: Provide this field if your app wants to control how this is displayed to the users. Provide the concise string that can be displayed to the user. For example, if the count is 1,000,000, consider using abbreviations like 1M, so that it won't be truncated on smaller display sizes.

Нить
Rating - Count Value Необязательный

The count of the ratings for the point of interest.

Note: Provide this field if you don't want to handle the display abbreviation logic yourself. If both Count and Count Value are present, we will use the Count to display to users

Длинный
Price - CurrentPrice Conditionally required

The current price of the tickets/entry pass for the point of interest.

Must be provided if strikethrough price is provided.

Открытый текст
Price - StrikethroughPrice Необязательный The original price of the tickets/entry pass for the point of interest. Открытый текст
Price Callout Необязательный Price callout to feature a promo, event, member discount, if available.

Открытый текст

Recommended text size: under 45 chars (Text that is too long may show ellipses)

Content Categories Необязательный Describe the category of the content in the entity.

List of Eligible Enums

  • TYPE_TRAVEL_AND_LOCAL
  • TYPE_MOVIES_AND_TV_SHOWS (Example - theater)
  • TYPE_MEDICAL (Example - hospital)
  • TYPE_EDUCATION (Example - school)
  • TYPE_SPORTS (Example - stadium)

See the Content Category section for guidance.

RestaurantReservationEntity

Атрибут Требование Описание Формат
Action Uri Необходимый

Deep Link to the entity in the provider app.

Note: You can use deep links for attribution. Refer to this FAQ

Ури
Заголовок Необходимый Title of the entity.

Нить

Recommended text size: Max 50 chars

Reservation Start Time Необходимый The epoch timestamp in milliseconds when the reservation is expected to start. Epoch timestamp in milliseconds
Location - Country Необходимый The country in which the restaurant is happening.

Открытый текст

Recommended text size: max ~20 chars

Location - City Необходимый The city in which the restaurant is happening.

Открытый текст

Recommended text size: max ~20 chars

Location - Display Address Необходимый The address of the prestaurant that will be displayed to the user.

Открытый текст

Recommended text size: max ~20 chars

Location - Street Address Необязательный The street address (if applicable) of the restaurant.

Открытый текст

Recommended text size: max ~20 chars

Location - State Необязательный The state or province (if applicable) in which the restaurant is located.

Открытый текст

Recommended text size: max ~20 chars

Location - Zip code Необязательный The zip code (if applicable) of the restaurant.

Открытый текст

Recommended text size: max ~20 chars

Location - Neighborhood Необязательный The neighborhood (if applicable) of the restaurant.

Открытый текст

Recommended text size: max ~20 chars

Poster images Необязательный We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 See Image Specifications for guidance.
Описание Необязательный

A single paragraph of text to describe the entity.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size: 180 chars

Subtitle list Необязательный

Up to 3 subtitles, with each subtitle a single line of text.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size for each subtitle: max 50 chars

Table Size Необязательный The number of people in the reservation group Integer > 0

EventReservationEntity

Атрибут Требование Описание Формат
Action Uri Необходимый

Deep Link to the entity in the provider app.

Note: You can use deep links for attribution. Refer to this FAQ

Ури
Заголовок Необходимый Title of the entity.

Нить

Recommended text size: Max 50 chars

Время начала Необходимый

The epoch timestamp when the event is expected to start.

Note: This will be represented in milliseconds.

Epoch timestamp in milliseconds
Event mode Необходимый

A field to indicate whether the event will be virtual, in-person or both.

Enum: VIRTUAL, IN_PERSON, or HYBRID
Location - Country Conditionally Required

The country in which the event is happening.

Note: This is required for events which are IN_PERSON or HYBRID

Открытый текст

Recommended text size: max ~20 chars

Location - City Conditionally Required

The city in which the event is happening.

Note: This is required for events which are IN_PERSON or HYBRID

Открытый текст

Recommended text size: max ~20 chars

Location - Display Address Conditionally Required

The address or venue name where the event will take place that should be displayed to the user.

Note: This is required for events which are IN_PERSON or HYBRID

Открытый текст

Recommended text size: max ~20 chars

Location - Street Address Необязательный The street address (if applicable) of the location at which event is being hosted.

Открытый текст

Recommended text size: max ~20 chars

Location - State Необязательный The state or province (if applicable) in which the event is being hosted.

Открытый текст

Recommended text size: max ~20 chars

Location - Zip code Необязательный The zip code (if applicable) of the location in which the event is being hosted.

Открытый текст

Recommended text size: max ~20 chars

Location - Neighborhood Необязательный The neighborhood (if applicable) in which the event is being hosted.

Открытый текст

Recommended text size: max ~20 chars

Poster images Необязательный

We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9

Note: Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image

See Image Specifications for guidance.
Время окончания Необязательный

The epoch timestamp when the event is expected to end.

Note: This will be represented in milliseconds.

Epoch timestamp in milliseconds
Service Provider - Name Необязательный

The name of the service provider.

Note: Either text or image is required for the service provider.

Открытый текст. For example, name of the event organizer/tour
Service Provider - Image Необязательный

The logo/image of the service provider.

Note: Either text or image is required for the service provider.

See Image Specifications for guidance.
Описание Необязательный

A single paragraph of text to describe the entity.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size: 180 chars

Subtitle list Необязательный

Up to 3 subtitles, with each subtitle a single line of text.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size for each subtitle: max 50 chars

Значки Необязательный

Each badge is either free text (max 15 chars) or small image.

Badge - Text Необязательный

Title for the badge

Note: Either text or image is required for the badge

Открытый текст

Recommended text size: max 15 chars

Badge - Image Необязательный

Small image

Special UX treatment, for example as badge overlay on the image/video thumbnail.

Note: Either text or image is required for the badge

See Image Specifications for guidance.
Reservation ID Необязательный The reservation ID for the event reservation. Открытый текст
Price - CurrentPrice Conditionally required

The current price of the ticket/pass for the event.

Must be provided if strikethrough price is provided.

Открытый текст
Price - StrikethroughPrice Необязательный The original price of the ticket/pass for the event. Открытый текст
Price Callout Необязательный Price callout to feature a promo, event, member discount, if available.

Открытый текст

Recommended text size: under 45 chars (Text that is too long may show ellipses)

Rating - Max value Необязательный

The maximum value of the rating scale.

Must be provided if current value of rating is also provided.

Number >= 0.0
Rating - Current value Необязательный

The current value of the rating scale.

Must be provided if maximum value of rating is also provided.

Number >= 0.0
Rating - Count Необязательный

The count of the ratings for the event.

Note: Provide this field if your app wants to control how this is displayed to the users. Provide the concise string that can be displayed to the user. For example, if the count is 1,000,000, consider using abbreviations like 1M, so that it won't be truncated on smaller display sizes.

Нить
Rating - Count Value Необязательный

The count of the ratings for the event.

Note: Provide this field if you don't want to handle the display abbreviation logic yourself. If both Count and Count Value are present, we will use the Count to display to users

Длинный
Content Categories Необязательный Describe the category of the content in the entity.

List of Eligible Enums

  • TYPE_MOVIES_AND_TV_SHOWS (Example - Cinema)
  • TYPE_DIGITAL_GAMES (Example - eSports)
  • TYPE_MUSIC (Example - Concert)
  • TYPE_TRAVEL_AND_LOCAL (Example - Tour, festival)
  • TYPE_HEALTH_AND_FITENESS (Example - Yoga class)
  • TYPE_EDUCATION (Example - Class)
  • TYPE_SPORTS (Example - Football game)
  • TYPE_DATING (Example - meetup)

See the Content Category section for guidance.

LodgingReservationEntity

Атрибут Требование Описание Формат
Action Uri Необходимый

Deep Link to the entity in the provider app.

Note: You can use deep links for attribution. Refer to this FAQ

Ури
Заголовок Необходимый Title of the entity.

Открытый текст. For example, "Your Stay from Dec 12th"

Recommended text size: Max 50 chars

Check-in Time Необходимый The epoch timestamp in milliseconds that represents the check in time for the reservation. Epoch timestamp in milliseconds
Время выезда Необходимый The epoch timestamp in milliseconds that represents the check out time for the reservation. Epoch timestamp in milliseconds
Location - Country Необходимый The country in which the lodging is located.

Открытый текст

Recommended text size: max ~20 chars

Location - City Необходимый The city in which the lodging is located.

Открытый текст

Recommended text size: max ~20 chars

Location - Display Address Необходимый The address of the lodging that will be displayed to the user.

Открытый текст

Recommended text size: max ~20 chars

Location - Street Address Необязательный The street address (if applicable) of the lodging.

Открытый текст

Recommended text size: max ~20 chars

Location - State Необязательный The state or province (if applicable) in which the lodging is located.

Открытый текст

Recommended text size: max ~20 chars

Location - Zip code Необязательный The zip code (if applicable) of the lodging.

Открытый текст

Recommended text size: max ~20 chars

Location - Neighborhood Необязательный The neighborhood (if applicable) of the lodging.

Открытый текст

Recommended text size: max ~20 chars

Poster images Необязательный

We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9

Note: If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image

See Image Specifications for guidance.
Описание Необязательный

A single paragraph of text to describe the entity.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size: 180 chars

Subtitle list Необязательный

Up to 3 subtitles, with each subtitle a single line of text.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size for each subtitle: max 50 chars

Reservation ID Необязательный The reservation ID for the lodging reservation. Открытый текст
Rating - Max value Необязательный

The maximum value of the rating scale.

Must be provided if current value of rating is also provided.

Number >= 0.0
Rating - Current value Необязательный

The current value of the rating scale.

Must be provided if maximum value of rating is also provided.

Number >= 0.0
Rating - Count Необязательный

The count of the ratings for the lodging.

Note: Provide this field if your app wants to control how this is displayed to the users. Provide the concise string that can be displayed to the user. For example, if the count is 1,000,000, consider using abbreviations like 1M, so that it won't be truncated on smaller display sizes.

Нить
Rating - Count Value Необязательный

The count of the ratings for the lodging.

Note: Provide this field if you don't want to handle the display abbreviation logic yourself. If both Count and Count Value are present, we will use the Count to display to users

Длинный
Price - CurrentPrice Conditionally required

The current price of the lodging.

Must be provided if strikethrough price is provided.

Открытый текст
Price - StrikethroughPrice Необязательный The original price of the lodging, which is be struck-through in the UI. Открытый текст
Price Callout Необязательный Price callout to feature a promo, event, member discount, if available.

Открытый текст

Recommended text size: under 45 chars (Text that is too long may show ellipses)

TransportationReservationEntity

Атрибут Требование Описание Формат
Action Uri Необходимый

Deep Link to the entity in the provider app.

Note: You can use deep links for attribution. Refer to this FAQ

Ури
Заголовок Необходимый Title of the entity.

Открытый текст. For example, "SFO to SAN"

Recommended text size: Max 50 chars

Transportation Type Необходимый The mode/type of transportation for the reservation. Enum: FLIGHT, TRAIN, BUS, or FERRY
Время отправления Необходимый The epoch timestamp in milliseconds that represents the departure time. Epoch timestamp in milliseconds
Время прибытия Необходимый The epoch timestamp in milliseconds that represents the arrival time. Epoch timestamp in milliseconds
Departure Location - Country Необязательный The country of departure.

Открытый текст

Recommended text size: max ~20 chars

Departure Location - City Необязательный The city of departure.

Открытый текст

Recommended text size: max ~20 chars

Departure Location - Display Address Необязательный The location of departure that will be displayed to the user.

Открытый текст

Recommended text size: max ~20 chars

Departure Location - Street Address Необязательный The street address (if applicable) of the departure location.

Открытый текст

Recommended text size: max ~20 chars

Departure Location - State Необязательный The state or province (if applicable) of the departure location.

Открытый текст

Recommended text size: max ~20 chars

Departure Location - Zip code Необязательный The zip code (if applicable) of the departure location.

Открытый текст

Recommended text size: max ~20 chars

Departure Location - Neighborhood Необязательный The neighborhood (if applicable) of the departure location.

Открытый текст

Recommended text size: max ~20 chars

Arrival Location - Country Необязательный The country of arrival.

Открытый текст

Recommended text size: max ~20 chars

Arrival Location - City Необязательный The city of arrival.

Открытый текст

Recommended text size: max ~20 chars

Arrival Location - Display Address Необязательный The location of arrival that will be displayed to the user.

Открытый текст

Recommended text size: max ~20 chars

Arrival Location - Street Address Необязательный The street address (if applicable) of the arrival location.

Открытый текст

Recommended text size: max ~20 chars

Arrival Location - State Необязательный The state or province (if applicable) of the arrival location.

Открытый текст

Recommended text size: max ~20 chars

Arrival Location - Zip code Необязательный The zip code (if applicable) of the arrival location.

Открытый текст

Recommended text size: max ~20 chars

Arrival Location - Neighborhood Необязательный The neighborhood (if applicable) of the arrival location.

Открытый текст

Recommended text size: max ~20 chars

Service Provider - Name Необязательный

The name of the service provider.

Note: Either text or image is required for the service provider.

Открытый текст. For example, Airline name
Service Provider - Image Необязательный

The logo/image of the service provider.

Note: Either text or image is required for the service provider.

See Image Specifications for guidance.
Poster images Необязательный

We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9

See Image Specifications for guidance.
Описание Необязательный

A single paragraph of text to describe the entity.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size: 180 chars

Subtitle list Необязательный

Up to 3 subtitles, with each subtitle a single line of text.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size for each subtitle: max 50 chars

Reservation ID Необязательный The reservation ID for the transportation reservation. Открытый текст
Price - CurrentPrice Conditionally required

The current price of the reservation.

Must be provided if strikethrough price is provided.

Открытый текст
Price - StrikethroughPrice Необязательный The original price of the reservation, which is be struck-through in the UI. Открытый текст
Price Callout Необязательный Price callout to feature a promo, event, member discount, if available.

Открытый текст

Recommended text size: under 45 chars (Text that is too long may show ellipses)

Transportation Number Необходимый The flight number, bus number, train number, or ferry/cruise number. Открытый текст
Время посадки Необходимый The epoch timestamp that represents the boarding time for the reservation (if applicable) Epoch timestamp in milliseconds

VehicleRentalReservationEntity

Атрибут Требование Описание Формат
Action Uri Необходимый

Deep Link to the entity in the provider app.

Note: You can use deep links for attribution. Refer to this FAQ

Ури
Заголовок Необходимый Title of the entity.

Открытый текст. For example, "Avis Union Square SF"

Recommended text size: Max 50 chars

Время забирать Необходимый The epoch timestamp that represents the pick up time for the reservation. Epoch timestamp in milliseconds
Время возврата Необязательный The epoch timestamp that represents the check out time for the reservation. Epoch timestamp in milliseconds
Pickup Address - Country Необязательный The country of the pickup location.

Открытый текст

Recommended text size: max ~20 chars

Pickup Address - City Необязательный The city of the pickup location.

Открытый текст

Recommended text size: max ~20 chars

Pickup Address - Display Address Необязательный The pickup location that will be displayed to the user.

Открытый текст

Recommended text size: max ~20 chars

Pickup Address - Street Address Необязательный The street address (if applicable) of the pickup location.

Открытый текст

Recommended text size: max ~20 chars

Pickup Address - State Необязательный The state or province (if applicable) of the pickup location.

Открытый текст

Recommended text size: max ~20 chars

Pickup Address - Zip code Необязательный The zip code (if applicable) of the pickup location.

Открытый текст

Recommended text size: max ~20 chars

Pickup Address - Neighborhood Необязательный The neighborhood (if applicable) of the pickup location.

Открытый текст

Recommended text size: max ~20 chars

Return Address - Country Необязательный The country of return location.

Открытый текст

Recommended text size: max ~20 chars

Return Address - City Необязательный The city of return location.

Открытый текст

Recommended text size: max ~20 chars

Return Address - Display Address Необязательный The return location that will be displayed to the user.

Открытый текст

Recommended text size: max ~20 chars

Return Address - Street Address Необязательный The street address (if applicable) of the return location.

Открытый текст

Recommended text size: max ~20 chars

Return Address - State Необязательный The state or province (if applicable) of the return location.

Открытый текст

Recommended text size: max ~20 chars

Return Address - Zip code Необязательный The zip code (if applicable) of the return location.

Открытый текст

Recommended text size: max ~20 chars

Return Address - Neighborhood Необязательный The neighborhood (if applicable) of the return location.

Открытый текст

Recommended text size: max ~20 chars

Service Provider - Name Необязательный

The name of the service provider.

Note: Either text or image is required for the service provider.

Открытый текст. For example, "Avis Car Rental"
Service Provider - Image Необязательный

The logo/image of the service provider.

Note: Either text or image is required for the service provider.

See Image Specifications for guidance.
Poster images Необязательный

We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9

See Image Specifications for guidance.
Описание Необязательный

A single paragraph of text to describe the entity.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size: 180 chars

Subtitle list Необязательный

Up to 3 subtitles, with each subtitle a single line of text.

Note: Either description or subtitle list will be displayed to the user, not both.

Открытый текст

Recommended text size for each subtitle: max 50 chars

Confirmation ID Необязательный The confirmation ID for the vehicle rental reservation. Открытый текст
Price - CurrentPrice Conditionally required

The current price of the reservation.

Must be provided if strikethrough price is provided.

Открытый текст
Price - StrikethroughPrice Необязательный The original price of the reservation, which is be struck-through in the UI. Открытый текст
Price Callout Необязательный Price callout to feature a promo, event, member discount, if available.

Открытый текст

Recommended text size: under 45 chars (Text that is too long may show ellipses)

Характеристики изображения

Required specifications for image assets are listed in this table:

Соотношение сторон Minimum pixels Recommended pixels

Square (1x1)

Preferred

300x300 1200x1200
Landscape (1.91x1) 600x314 1200x628
Portrait (4x5) 480x600 960x1200

The images are required to be hosted on public CDNs so that Google can access them.

Форматы файлов

PNG, JPG, static GIF, WebP

Maximum file size

5120 KB

Additional recommendations

  • Image safe area: Put your important content in the center 80% of the image.
  • Use a transparent background so that the image can be properly displayed in Dark and Light theme settings.

Категория контента

The content category allows apps to publish content belonging to multiple categories. This maps the content with some of the predefined categories namely:

  • TYPE_EDUCATION
  • TYPE_SPORTS
  • TYPE_MOVIES_AND_TV_SHOWS
  • TYPE_BOOKS
  • TYPE_AUDIOBOOKS
  • TYPE_MUSIC
  • TYPE_DIGITAL_GAMES
  • TYPE_TRAVEL_AND_LOCAL
  • TYPE_HOME_AND_AUTO
  • TYPE_BUSINESS
  • TYPE_NEWS
  • TYPE_FOOD_AND_DRINK
  • TYPE_SHOPPING
  • TYPE_HEALTH_AND_FITENESS
  • TYPE_MEDICAL
  • TYPE_PARENTING
  • TYPE_DATING

The images are required to be hosted on public CDNs so that Google can access them.

Guidelines to use the content categories

  1. Some entities like ArticleEntity and GenericFeaturedEntity are eligible to use any of the content categories. For other entities like EventEntity , EventReservationEntity , PointOfInterestEntity , only a subset of these categories are eligible. Check the list of categories eligible for an entity type before populating the list.
  2. Use the specific entity type for some content categories over a combination of the Generic entities and the ContentCategory:

    • TYPE_MOVIES_AND_TV_SHOWS - Check out the entities from Watch integration guide before using the generic entities.
    • TYPE_BOOKS - Check out the EbookEntity before using the generic entities.
    • TYPE_AUDIOBOOKS - Check out AudiobookEntity before using the generic entities.
    • TYPE_SHOPPING - Check out ShoppingEntity before using the generic entities.
    • TYPE_FOOD_AND_DRINK - Check out entities from Food Integration guide before using the generic entities.
  3. The ContentCategory field is optional and should be left blank if the content doesn't belong to any of the categories mentioned earlier.

  4. In case multiple content categories are provided, provide them in the order of relevance to the content with the most relevant content category placed first in the list.

Step 2: Provide Cluster data

It is recommended to have the content publish job executed in the background (for example, using WorkManager ) and scheduled on a regular basis or on an event basis (for example, every time the user opens the app or when the user just added something to their cart).

AppEngagePublishClient is responsible for publishing clusters.

There are following APIs to publish clusters in the client:

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishContinuationCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteContinuationCluster
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

This API is used to check if the service is available for integration and whether the content can be presented on the device.

Котлин


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.
    }
}

Джава


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

This API is used to publish a list of RecommendationCluster objects.

Котлин


client.publishRecommendationClusters(
      PublishRecommendationClustersRequest.Builder()
        .addRecommendationCluster(
          RecommendationCluster.Builder()
            .addEntity(entity1)
            .addEntity(entity2)
            .setTitle("Top Picks For You")
            .build()
        )
        .build()
    )

Джава


client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Top Picks For You")
                        .build())
                .build());

When the service receives the request, the following actions take place within one transaction:

  • Existing RecommendationCluster data from the developer partner is removed.
  • Data from the request is parsed and stored in the updated Recommendation Cluster.

In case of an error, the entire request is rejected and the existing state is maintained.

publishFeaturedCluster

This API is used to publish a list of FeaturedCluster objects.

Котлин


client.publishFeaturedCluster(
    PublishFeaturedClusterRequest.Builder()
      .setFeaturedCluster(
        FeaturedCluster.Builder()
          .addEntity(entity1)
          .addEntity(entity2)
          .build())
      .build())

Джава


client.publishFeaturedCluster(
            new PublishFeaturedClustersRequest.Builder()
                .addFeaturedCluster(
                    new FeaturedCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build());

When the service receives the request, the following actions take place within one transaction:

  • Existing FeaturedCluster data from the developer partner is removed.
  • Data from the request is parsed and stored in the updated Featured Cluster.

In case of an error, the entire request is rejected and the existing state is maintained.

publishContinuationCluster

This API is used to publish a ContinuationCluster object.

Котлин


client.publishContinuationCluster(
    PublishContinuationClusterRequest.Builder()
      .setContinuationCluster(
        ContinuationCluster.Builder()
          .addEntity(entity1)
          .addEntity(entity2)
          .build())
      .build())

Джава


client.publishContinuationCluster(
            new PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    new ContinuationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build());

When the service receives the request, the following actions take place within one transaction:

  • Existing ContinuationCluster data from the developer partner is removed.
  • Data from the request is parsed and stored in the updated Continuation Cluster.

In case of an error, the entire request is rejected and the existing state is maintained.

publishUserAccountManagementRequest

This API is used to publish a Sign In card . The signin action directs users to the app's sign in page so that the app can publish content (or provide more personalized content)

The following metadata is part of the Sign In Card -

Атрибут Требование Описание
Action Uri Необходимый Deeplink to Action (ie navigates to app sign in page)
Изображение Optional - If not provided, Title must be provided

Image Shown on the Card

16x9 aspect ratio images with a resolution of 1264x712

Заголовок Optional - If not provided, Image must be provided Title on the Card
Текст действия Необязательный Text Shown on the CTA (ie Sign in)
Subtitle Необязательный Optional Subtitle on the Card

Котлин


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());

Джава


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());

When the service receives the request, the following actions take place within one transaction:

  • Existing UserAccountManagementCluster data from the developer partner is removed.
  • Data from the request is parsed and stored in the updated UserAccountManagementCluster Cluster.

In case of an error, the entire request is rejected and the existing state is maintained.

updatePublishStatus

If for any internal business reason, none of the clusters is published, we strongly recommend updating the publish status using the updatePublishStatus API. This is important because :

  • Providing the status in all scenarios, even when the content is published (STATUS == PUBLISHED), is critical to populate dashboards that use this explicit status to convey the health and other metrics of your integration.
  • If no content is published but the integration status isn't broken (STATUS == NOT_PUBLISHED), Google can avoid triggering alerts in the app health dashboards. It confirms that content is not published due to an expected situation from the provider's standpoint.
  • It helps developers provide insights into when the data is published versus not.
  • Google may use the status codes to nudge the user to do certain actions in the app so they can see the app content or overcome it.

The list of eligible publish status codes are :

// 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

If the content is not published due to a user not logged in, Google would recommend publishing the Sign In Card. If for any reason providers are not able to publish the Sign In Card then we recommend calling the updatePublishStatus API with the status code NOT_PUBLISHED_REQUIRES_SIGN_IN

Котлин


client.updatePublishStatus(
   PublishStatusRequest.Builder()
     .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
     .build())

Джава


client.updatePublishStatus(
    new PublishStatusRequest.Builder()
        .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
        .build());

deleteRecommendationClusters

This API is used to delete the content of Recommendation Clusters.

Котлин


client.deleteRecommendationClusters()

Джава


client.deleteRecommendationClusters();

When the service receives the request, it removes the existing data from the Recommendation Clusters. In case of an error, the entire request is rejected and the existing state is maintained.

deleteFeaturedCluster

This API is used to delete the content of Featured Cluster.

Котлин


client.deleteFeaturedCluster()

Джава


client.deleteFeaturedCluster();

When the service receives the request, it removes the existing data from the Featured Cluster. In case of an error, the entire request is rejected and the existing state is maintained.

deleteContinuationCluster

This API is used to delete the content of Continuation Cluster.

Котлин


client.deleteContinuationCluster()

Джава


client.deleteContinuationCluster();

When the service receives the request, it removes the existing data from the Continuation Cluster. In case of an error, the entire request is rejected and the existing state is maintained.

deleteUserManagementCluster

This API is used to delete the content of UserAccountManagement Cluster.

Котлин


client.deleteUserManagementCluster()

Джава


client.deleteUserManagementCluster();

When the service receives the request, it removes the existing data from the UserAccountManagement Cluster. In case of an error, the entire request is rejected and the existing state is maintained.

deleteClusters

This API is used to delete the content of a given cluster type.

Котлин


client.deleteClusters(
    DeleteClustersRequest.Builder()
      .addClusterType(ClusterType.TYPE_CONTINUATION)
      .addClusterType(ClusterType.TYPE_FEATURED)
      .addClusterType(ClusterType.TYPE_RECOMMENDATION)
      .build())

Джава


client.deleteClusters(
            new DeleteClustersRequest.Builder()
                .addClusterType(ClusterType.TYPE_CONTINUATION)
                .addClusterType(ClusterType.TYPE_FEATURED)
                .addClusterType(ClusterType.TYPE_RECOMMENDATION)
                .build());

When the service receives the request, it removes the existing data from all clusters matching the specified cluster types. Clients can choose to pass one or many cluster types. In case of an error, the entire request is rejected and the existing state is maintained.

Обработка ошибок

It is highly recommended to listen to the task result from the publish APIs such that a follow-up action can be taken to recover and resubmit an successful task.

Котлин


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
            }
          }
        }
      }

Джава


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
                    }
                  }
                }
              });

The error is returned as an AppEngageException with the cause included as an error code.

Код ошибки Примечание
SERVICE_NOT_FOUND The service is not available on the given device.
SERVICE_NOT_AVAILABLE The service is available on the given device, but it is not available at the time of the call (for example, it is explicitly disabled).
SERVICE_CALL_EXECUTION_FAILURE The task execution failed due to threading issues. In this case, it can be retried.
SERVICE_CALL_PERMISSION_DENIED The caller is not allowed to make the service call.
SERVICE_CALL_INVALID_ARGUMENT The request contains invalid data (for example, more than the allowed number of clusters).
SERVICE_CALL_INTERNAL There is an error on the service side.
SERVICE_CALL_RESOURCE_EXHAUSTED The service call is made too frequently.

Step 3: Handle broadcast intents

In addition to making publish content API calls through a job, it is also required to set up a BroadcastReceiver to receive the request for a content publish.

The goal of broadcast intents is mainly for app reactivation and forcing data sync. Broadcast intents are not designed to be sent very frequently. It is only triggered when the Engage Service determines the content might be stale (for example, a week old). That way, there is more confidence that the user can have a fresh content experience, even if the application has not been executed for a long period of time.

The BroadcastReceiver must be set up in the following two ways:

  • Dynamically register an instance of the BroadcastReceiver class using Context.registerReceiver() . This enables communication from applications that are still live in memory.

Котлин

class AppEngageBroadcastReceiver : BroadcastReceiver(){
  // Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
  // is received
  // Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
  // Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
  // received
}

fun registerBroadcastReceivers(context: Context){
  var  context = context
  context = context.applicationContext

// Register Recommendation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_RECOMMENDATION))

// Register Featured Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_FEATURED))

// Register Continuation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION))
}

Джава

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 continuation cluster publish when PUBLISH_CONTINUATION 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));

// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED));

// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION));

}
  • Statically declare an implementation with the <receiver> tag in your AndroidManifest.xml file. This allows the application to receive broadcast intents when it is not running, and also allows the application to publish the content.
<application>
   <receiver
      android:name=".AppEngageBroadcastReceiver"
      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.PUBLISH_CONTINUATION" />
      </intent-filter>
   </receiver>
</application>

The following intents is sent by the service:

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION It is recommended to start a publishRecommendationClusters call when receiving this intent.
  • com.google.android.engage.action.PUBLISH_FEATURED It is recommended to start a publishFeaturedCluster call when receiving this intent.
  • com.google.android.engage.action.PUBLISH_CONTINUATION It is recommended to start a publishContinuationCluster call when receiving this intent.

Integration workflow

For a step-by-step guide on verifying your integration after it is complete, see Engage developer integration workflow .

Часто задаваемые вопросы

See Engage SDK Frequently Asked Questions for FAQs.

Контакт

Contact engage-developers@google.com if there are any questions during the integration process.

Следующие шаги

After completing this integration, your next steps are as follows:

  • Send an email to engage-developers@google.com and attach your integrated APK that is ready for testing by Google.
  • Google performs a verification and reviews internally to make sure the integration works as expected. If changes are needed, Google contacts you with any necessary details.
  • When testing is complete and no changes are needed, Google contacts you to notify you that you can start publishing the updated and integrated APK to the Play Store.
  • After Google has confirmed that your updated APK has been published to the Play Store, your Recommendation , Featured , and Continuation clusters may be published and visible to users.