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

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

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

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

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

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

Рисунок 12: Пользовательский интерфейс, отображающий отдельную карточку 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.12'
}
Краткое содержание
Данная архитектура основана на реализации привязанного сервиса .
Для различных типов кластеров объем данных, которые может публиковать клиент, ограничен следующими лимитами:
| Тип кластера | Границы кластера | Минимальное количество объектов в кластере | Максимальное количество объектов в кластере. |
|---|---|---|---|
| Кластер(ы) рекомендаций | Максимум 7 | По крайней мере 1 | Не более 50 ( ArticleEntity , PersonEntity или EventEntity ) |
| Кластер продолжения | Не более 1 | По крайней мере 1 | Максимум 20 ( ArticleEntity или EventReservationEntity ) |
| Выделенный кластер | Не более 1 | По крайней мере 1 | Максимум 20 ( GenericFeaturedEntity ) |
Шаг 1: Предоставьте данные сущности.
В SDK определены различные сущности для представления каждого типа элементов. Для категории «Здоровье и фитнес» мы поддерживаем следующие сущности:
-
GenericFeaturedEntity -
ArticleEntity -
PersonEntity -
EventEntity -
EventReservationEntity
Приведенные ниже диаграммы описывают доступные характеристики и требования для каждого типа.
GenericFeaturedEntity
| Атрибут | Требование | Описание | Формат |
|---|---|---|---|
| Action Uri | Необходимый | Прямая ссылка на сущность в приложении поставщика. Примечание: Для указания источника можно использовать прямые ссылки. См. этот раздел часто задаваемых вопросов. | Ури |
| Изображения для плакатов | Необходимый | При предоставлении нескольких изображений будет показано только одно. Рекомендуемое соотношение сторон — 16:9. Примечание: Если предоставляется бейдж, пожалуйста, обеспечьте безопасное расстояние в 24 dps как вверху, так и внизу изображения. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Заголовок | Необязательный | Название организации. | Свободный текст Рекомендуемый размер текста: 50 символов. |
| Описание | Необязательный | Один абзац текста, описывающий объект. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста: 180 символов. |
| список субтитров | Необязательный | До 3 субтитров, каждый из которых представляет собой отдельную строку текста. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста для каждого субтитра: максимум 50 символов. |
| Значки | Необязательный | Каждый значок представляет собой либо произвольный текст (максимум 15 символов), либо небольшое изображение. Специальное оформление пользовательского интерфейса поверх изображения/видео, например, в виде наложения значка поверх изображения.
| |
| Значок - Текст | Необязательный | Название для значка Примечание: для значка требуется либо текст, либо изображение. | Свободный текст Рекомендуемый размер текста: максимум 15 символов. |
| Значок - Изображение | Необязательный | Маленькое изображение Особое оформление пользовательского интерфейса, например, наложение значка на миниатюру изображения/видео. Примечание: для значка требуется либо текст, либо изображение. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Категории контента | Необязательный | Опишите категорию контента в сущности. | Список перечислений См. раздел «Категории контента» для получения рекомендаций. |
ArticleEntity
| Атрибут | Требование | Описание | Формат |
|---|---|---|---|
| Action Uri | Необходимый | Прямая ссылка на сущность в приложении поставщика. Примечание: Для указания источника можно использовать прямые ссылки. См. этот раздел часто задаваемых вопросов. | Ури |
| Заголовок | Необходимый | Название организации. | Свободный текст Рекомендуемый размер текста: максимум 50 символов. |
| Изображения для плакатов | Необязательный | При предоставлении нескольких изображений будет показано только одно. Рекомендуемое соотношение сторон — 16:9. Примечание: Настоятельно рекомендуется использовать изображение. Если вы предоставляете бейдж, пожалуйста, обеспечьте безопасное пространство в 24 dps как вверху, так и внизу изображения. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Источник - Название | Необязательный | Имя автора, организации или журналиста. | Свободный текст Рекомендуемый размер текста: менее 25 символов. |
| Источник - Изображение | Необязательный | Изображение источника, например, автора, организации, репортера. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Описание | Необязательный | Один абзац текста, описывающий объект. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста: 180 символов. |
| список субтитров | Необязательный | До 3 субтитров, каждый из которых представляет собой отдельную строку текста. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста для каждого субтитра: максимум 50 символов. |
| Значки | Необязательный | Каждый значок представляет собой либо произвольный текст (максимум 15 символов), либо небольшое изображение. Специальное оформление пользовательского интерфейса поверх изображения/видео, например, в виде наложения значка поверх изображения.
| |
| Значок - Текст | Необязательный | Название для значка Примечание: для значка требуется либо текст, либо изображение. | Свободный текст Рекомендуемый размер текста: максимум 15 символов. |
| Значок - Изображение | Необязательный | Маленькое изображение Особое оформление пользовательского интерфейса, например, наложение значка на миниатюру изображения/видео. Примечание: для значка требуется либо текст, либо изображение. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Время публикации контента | Необязательный | Это метка времени в миллисекундах, соответствующая дате публикации/обновления контента в приложении. | Временная метка эпохи в миллисекундах |
| Последнее время помолвки | Требуется при определенных условиях | Временная метка в миллисекундах, отражающая момент последнего взаимодействия пользователя с данным объектом. Примечание: это поле обязательно для заполнения, если данная сущность является частью кластера продолжения. | Временная метка эпохи в миллисекундах |
| Процент выполнения | Требуется при определенных условиях | Процент от общего объема контента, потребленного пользователем на данный момент. Примечание: это поле обязательно для заполнения, если данная сущность является частью кластера продолжения. | Целочисленное значение в диапазоне от 0 до 100 включительно. |
| Категории контента | Необязательный | Опишите категорию контента в сущности. | Список перечислений См. раздел «Категории контента» для получения рекомендаций. |
PersonEntity
| Атрибут | Требование | Описание | Формат |
|---|---|---|---|
| Action Uri | Необходимый | Прямая ссылка на сущность в приложении поставщика. Примечание: Для указания источника можно использовать прямые ссылки. См. этот раздел часто задаваемых вопросов. | Ури |
| Профиль - Имя | Необходимый | Имя профиля, идентификатор или никнейм, например, "John Doe", "@TeamPixel" и т. д. | Нить Рекомендуемый размер текста: максимум 50 символов. |
| Профиль - Аватар | Необходимый | Фотография профиля или аватар пользователя. Примечание: Изображение должно быть квадратным, в масштабе 1:1. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Профиль - Дополнительный текст | Необязательный | Свободный текст, например, никнейм в профиле. | Свободный текст Рекомендуемый размер текста: максимум 15 символов. |
| Профиль - Дополнительное изображение | Необязательный | Небольшое изображение, похожее на значок подтверждения. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Изображение в заголовке | Необязательный | При предоставлении нескольких изображений будет показано только одно. Рекомендуемое соотношение сторон — 16:9. Примечание: Настоятельно рекомендуется использовать изображение. Если вы предоставляете бейдж, пожалуйста, обеспечьте безопасное пространство в 24 dps как вверху, так и внизу изображения. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Популярность - Количество | Необязательный | Укажите количество подписчиков или показатель популярности, например, "3,7 млн". Примечание: Если указаны и значение Count, и значение Count, будет использовано значение Count. | Нить Рекомендуемый размер текста: максимум 20 символов для количества символов и метки вместе взятых. |
| Популярность - значение количества | Необязательный | Количество подписчиков или показатель популярности. Примечание: укажите значение Count, если ваше приложение не хочет обрабатывать логику оптимизации больших чисел для разных размеров экрана. Если указаны и Count, и Count Value, будет использоваться Count. | Длинный |
| Популярность - Метка | Необязательный | Укажите, какой рейтинг используется. Например, «Лайки». | Нить Рекомендуемый размер текста: максимум 20 символов для количества символов и метки вместе взятых. |
| Популярность - Визуальная | Необязательный | Укажите, для чего предназначено это взаимодействие. Например: изображение со значком «Нравится», эмодзи. Можно предоставить более одного изображения, однако не все из них могут отображаться на всех форм-факторах. Примечание: Изображение должно быть квадратным, в масштабе 1:1. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Рейтинг - Максимальное значение | Необходимый | Максимальное значение шкалы оценок. Этот параметр необходимо указать, если также предоставлено текущее значение рейтинга. | Число >= 0,0 |
| Рейтинг - Текущая стоимость | Необходимый | Текущее значение рейтинговой шкалы. Этот параметр необходимо указать, если также указано максимальное значение рейтинга. | Число >= 0,0 |
| Рейтинг - Количество | Необязательный | Количество оценок для данной организации. Примечание: Укажите это поле, если ваше приложение контролирует способ отображения количества для пользователей. Используйте краткую строку. Например, если количество равно 1 000 000, рассмотрите возможность использования сокращения, например, 1M, чтобы количество не обрезалось на экранах меньшего размера. | Нить |
| Рейтинг - Количество значений | Необязательный | Количество оценок для данной организации. Примечание: Укажите это поле, если вы не обрабатываете логику отображения сокращений самостоятельно. Если присутствуют поля «Количество» и «Значение количества», пользователям будет отображаться «Количество». | Длинный |
| Местоположение - Страна | Необязательный | Страна, в которой находится или работает данное лицо. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Город | Необязательный | Город, в котором находится или работает данный человек. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Отображаемый адрес | Необязательный | Пользователю будет показан адрес, по которому находится или оказывает свои услуги данное лицо. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Уличный адрес | Необязательный | Адрес (если применимо), по которому находится или работает данное лицо. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Штат | Необязательный | Штат (если применимо), где находится или работает данное лицо. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - почтовый индекс | Необязательный | Почтовый индекс (если применимо), по которому находится или проходит службу данное лицо. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Район | Необязательный | Район (если применимо), где находится или работает данное лицо. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Значки | Необязательный | Каждый значок представляет собой либо произвольный текст (максимум 15 символов), либо небольшое изображение. | |
| Значок - Текст | Необязательный | Название для значка Примечание: для значка требуется либо текст, либо изображение. | Свободный текст Рекомендуемый размер текста: максимум 15 символов. |
| Значок - Изображение | Необязательный | Маленькое изображение Особое оформление пользовательского интерфейса, например, наложение значка на миниатюру изображения/видео. Примечание: для значка требуется либо текст, либо изображение. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Описание | Необязательный | Один абзац текста, описывающий объект. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста: 180 символов. |
| список субтитров | Необязательный | До 3 субтитров, каждый из которых представляет собой отдельную строку текста. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста для каждого субтитра: максимум 50 символов. |
| Категории контента | Необязательный | Опишите категорию контента в сущности. | Список соответствующих требованиям перечней
См. раздел «Категории контента» для получения рекомендаций. |
EventEntity
| Атрибут | Требование | Описание | Формат |
|---|---|---|---|
| Action Uri | Необходимый | Прямая ссылка на сущность в приложении поставщика. Примечание: Для указания источника можно использовать прямые ссылки. См. этот раздел часто задаваемых вопросов. | Ури |
| Заголовок | Необходимый | Название организации. | Нить Рекомендуемый размер текста: максимум 50 символов. |
| Время начала | Необходимый | Временная метка эпохи, когда ожидается начало события. Примечание: Данные будут представлены в миллисекундах. | Временная метка эпохи в миллисекундах |
| Режим событий | Необходимый | Поле для указания того, будет ли мероприятие виртуальным, очным или и тем, и другим. | Перечисление: ВИРТУАЛЬНЫЙ, ОЧНЫЙ или ГИБРИДНЫЙ формат |
| Изображения для плакатов | Необходимый | При предоставлении нескольких изображений будет показано только одно. Рекомендуемое соотношение сторон — 16:9. Примечание: Настоятельно рекомендуется использовать изображение. Если вы предоставляете бейдж, пожалуйста, обеспечьте безопасное пространство в 24 dps как вверху, так и внизу изображения. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Местоположение - Страна | Требуется при определенных условиях | Страна, в которой проходит мероприятие. Примечание: Это необходимо для мероприятий, проводимых в очном или гибридном формате. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Город | Требуется при определенных условиях | Город, в котором проходит мероприятие. Примечание: Это необходимо для мероприятий, проводимых в очном или гибридном формате. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Отображаемый адрес | Требуется при определенных условиях | Адрес или название места проведения мероприятия, которое должно быть отображено пользователю. Примечание: Это необходимо для мероприятий, проводимых в очном или гибридном формате. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Уличный адрес | Необязательный | Адрес (если имеется) места проведения мероприятия. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Штат | Необязательный | Штат или провинция (если применимо), в которой проводится мероприятие. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - почтовый индекс | Необязательный | Почтовый индекс (если применимо) места проведения мероприятия. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Район | Необязательный | Район (если применимо), в котором проводится мероприятие. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Конец времени | Необязательный | Временная метка эпохи, когда ожидается завершение события. Примечание: Данные будут представлены в миллисекундах. | Временная метка эпохи в миллисекундах |
| Описание | Необязательный | Один абзац текста, описывающий объект. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста: 180 символов. |
| список субтитров | Необязательный | До 3 субтитров, каждый из которых представляет собой отдельную строку текста. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста для каждого субтитра: максимум 50 символов. |
| Значки | Необязательный | Каждый значок представляет собой либо произвольный текст (максимум 15 символов), либо небольшое изображение. | |
| Значок - Текст | Необязательный | Название для значка Примечание: для значка требуется либо текст, либо изображение. | Свободный текст Рекомендуемый размер текста: максимум 15 символов. |
| Значок - Изображение | Необязательный | Маленькое изображение Особое оформление пользовательского интерфейса, например, наложение значка на миниатюру изображения/видео. Примечание: для значка требуется либо текст, либо изображение. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Цена - Текущая цена | Условно обязательно | Текущая цена билета/пропуска на мероприятие. Необходимо указать, если указана перечеркнутая цена. | Свободный текст |
| Цена - Зачеркнутая цена | Необязательный | Первоначальная цена билета/пропуска на мероприятие. | Свободный текст |
| Указание цены | Необязательный | Укажите цену, чтобы отобразить информацию о промоакции, мероприятии или скидке для участников, если таковая имеется. | Свободный текст Рекомендуемый размер текста: менее 45 символов (слишком длинный текст может содержать многоточие). |
| Категории контента | Необязательный | Опишите категорию контента в сущности. | Список соответствующих требованиям перечней
См. раздел «Категории контента» для получения рекомендаций. |
EventReservationEntity
| Атрибут | Требование | Описание | Формат |
|---|---|---|---|
| Action Uri | Необходимый | Прямая ссылка на сущность в приложении поставщика. Примечание: Для указания источника можно использовать прямые ссылки. См. этот раздел часто задаваемых вопросов. | Ури |
| Заголовок | Необходимый | Название организации. | Нить Рекомендуемый размер текста: максимум 50 символов. |
| Время начала | Необходимый | Временная метка эпохи, когда ожидается начало события. Примечание: Данные будут представлены в миллисекундах. | Временная метка эпохи в миллисекундах |
| Режим событий | Необходимый | Поле для указания того, будет ли мероприятие виртуальным, очным или и тем, и другим. | Перечисление: ВИРТУАЛЬНЫЙ, ОЧНЫЙ или ГИБРИДНЫЙ формат |
| Местоположение - Страна | Требуется при определенных условиях | Страна, в которой проходит мероприятие. Примечание: Это необходимо для мероприятий, проводимых в очном или гибридном формате. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Город | Требуется при определенных условиях | Город, в котором проходит мероприятие. Примечание: Это необходимо для мероприятий, проводимых в очном или гибридном формате. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Отображаемый адрес | Требуется при определенных условиях | Адрес или название места проведения мероприятия, которое должно быть отображено пользователю. Примечание: Это необходимо для мероприятий, проводимых в очном или гибридном формате. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Уличный адрес | Необязательный | Адрес (если имеется) места проведения мероприятия. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Штат | Необязательный | Штат или провинция (если применимо), в которой проводится мероприятие. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - почтовый индекс | Необязательный | Почтовый индекс (если применимо) места проведения мероприятия. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Местоположение - Район | Необязательный | Район (если применимо), в котором проводится мероприятие. | Свободный текст Рекомендуемый размер текста: максимум ~20 символов. |
| Изображения для плакатов | Необязательный | При предоставлении нескольких изображений будет показано только одно. Рекомендуемое соотношение сторон — 16:9. Примечание: Настоятельно рекомендуется использовать изображение. Если вы предоставляете бейдж, пожалуйста, обеспечьте безопасное пространство в 24 dps как вверху, так и внизу изображения. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Конец времени | Необязательный | Временная метка эпохи, когда ожидается завершение события. Примечание: Данные будут представлены в миллисекундах. | Временная метка эпохи в миллисекундах |
| Поставщик услуг - Название | Необязательный | Название поставщика услуг. Примечание: Для предоставления услуг поставщику требуется либо текст, либо изображение. | Свободный текст. Например, название организатора мероприятия/тура. |
| Поставщик услуг - Изображение | Необязательный | Логотип/изображение поставщика услуг. Примечание: Для предоставления услуг поставщику требуется либо текст, либо изображение. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Описание | Необязательный | Один абзац текста, описывающий объект. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста: 180 символов. |
| список субтитров | Необязательный | До 3 субтитров, каждый из которых представляет собой отдельную строку текста. Примечание: Пользователю будет отображаться либо описание, либо список подзаголовков, но не оба одновременно. | Свободный текст Рекомендуемый размер текста для каждого субтитра: максимум 50 символов. |
| Значки | Необязательный | Каждый значок представляет собой либо произвольный текст (максимум 15 символов), либо небольшое изображение. | |
| Значок - Текст | Необязательный | Название для значка Примечание: для значка требуется либо текст, либо изображение. | Свободный текст Рекомендуемый размер текста: максимум 15 символов. |
| Значок - Изображение | Необязательный | Маленькое изображение Особое оформление пользовательского интерфейса, например, наложение значка на миниатюру изображения/видео. Примечание: для значка требуется либо текст, либо изображение. | См. раздел «Технические характеристики изображения» для получения дополнительной информации. |
| Идентификатор бронирования | Необязательный | Идентификатор бронирования для подтверждения участия в мероприятии. | Свободный текст |
| Цена - Текущая цена | Условно обязательно | Текущая цена билета/пропуска на мероприятие. Необходимо указать, если указана перечеркнутая цена. | Свободный текст |
| Цена - Зачеркнутая цена | Необязательный | Первоначальная цена билета/пропуска на мероприятие. | Свободный текст |
| Указание цены | Необязательный | Укажите цену, чтобы отобразить информацию о промоакции, мероприятии или скидке для участников, если таковая имеется. | Свободный текст Рекомендуемый размер текста: менее 45 символов (слишком длинный текст может содержать многоточие). |
| Рейтинг - Максимальное значение | Необязательный | Максимальное значение шкалы оценок. Этот параметр необходимо указать, если также предоставлено текущее значение рейтинга. | Число >= 0,0 |
| Рейтинг - Текущая стоимость | Необязательный | Текущее значение рейтинговой шкалы. Этот параметр необходимо указать, если также указано максимальное значение рейтинга. | Число >= 0,0 |
| Рейтинг - Количество | Необязательный | Количество оценок мероприятия. Примечание: Укажите это поле, если ваше приложение хочет контролировать способ отображения этой информации пользователям. Пожалуйста, предоставьте краткую строку, которая может быть показана пользователю. Например, если количество равно 1 000 000, используйте сокращения, такие как 1M, чтобы оно не обрезалось на экранах меньшего размера. | Нить |
| Рейтинг - Количество значений | Необязательный | Количество оценок мероприятия. Примечание: Укажите это поле, если вы не хотите самостоятельно обрабатывать логику отображения сокращений. Если присутствуют поля «Количество» и «Значение количества», мы будем использовать значение «Количество» для отображения пользователям. | Длинный |
| Категории контента | Необязательный | Опишите категорию контента в сущности. | Список соответствующих требованиям перечней
См. раздел «Категории контента» для получения рекомендаций. |
Технические характеристики изображения
В этой таблице перечислены необходимые спецификации для графических ресурсов:
| Соотношение сторон | Минимальное количество пикселей | Рекомендуемые пиксели |
|---|---|---|
Квадрат (1х1) Предпочтительный | 300x300 | 1200x1200 |
| Пейзаж (1,91х1) | 600x314 | 1200x628 |
| Портрет (4x5) | 480x600 | 960x1200 |
Изображения необходимо размещать на общедоступных CDN-сетях, чтобы Google мог получить к ним доступ.
Форматы файлов
PNG, JPG, статический 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 мог получить к ним доступ.
Рекомендации по использованию категорий контента
- Некоторые сущности, такие как ArticleEntity и GenericFeaturedEntity, могут использовать любые категории контента. Для других сущностей, таких как EventEntity , EventReservationEntity , PersonEntity , подходит только подмножество этих категорий. Перед заполнением списка проверьте список категорий, подходящих для данного типа сущности.
Для некоторых категорий контента используйте определенный тип сущности вместо комбинации универсальных сущностей и ContentCategory:
- TYPE_MOVIES_AND_TV_SHOWS — Перед использованием универсальных сущностей ознакомьтесь с описанием сущностей в руководстве по интеграции Watch .
- TYPE_BOOKS — Перед использованием универсальных сущностей проверьте сущность EbookEntity .
- TYPE_AUDIOBOOKS - Перед использованием универсальных сущностей проверьте библиотеку AudiobookEntity .
- TYPE_SHOPPING — Перед использованием универсальных сущностей проверьте функциональность ShoppingEntity .
- TYPE_FOOD_AND_DRINK — Перед использованием универсальных сущностей ознакомьтесь с описанием сущностей из руководства по интеграции с продуктами питания .
Поле ContentCategory является необязательным и должно оставаться пустым, если контент не относится ни к одной из упомянутых ранее категорий.
Если указано несколько категорий контента, расположите их в порядке релевантности контенту, при этом наиболее релевантная категория должна быть первой в списке.
Шаг 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.
}
}
Java
client.isServiceAvailable().addOnCompleteListener(task - > {
if (task.isSuccessful()) {
// Handle success
if(task.getResult()) {
// Service is available on the device, proceed with content publish
// calls.
} else {
// Service is not available, no further action is needed.
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
});
publishRecommendationClusters
Этот API используется для публикации списка объектов RecommendationCluster .
Котлин
client.publishRecommendationClusters(
PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Top Picks For You")
.build()
)
.build()
)
Java
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
new RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Top Picks For You")
.build())
.build());
После получения запроса сервисом в рамках одной транзакции выполняются следующие действия:
- Существующие данные
RecommendationClusterот партнера-разработчика удалены. - Данные из запроса анализируются и сохраняются в обновленном кластере рекомендаций.
В случае ошибки весь запрос отклоняется, и сохраняется текущее состояние.
publishFeaturedCluster
Этот API используется для публикации списка объектов FeaturedCluster .
Котлин
client.publishFeaturedCluster(
PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
FeaturedCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.build())
.build())
Java
client.publishFeaturedCluster(
new PublishFeaturedClustersRequest.Builder()
.addFeaturedCluster(
new FeaturedCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.build())
.build());
После получения запроса сервисом в рамках одной транзакции выполняются следующие действия:
- Существующие данные
FeaturedClusterот партнера-разработчика удаляются. - Данные из запроса анализируются и сохраняются в обновленном кластере избранных элементов.
В случае ошибки весь запрос отклоняется, и сохраняется текущее состояние.
publishContinuationCluster
Этот API используется для публикации объекта ContinuationCluster .
Котлин
client.publishContinuationCluster(
PublishContinuationClusterRequest.Builder()
.setContinuationCluster(
ContinuationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.build())
.build())
Java
client.publishContinuationCluster(
new PublishContinuationClusterRequest.Builder()
.setContinuationCluster(
new ContinuationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.build())
.build());
После получения запроса сервисом в рамках одной транзакции выполняются следующие действия:
- Существующие данные
ContinuationClusterот партнера-разработчика удаляются. - Данные из запроса анализируются и сохраняются в обновленном кластере продолжения работы.
В случае ошибки весь запрос отклоняется, и сохраняется текущее состояние.
publishUserAccountManagementRequest
Этот API используется для публикации карточки входа. Действие входа перенаправляет пользователей на страницу авторизации приложения, чтобы приложение могло публиковать контент (или предоставлять более персонализированный контент).
Следующие метаданные являются частью карточки входа в систему:
| Атрибут | Требование | Описание |
|---|---|---|
| Action Uri | Необходимый | Глубокая ссылка на действие (т.е. переход на страницу входа в приложение) |
| Изображение | Необязательно — если не указано, необходимо указать заголовок. | Изображение, показанное на карте Изображения с соотношением сторон 16x9 и разрешением 1264x712. |
| Заголовок | Изображение необязательно — если не указано, его необходимо предоставить. | Название на карточке |
| Текст действия | Необязательный | Текст, отображаемый в призыве к действию (например, при входе в систему) |
| Субтитры | Необязательный | Дополнительный подзаголовок на карточке (по желанию) |
Котлин
var SIGN_IN_CARD_ENTITY =
SignInCardEntity.Builder()
.addPosterImage(
Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(500)
.setImageWidthInPixel(500)
.build())
.setActionText("Sign In")
.setActionUri(Uri.parse("http://xx.com/signin"))
.build()
client.publishUserAccountManagementRequest(
PublishUserAccountManagementRequest.Builder()
.setSignInCardEntity(SIGN_IN_CARD_ENTITY)
.build());
Java
SignInCardEntity SIGN_IN_CARD_ENTITY =
new SignInCardEntity.Builder()
.addPosterImage(
new Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(500)
.setImageWidthInPixel(500)
.build())
.setActionText("Sign In")
.setActionUri(Uri.parse("http://xx.com/signin"))
.build();
client.publishUserAccountManagementRequest(
new PublishUserAccountManagementRequest.Builder()
.setSignInCardEntity(SIGN_IN_CARD_ENTITY)
.build());
После получения запроса сервисом в рамках одной транзакции выполняются следующие действия:
- Существующие данные
UserAccountManagementClusterот партнера-разработчика удаляются. - Данные из запроса анализируются и сохраняются в обновленном кластере UserAccountManagementCluster.
В случае ошибки весь запрос отклоняется, и сохраняется текущее состояние.
updatePublishStatus
Если по каким-либо внутренним причинам ни один из кластеров не опубликован, мы настоятельно рекомендуем обновить статус публикации с помощью API updatePublishStatus . Это важно, потому что:
- Указание статуса во всех сценариях, даже когда контент опубликован (STATUS == PUBLISHED), имеет решающее значение для заполнения панелей мониторинга, которые используют этот явный статус для отображения состояния и других показателей вашей интеграции.
- Если контент не опубликован, но статус интеграции не нарушен (STATUS == NOT_PUBLISHED), Google может избежать срабатывания оповещений на панелях мониторинга состояния приложения. Это подтверждает, что контент не опубликован из-за ожидаемой ситуации с точки зрения поставщика.
- Это помогает разработчикам получать информацию о том, когда данные публикуются, а когда нет.
- Google может использовать коды состояния, чтобы подтолкнуть пользователя к выполнению определенных действий в приложении, чтобы он мог увидеть контент приложения или обойти его ограничения.
Список допустимых кодов статуса публикации:
// Content is published
AppEngagePublishStatusCode.PUBLISHED,
// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,
// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,
// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,
// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,
// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,
// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,
// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,
// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER
Если контент не публикуется из-за того, что пользователь не авторизован, Google рекомендует опубликовать карточку входа. Если по какой-либо причине поставщики не могут опубликовать карточку входа, мы рекомендуем вызвать API updatePublishStatus со статусом NOT_PUBLISHED_REQUIRES_SIGN_IN.
Котлин
client.updatePublishStatus(
PublishStatusRequest.Builder()
.setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
.build())
Java
client.updatePublishStatus(
new PublishStatusRequest.Builder()
.setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
.build());
deleteRecommendationClusters
Этот API используется для удаления содержимого кластеров рекомендаций.
Котлин
client.deleteRecommendationClusters()
Java
client.deleteRecommendationClusters();
Когда сервис получает запрос, он удаляет существующие данные из кластеров рекомендаций. В случае ошибки весь запрос отклоняется, и сохраняется текущее состояние.
deleteFeaturedCluster
Этот API используется для удаления содержимого раздела "Рекомендуемые кластеры".
Котлин
client.deleteFeaturedCluster()
Java
client.deleteFeaturedCluster();
Когда сервис получает запрос, он удаляет существующие данные из кластера избранных данных. В случае ошибки весь запрос отклоняется, и сохраняется существующее состояние.
deleteContinuationCluster
Этот API используется для удаления содержимого кластера продолжения.
Котлин
client.deleteContinuationCluster()
Java
client.deleteContinuationCluster();
Когда служба получает запрос, она удаляет существующие данные из кластера продолжения. В случае ошибки весь запрос отклоняется, и сохраняется текущее состояние.
deleteUserManagementCluster
Этот API используется для удаления содержимого кластера UserAccountManagement.
Котлин
client.deleteUserManagementCluster()
Java
client.deleteUserManagementCluster();
Когда служба получает запрос, она удаляет существующие данные из кластера UserAccountManagement. В случае ошибки весь запрос отклоняется, и сохраняется существующее состояние.
deleteClusters
Этот API используется для удаления содержимого кластера определенного типа.
Котлин
client.deleteClusters(
DeleteClustersRequest.Builder()
.addClusterType(ClusterType.TYPE_CONTINUATION)
.addClusterType(ClusterType.TYPE_FEATURED)
.addClusterType(ClusterType.TYPE_RECOMMENDATION)
.build())
Java
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
}
}
}
}
Java
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(...)
.build())
.addOnCompleteListener(
task -> {
if (task.isSuccessful()) {
// do something
} else {
Exception exception = task.getException();
if (exception instanceof AppEngageException) {
@AppEngageErrorCode
int errorCode = ((AppEngageException) exception).getErrorCode();
if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
// do something
}
}
}
});
В результате возникает ошибка, которая возвращается как AppEngageException , при этом причина ошибки указывается в виде кода ошибки.
| Код ошибки | Название ошибки | Примечание |
|---|---|---|
1 | SERVICE_NOT_FOUND | Данная услуга недоступна на указанном устройстве. |
2 | SERVICE_NOT_AVAILABLE | Услуга доступна на данном устройстве, но недоступна в момент звонка (например, она явно отключена). |
3 | SERVICE_CALL_EXECUTION_FAILURE | Выполнение задачи завершилось с ошибкой из-за проблем с многопоточностью. В этом случае можно повторить попытку. |
4 | SERVICE_CALL_PERMISSION_DENIED | Звонившему не разрешается вызывать специалиста для оказания услуги. |
5 | SERVICE_CALL_INVALID_ARGUMENT | Запрос содержит недопустимые данные (например, большее количество кластеров, чем разрешено). |
6 | SERVICE_CALL_INTERNAL | На стороне сервиса произошла ошибка. |
7 | SERVICE_CALL_RESOURCE_EXHAUSTED | Вызов сервисной службы происходит слишком часто. |
Шаг 3: Обработка широковещательных намерений
Помимо выполнения вызовов API для публикации контента через задание, также необходимо настроить BroadcastReceiver для приема запросов на публикацию контента.
Основная цель широковещательных интентов — повторная активация приложения и принудительная синхронизация данных. Широковещательные интенты не предназначены для частой отправки. Они срабатывают только тогда, когда служба Engage определяет, что контент может быть устаревшим (например, недельной давности). Таким образом, обеспечивается большая уверенность в том, что пользователь получит актуальный контент, даже если приложение долгое время не запускалось.
Для настройки BroadcastReceiver необходимо использовать два следующих способа:
Динамически зарегистрируйте экземпляр класса
BroadcastReceiverс помощьюContext.registerReceiver(). Это позволит осуществлять связь с приложениями, которые всё ещё находятся в оперативной памяти.
Котлин
class AppEngageBroadcastReceiver : BroadcastReceiver(){
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger 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),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Featured Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_FEATURED),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Continuation Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
}
Java
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger 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),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
}
В файле
AndroidManifest.xmlстатически объявите реализацию с помощью тега<receiver>. Это позволит приложению получать широковещательные интенты, когда оно не запущено, а также позволит приложению публиковать контент.
<application>
<receiver
android:name=".AppEngageBroadcastReceiver"
android:permission="com.google.android.engage.REQUEST_ENGAGE_DATA"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.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 Store.
- После того, как Google подтвердит публикацию вашего обновленного APK-файла в Play Store, ваши разделы «Рекомендации» , «Рекомендуемые» и «Продолжение» могут быть опубликованы и видны пользователям.