Engage SDK Health and Fitness: инструкции по интеграции сторонних сервисов

Повышайте вовлеченность пользователей, обращаясь к ним там, где они находятся. Интегрируйте Engage SDK, чтобы показывать персональные рекомендации и контент, который пользователи не досмотрели, на разных платформах на устройстве, например в подборках, Entertainment Space и Google Play. Интеграция добавляет менее 50 КБ (в сжатом виде) к среднему размеру APK и занимает у разработчиков около недели. Подробную информацию вы найдете на нашем сайте.

В этом руководстве содержатся инструкции для партнеров-разработчиков по передаче контента о здоровье и фитнесе на платформу Google Play Обзор.

Поддерживаемые категории и платформы

Доступность платформ Engage SDK зависит от категории контента в приложении. В таблице ниже указано, какие требования нужно выполнить, чтобы ваши товары показывались на разных платформах.

Статус Категория контента или сценарий использования Поддерживаемые платформы
Поддерживается
(Доступно на всех платформах)
  • Занятия по фитнесу
  • Фитнес-программы
  • Релаксация и медитация
  • Поиск маршрутов и троп
  • Планирование приема пищи
  • Подборки
  • Вкладка "Приложения" в Google Play
  • Вкладка "Вы" в Google Play
  • Страница приложения в Google Play
Чего пользователь не может
  • Калькулятор веса
  • Трекер физической активности / шагомер
  • Счетчик калорий
  • Трекер сна
  • Инструменты и пульты
  • Медицинские приложения

Сведения об интеграции

В этом разделе подробно описаны шаги, модели данных и терминология, необходимые для интеграции с Engage SDK для контента о здоровье и фитнесе.

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

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

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

    • Кластер рекомендаций может состоять из объектов ArticleEntity, PersonEntity или EventEntity, но не из объектов разных типов.

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

    • Кластер рекомендаций. Раздел интерфейса, в котором собраны рекомендации от одного партнера-разработчика.

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

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

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

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

        Рисунок 3. Интерфейс с одним объектом EventEntity в кластере рекомендаций.
  • В кластере Продолжение показывается контент, с которым пользователи недавно взаимодействовали в приложениях разных партнеров-разработчиков. Каждый партнер-разработчик может транслировать не более 10 объектов в кластере продолжения.

    Контент для продолжения может иметь следующую структуру:

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

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

      Рисунок 8. Интерфейс, в котором показан один объект EventReservationEntity в кластере продолжения.
  • В кластере Рекомендуемые показываются объекты от разных партнеров-разработчиков. В верхней части интерфейса будет только один кластер "Рекомендуемые", который будет иметь приоритет над всеми кластерами рекомендаций. Каждый партнер-разработчик сможет транслировать до 10 объектов в кластере "Рекомендуемые".

    • 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.6.0'
}

Сводка

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

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

Тип кластера Ограничения кластера Минимальное количество объектов в кластере Максимальное количество объектов в кластере
Кластеры рекомендаций Не более 7 Не менее 1 Не более 50 (ArticleEntity, PersonEntity или EventEntity).
Кластер продолжения Не более 1 Не менее 1 Не более 20 (ArticleEntity или EventReservationEntity).
Рекомендуемый кластер Не более 1 Не менее 1 Не более 20 (GenericFeaturedEntity)

Шаг 1. Укажите данные о компании

В SDK определены разные объекты, представляющие каждый тип товара. В категории "Здоровье и фитнес" поддерживаются следующие объекты:

  1. GenericFeaturedEntity
  2. ArticleEntity
  3. PersonEntity
  4. EventEntity
  5. EventReservationEntity

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

GenericFeaturedEntity

Атрибут Требования Описание Формат
URI действия Обязательно

Ссылка на контент в приложении поставщика.

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

URI
Постеры Обязательно

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

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

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

Произвольный текст

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

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

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

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

Произвольный текст

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

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

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

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

Произвольный текст

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

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

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

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

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

Название значка

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

Произвольный текст

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

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

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

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

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

Ознакомьтесь со спецификациями изображений.
Категории контента Необязательно Опишите категорию контента в объекте.

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

Подробные инструкции вы найдете в разделе Категория контента.

ArticleEntity

Атрибут Требования Описание Формат
URI действия Обязательно

Ссылка на контент в приложении поставщика.

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

URI
Название Обязательно Название объекта.

Произвольный текст

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

Постеры Необязательно

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

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

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

Произвольный текст

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

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

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

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

Произвольный текст

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

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

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

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

Произвольный текст

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

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

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

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

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

Название значка

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

Произвольный текст

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

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

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

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

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

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

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

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

Временная метка в миллисекундах с начала отсчета
Процент выполнения Условно обязательно

Процент контента, который пользователь уже посмотрел.

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

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

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

Подробные инструкции вы найдете в разделе Категория контента.

PersonEntity

Атрибут Требования Описание Формат
URI действия Обязательно

Ссылка на контент в приложении поставщика.

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

URI
Название профиля Обязательно Имя, идентификатор или псевдоним профиля, например "Иван Иванов", "@TeamPixel" и т. д.

Строка

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

Профиль – аватар Обязательно

Фото профиля или аватар пользователя.

Примечание. Изображение должно быть квадратным (1:1).

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

Произвольный текст

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

Профиль – дополнительное изображение Необязательно Небольшое изображение, например значок подтверждения. Ознакомьтесь со спецификациями изображений.
Обложка Необязательно

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

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

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

Укажите количество подписчиков или значение популярности, например "3,7 млн".

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

Строка

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

Популярность – количество Необязательно

Количество подписчиков или показатель популярности.

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

Долгота
Популярность – ярлык Необязательно Укажите, что означает ярлык популярности. Например, "Лайки".

Строка

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

Популярность – визуальные Необязательно

Укажите, для чего нужно взаимодействие. Например, изображение со значком "Нравится" и эмодзи.

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

Примечание. Изображение должно быть квадратным (1:1).

Ознакомьтесь со спецификациями изображений.
Оценка – максимальное значение Обязательно

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

Обязательно, если указано текущее значение оценки.

Число >= 0,0
Оценка – текущее значение Обязательно

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

Обязательно, если указано максимальное значение оценки.

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

Количество оценок объекта.

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

Строка
Рейтинг – количество оценок Необязательно

Количество оценок объекта.

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

Долгота
Местоположение – страна Необязательно Страна, в которой находится или служит человек.

Произвольный текст

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

Местоположение – город Необязательно Город, в котором находится или работает человек.

Произвольный текст

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

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

Произвольный текст

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

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

Произвольный текст

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

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

Произвольный текст

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

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

Произвольный текст

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

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

Произвольный текст

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

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

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

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

Название значка

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

Произвольный текст

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

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

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

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

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

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

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

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

Произвольный текст

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

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

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

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

Произвольный текст

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

Категории контента Необязательно Опишите категорию контента в объекте.

Список допустимых перечислений

  • TYPE_HEALTH_AND_FITENESS (например, тренер по йоге или фитнесу)
  • TYPE_HOME_AND_AUTO (пример – сантехник)
  • TYPE_SPORTS (пример – игрок)
  • TYPE_DATING

Подробные инструкции вы найдете в разделе Категория контента.

EventEntity

Атрибут Требования Описание Формат
URI действия Обязательно

Ссылка на контент в приложении поставщика.

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

URI
Название Обязательно Название объекта.

Строка

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

Время начала Обязательно

Временная метка в формате Unix, когда должно начаться событие.

Примечание. Значение указывается в миллисекундах.

Временная метка в миллисекундах с начала отсчета
Режим событий Обязательно

Поле, в котором указывается, как будет проходить мероприятие: онлайн, офлайн или в смешанном формате.

Enum: VIRTUAL, IN_PERSON, or HYBRID
Постеры Обязательно

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

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

Ознакомьтесь со спецификациями изображений.
Местоположение – страна Условно обязательно

Страна, в которой проводится мероприятие.

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

Произвольный текст

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

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

Город, в котором проходит мероприятие.

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

Произвольный текст

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

Местоположение – отображаемый адрес Условно обязательно

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

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

Произвольный текст

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

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

Произвольный текст

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

Местоположение – штат Необязательно Штат или область (если применимо), где проводится мероприятие.

Произвольный текст

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

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

Произвольный текст

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

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

Произвольный текст

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

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

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

Примечание. Значение указывается в миллисекундах.

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

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

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

Произвольный текст

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

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

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

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

Произвольный текст

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

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

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

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

Название значка

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

Произвольный текст

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

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

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

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

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

Ознакомьтесь со спецификациями изображений.
Price - CurrentPrice Условно обязательно

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

Обязателен, если указана зачеркнутая цена.

Произвольный текст
Price – StrikethroughPrice Необязательно Первоначальная цена билета или пропуска на мероприятие. Произвольный текст
Уточнение цены Необязательно Уточнение цены, чтобы выделить промоакцию, событие или скидку для участников, если они доступны.

Произвольный текст

Рекомендуемая длина текста – до 45 символов. Если текст слишком длинный, он может быть сокращен.

Категории контента Необязательно Опишите категорию контента в объекте.

Список допустимых перечислений

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

Подробные инструкции вы найдете в разделе Категория контента.

EventReservationEntity

Атрибут Требования Описание Формат
URI действия Обязательно

Ссылка на контент в приложении поставщика.

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

URI
Название Обязательно Название объекта.

Строка

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

Время начала Обязательно

Временная метка в формате Unix, когда должно начаться событие.

Примечание. Значение указывается в миллисекундах.

Временная метка в миллисекундах с начала отсчета
Режим событий Обязательно

Поле, в котором указывается, как будет проходить мероприятие: онлайн, офлайн или в смешанном формате.

Enum: VIRTUAL, IN_PERSON, or HYBRID
Местоположение – страна Условно обязательно

Страна, в которой проводится мероприятие.

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

Произвольный текст

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

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

Город, в котором проходит мероприятие.

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

Произвольный текст

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

Местоположение – отображаемый адрес Условно обязательно

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

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

Произвольный текст

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

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

Произвольный текст

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

Местоположение – штат Необязательно Штат или область (если применимо), где проводится мероприятие.

Произвольный текст

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

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

Произвольный текст

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

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

Произвольный текст

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

Постеры Необязательно

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

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

Ознакомьтесь со спецификациями изображений.
Время окончания Необязательно

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

Примечание. Значение указывается в миллисекундах.

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

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

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

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

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

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

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

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

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

Произвольный текст

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

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

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

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

Произвольный текст

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

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

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

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

Название значка

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

Произвольный текст

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

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

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

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

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

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

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

Обязателен, если указана зачеркнутая цена.

Произвольный текст
Price – StrikethroughPrice Необязательно Первоначальная цена билета или пропуска на мероприятие. Произвольный текст
Уточнение цены Необязательно Уточнение цены, чтобы выделить промоакцию, событие или скидку для участников, если они доступны.

Произвольный текст

Рекомендуемая длина текста – до 45 символов. Если текст слишком длинный, он может быть сокращен.

Оценка – максимальное значение Необязательно

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

Обязательно, если указано текущее значение оценки.

Число >= 0,0
Оценка – текущее значение Необязательно

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

Обязательно, если указано максимальное значение оценки.

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

Количество оценок события.

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

Строка
Рейтинг – количество оценок Необязательно

Количество оценок события.

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

Долгота
Категории контента Необязательно Опишите категорию контента в объекте.

Список допустимых перечислений

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

Подробные инструкции вы найдете в разделе Категория контента.

Требования к картинкам

Требования к объектам изображений приведены в таблице ниже.

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

Квадрат (1:1).

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

300x300 1200x1200
Горизонтальное (1,91:1) 600x314 1200x628
Вертикальное (4:5) 480x600 960x1200

Изображения должны размещаться в общедоступных сетях доставки контента, чтобы у 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

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

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

  1. Некоторые объекты, например ArticleEntity и GenericFeaturedEntity, могут использовать любые категории контента. Для других объектов, таких как EventEntity, EventReservationEntity и PersonEntity, доступно только подмножество этих категорий. Прежде чем заполнять список, проверьте, какие категории доступны для того или иного типа объектов.
  2. Для некоторых категорий контента используйте определенный тип объекта, а не сочетание общих объектов и ContentCategory:

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

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

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

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

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

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

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

isServiceAvailable

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

Вы можете проверить доступность сервиса для каждого типа кластера, который вы собираетесь опубликовать. API isServiceAvailable принимает объект запроса ServiceAvailabilityRequest, который содержит типы кластеров, для которых необходимо проверить доступность сервиса. В таблице ниже приведены значения перечисления ClusterType, необходимые для ServiceAvailabilityRequest.

Тип кластера Константа типа кластера Целочисленное значение
Неизвестно TYPE_UNKNOWN 0
Кластер рекомендаций TYPE_RECOMMENDATION 1
Рекомендуемый кластер TYPE_FEATURED 2
Кластер продолжения TYPE_CONTINUATION 3
Кластер управления пользователями TYPE_ENGAGEMENT 8
Кластер подписок TYPE_SUBSCRIPTION 12

Kotlin

val request = ServiceAvailabilityRequest.Builder()
    .addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
    .addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
    .build()

client.isServiceAvailable(request).addOnCompleteListener { task ->
    if (task.isSuccessful) {
        val availabilityMap = task.result
        if (availabilityMap[ClusterType.TYPE_CONTINUATION] == true) {
            // Proceed with publishing continuation content
        }
        if (availabilityMap[ClusterType.TYPE_RECOMMENDATION] == true) {
            // Proceed with publishing recommendation content
        }
    } else {
        // The IPC call itself fails, proceed with error handling logic here,
        // such as retry.
    }
}

Java

ServiceAvailabilityRequest request =
    new ServiceAvailabilityRequest.Builder()
        .addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
        .addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
        .build();

client.isServiceAvailable(request).addOnCompleteListener(task -> {
    if (task.isSuccessful()) {
        Map<Integer, Boolean> availabilityMap = task.getResult();
        if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_CONTINUATION))) {
            // Proceed with publishing continuation content
        }
        if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_RECOMMENDATION))) {
            // Proceed with publishing recommendation content
        }
    } else {
        // The IPC call itself fails, proceed with error handling logic here,
        // such as retry.
    }
});
Функция условной доступности сервиса

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

Начиная с версии 1.6.0 Engage SDK позволяет проверять доступность определенных типов кластеров. Если ваше приложение использует прерывистую передачу данных:

  • Кластеры продолжения (например, "Продолжить чтение" и "Бронирование мероприятий") остаются включенными по умолчанию на всех поддерживаемых устройствах.
  • Другие типы кластеров (например, рекомендации) включаются и отключаются периодически.

Если эта конфигурация по умолчанию вам не подходит, напишите на адрес engage-developers@google.com.

Для версий SDK до 1.6.0 (поддержка прекращена)

Kotlin

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

Java

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

publishRecommendationClusters

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

Kotlin

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

Java

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

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

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

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

publishFeaturedCluster

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

Kotlin

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

Java

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

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

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

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

publishContinuationCluster

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

Kotlin

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 используется для публикации карточки входа . Действие "Войти" направляет пользователей на страницу входа в приложение, чтобы оно могло публиковать контент (или предоставлять более персонализированный контент).

В карточке входа содержатся следующие метаданные:

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

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

Изображения с соотношением сторон 16:9 и разрешением 1264 x 712.

Название Необязательно. Если не указано, необходимо добавить изображение. Название на карточке
Текст действия Необязательно Текст, который будет показываться в призыве к действию (например, "Войти")
Подзаголовок Необязательно Необязательный подзаголовок на карточке

Kotlin

var SIGN_IN_CARD_ENTITY =
      SignInCardEntity.Builder()
          .addPosterImage(
              Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build()

client.publishUserAccountManagementRequest(
            PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

Java

SignInCardEntity SIGN_IN_CARD_ENTITY =
      new SignInCardEntity.Builder()
          .addPosterImage(
              new Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build();

client.publishUserAccountManagementRequest(
            new PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

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

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

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

updatePublishStatus

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

  • Указывать статус нужно во всех случаях, даже когда контент опубликован (STATUS == PUBLISHED). Это необходимо для заполнения панелей управления, на которых статус используется для передачи данных о работоспособности и других показателей интеграции.
  • Если контент не опубликован, но статус интеграции не нарушен (STATUS == NOT_PUBLISHED), Google может не активировать оповещения на панелях мониторинга работоспособности приложения. Она подтверждает, что контент не опубликован по ожидаемой причине, известной поставщику.
  • Это помогает разработчикам понять, когда данные публикуются, а когда нет.
  • Google может использовать коды статуса, чтобы подтолкнуть пользователя к определенным действиям в приложении, которые позволят ему увидеть контент или решить проблему.

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

// Content is published
AppEngagePublishStatusCode.PUBLISHED,

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

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

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

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

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

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

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

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

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

Kotlin

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

Java

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

deleteRecommendationsClusters

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

Kotlin

client.deleteRecommendationsClusters()

Java

client.deleteRecommendationsClusters();

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

deleteFeaturedCluster

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

Kotlin

client.deleteFeaturedCluster()

Java

client.deleteFeaturedCluster();

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

deleteContinuationCluster

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

Kotlin

client.deleteContinuationCluster()

Java

client.deleteContinuationCluster();

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

deleteUserManagementCluster

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

Kotlin

client.deleteUserManagementCluster()

Java

client.deleteUserManagementCluster();

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

deleteClusters

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

Kotlin

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 публикации, чтобы можно было предпринять последующие действия по восстановлению и повторной отправке успешной задачи.

Kotlin

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

Java

client.publishRecommendationClusters(
              new PublishRecommendationClustersRequest.Builder()
                  .addRecommendationCluster(...)
                  .build())
          .addOnCompleteListener(
              task -> {
                if (task.isSuccessful()) {
                  // do something
                } else {
                  Exception exception = task.getException();
                  if (exception instanceof AppEngageException) {
                    @AppEngageErrorCode
                    int errorCode = ((AppEngageException) exception).getErrorCode();
                    if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
                      // do something
                    }
                  }
                }
              });

Ошибка возвращается как AppEngageException с указанием причины в виде кода ошибки.

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

Шаг 3. Обработка намерений широковещательной рассылки

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

Цель широковещательных намерений – повторная активация приложения и принудительная синхронизация данных. Широковещательные намерения не предназначены для частой отправки. Он запускается, только когда сервис Google Play Объекты определяет, что контент может быть устаревшим (например, ему неделя). Это позволяет пользователю видеть актуальный контент, даже если приложение не запускалось в течение длительного периода времени.

BroadcastReceiver необходимо настроить двумя способами:

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

Kotlin

class AppEngageBroadcastReceiver : BroadcastReceiver(){
  // Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
  // is received
  // Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
  // Trigger 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);

}
  • Статически объявите реализацию с помощью тега <receiver> в файле AndroidManifest.xml. Это позволяет приложению получать намерения широковещательной рассылки, когда оно не запущено, а также публиковать контент.

<application>
   <receiver
      android:name=".AppEngageBroadcastReceiver"
      android:permission="com.google.android.engage.REQUEST_ENGAGE_DATA"
      android:exported="true"
      android:enabled="true">
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.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 SDK

Контакт

Если у вас возникнут вопросы в процессе интеграции, обратитесь в engage-developers@google.com.

Дальнейшие действия

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

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