Viajes con el SDK de Engage: Instrucciones de integración técnica de terceros

Aumenta la participación en la app llegando a los usuarios dondequiera que estén. Integra el SDK de Engage para ofrecer recomendaciones personalizadas y contenido de continuación directamente a los usuarios en varias plataformas integradas en el dispositivo, como Colecciones, Entertainment Space y Play Store. La integración agrega menos de 50 KB (comprimidos) al APK promedio y requiere aproximadamente una semana de tiempo de desarrollo para la mayoría de las apps. Obtén más información en nuestro sitio para empresas.

En esta guía, se ofrecen instrucciones para que los socios desarrolladores entreguen contenido de viajes y eventos a las plataformas de contenido de Engage.

Información detallada sobre la integración

Terminología

Esta integración incluye los siguientes tipos de clústeres: Recommendation, Featured, Reservation y Continue Search.

  • Los clústeres de Recommendation muestran sugerencias personalizadas de viajes y eventos de un socio desarrollador individual. Estas recomendaciones se pueden personalizar para el usuario o generalizar (por ejemplo, si incluyen artículos en tendencia). Úsalos para mostrar recomendaciones de artículos, eventos, alojamiento o lugares de interés.

    • Un clúster de Recommendation puede estar formado por fichas de ArticleEntity, EventEntity, LodgingEntity, PointOfInterestEntity o StoreEntity, pero no por una combinación de distintos tipos de entidades.

    Tus recomendaciones tienen la siguiente estructura:

    • Clúster de Recommendation: Es una vista de la IU que contiene un grupo de recomendaciones del mismo socio desarrollador.

    • Entidad: Es un objeto que representa un solo elemento en un clúster. Esta integración ofrece algunas entidades que se mostrarían con el clúster de recomendaciones:

      • ArticleEntity: ArticleEntity representa una recomendación de contenido basado en texto relacionado con viajes y eventos. Se puede usar para artículos, publicaciones de blogs, contenido de marketing, fragmentos de noticias, etcétera.

        Figura 1: IU que muestra una sola ArticleEntity dentro del clúster de Recommendations.
      • EventEntity: EventEntity representa un evento que ocurrirá en el futuro. La hora de inicio del evento es un dato fundamental que se debe comunicar a los usuarios.

        Figura 2: IU que muestra una sola EventEntity dentro del clúster de Recommendations.
      • LodgingEntity: LodgingEntity representa un alojamiento, como un hotel, un departamento o una casa de vacaciones para alquileres a corto y largo plazo.

        Figura 3: IU que muestra un solo LodgingEntity dentro del clúster de Recommendations.
      • StoreEntity: StoreEntity representa una tienda, un restaurante, una cafetería, etcétera. Destaca el contenido en el que un lugar para comer o una tienda es la información fundamental que se debe transmitir a los usuarios.

        Figura 4: IU que muestra una sola StoreEntity dentro del clúster de Recommendations.
      • PointOfInterestEntity: PointOfInterestEntity representa un lugar de interés, como una gasolinera, un recinto para eventos, un parque temático, un museo, una atracción turística, una ruta de senderismo, etcétera. Destaca el contenido en el que la ubicación es una información fundamental que se debe transmitir a los usuarios. No se debe usar para alojamiento, tiendas ni restaurantes.

        Figura 5: IU que muestra un solo objeto PointOfInterestEntity dentro del clúster de Recommendations.
  • El clúster de Reservation muestra contenido con el que los usuarios interactuaron recientemente de varios socios desarrolladores en una sola agrupación de IU. Cada socio desarrollador podrá transmitir un máximo de 10 entidades en el clúster de Reservation.

    El contenido de tu reserva puede tener la siguiente estructura:

    • RestaurantReservationEntity: RestaurantReservationEntity representa una reserva para un restaurante o una cafetería, y ayuda a los usuarios a hacer un seguimiento de las reservas de restaurantes próximas o en curso.

      Figura 6: IU que muestra un solo objeto RestaurantReservationEntity dentro de un clúster de Reservation.
    • EventReservationEntity: EventReservationEntity representa una reserva para un evento y ayuda a los usuarios a hacer un seguimiento de las reservas de eventos próximos o en curso. Los eventos pueden incluir, entre otros, los siguientes:

      • Eventos deportivos, como la reserva para un partido de fútbol
      • Eventos de videojuegos, como reservas para deportes electrónicos
      • Eventos de entretenimiento, como reservas para películas en un cine, conciertos, obras de teatro y firmas de libros
      • Reservas de viajes o lugares de interés, como visitas guiadas y entradas a museos
      • Reservaciones para eventos sociales, seminarios y conferencias
      • Reservas de sesiones de capacitación o educación
      Figura 7. IU que muestra un solo objeto EventReservationEntity dentro de un clúster de Reservation.
    • LodgingReservationEntity: LodgingEntityReservation representa una reserva de alojamiento para viajes y ayuda a los usuarios a hacer un seguimiento de las reservas de hoteles o alquileres de vacaciones próximas o en curso.

      Figura 8: La IU muestra un solo objeto LodgingReservationEntity dentro de un clúster de Reservation.
    • TransportationReservationEntity: TransportationReservationEntity representa la reserva de transporte en cualquier medio y ayuda a los usuarios a hacer un seguimiento de las reservas de vuelos, ferris, trenes, autobuses, viajes en taxi o cruceros próximos o en curso.

      Figura 9: IU que muestra un solo objeto TransportationReservationEntity dentro de un clúster de Reservation.
    • VehicleRentalReservationEntity: VehicleRentalReservationEntity representa la reserva de alquiler de vehículos y ayuda a los usuarios a hacer un seguimiento de las reservas de alquiler de vehículos próximas o en curso.

      Figura 10: IU que muestra un solo objeto VehicleRentalReservationEntity dentro de un clúster de Reservation.
  • El clúster de Featured muestra una selección de entidades de varios socios desarrolladores en una agrupación de IU. Habrá un solo clúster de Featured, que aparecerá cerca de la parte superior de la IU, con una ubicación de prioridad por sobre todos los clústeres de Recommendation. Cada socio desarrollador podrá transmitir hasta 10 entidades en el clúster de Featured.

    • GenericFeaturedEntity: GenericFeaturedEntity se diferencia del elemento de recomendación en que el elemento destacado se debe usar para un solo contenido principal de los desarrolladores y debe representar el contenido más importante que será interesante y pertinente para los usuarios.

      Figura 11: IU que muestra un FeaturedCluster con una lista de GenericFeaturedEntity
  • El clúster Continuar la búsqueda ayuda a los usuarios a retomar su recorrido de búsqueda de viajes anterior, ya que muestra una lista de las búsquedas que realizaron recientemente en todas sus apps de viajes. El clúster se fijará en la segunda posición, después de las reservas y antes de los clústeres de recomendaciones y destacados. Cada socio desarrollador podrá transmitir hasta 3 entidades en el clúster de Continue Search.

    • PointOfInterestEntity: PointOfInterestEntity representa un lugar de interés, como una gasolinera, un lugar para eventos, un parque temático, un museo, una atracción turística, un sendero para caminatas, etcétera. Destaca el contenido que el usuario buscó anteriormente.

Trabajo previo

Nivel de API mínimo: 19

Agrega la biblioteca com.google.android.engage:engage-core a tu app:

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

Resumen

El diseño se basa en una implementación de un servicio vinculado.

Los datos que un cliente puede publicar están sujetos a los siguientes límites para diferentes tipos de clústeres:

Tipo de clúster Límites del clúster Límites mínimos de entidades en un clúster Límites máximos de entidades en un clúster
Clústeres de Recommendation 7 como máximo Al menos 1 50 como máximo (ArticleEntity, EventEntity, LodgingEntity, StoreEntity o PointOfInterestEntity)
Clúster de reserva 1 como máximo Al menos 1 20 como máximo (RestaurantReservationEntity, EventReservationEntity, LodgingReservationEntity, TransportationReservationEntity o VehicleRentalReservationEntity)
Clúster de Featured 1 como máximo Al menos 1 20 como máximo (GenericFeaturedEntity)
Clúster de Continue Search 1 como máximo Al menos 1 3 como máximo (PointOfInterestEntity)

Paso 1: Proporciona los datos de la entidad

El SDK definió distintas entidades para representar cada tipo de elemento. Admitimos las siguientes entidades para la categoría Viajes y eventos:

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

En los gráficos siguientes, se describen los atributos y requisitos disponibles para cada tipo.

GenericFeaturedEntity

Atributo Requisito Descripción Formato
URI de acción Obligatorio

Vínculo directo a la entidad en la app del proveedor.

Nota: Puedes usar vínculos directos para la atribución. Consulta estas Preguntas frecuentes

URI
Imágenes de pósteres Obligatorio

Solo mostraremos 1 imagen cuando se proporcionen varias. Se recomienda una relación de aspecto de 16:9

Nota: Si se proporciona una insignia, asegúrate de que haya un espacio seguro de 24 dps en la parte superior y en la inferior de la imagen.

Consulta la sección Especificaciones de imagen para obtener más información.
Título Opcional Es el título de la entidad.

Texto libre

Tamaño de texto recomendado: 50 caracteres

Descripción Opcional

Es un solo párrafo de texto que describe la entidad.

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado: 180 caracteres

Lista de subtítulos Opcional

Hasta 3 subtítulos, cada uno con una sola línea de texto

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado para cada subtítulo: Máximo 50 caracteres

Insignias Opcional

Cada distintivo puede ser texto libre (máx. 15 caracteres) o una imagen pequeña.

Tratamiento especial de la UX sobre la imagen o el video, por ejemplo, como una insignia superpuesta en la imagen

  • "Actualización en vivo"
  • Duración de lectura del artículo
Insignia: texto Opcional

Título de la insignia

Nota: Se requiere texto o una imagen para la insignia.

Texto libre

Tamaño de texto recomendado: Máximo de 15 caracteres

Insignia: imagen Opcional

Imagen pequeña

Tratamiento especial de UX, por ejemplo, como una superposición de insignia en la miniatura de la imagen o el video

Nota: Se requiere texto o una imagen para la insignia.

Consulta la sección Especificaciones de imagen para obtener más información.
Categorías de contenido Opcional Describe la categoría del contenido en la entidad.

Lista de enumeraciones

Consulta la sección Categoría de contenido para obtener orientación.

DisplayTimeWindow (opcional): Establece un período para que un contenido se muestre en la superficie
Fecha y hora de inicio Opcional

Es la marca de tiempo de época a partir de la cual se debe mostrar el contenido en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos
Fecha y hora de finalización Opcional

Es la marca de tiempo de época a partir de la cual el contenido ya no se mostrará en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos

ArticleEntity

Atributo Requisito Descripción Formato
URI de acción Obligatorio

Vínculo directo a la entidad en la app del proveedor.

Nota: Puedes usar vínculos directos para la atribución. Consulta estas Preguntas frecuentes

URI
Título Obligatorio Es el título de la entidad.

Texto libre

Tamaño de texto recomendado: Máximo 50 caracteres

Imágenes de pósteres Opcional

Solo mostraremos 1 imagen cuando se proporcionen varias. Se recomienda una relación de aspecto de 16:9

Nota: Se recomienda incluir una imagen. Si se proporciona una insignia, asegúrate de que haya un espacio seguro de 24 dp en la parte superior y en la inferior de la imagen.

Consulta la sección Especificaciones de imagen para obtener más información.
Fuente: Título Opcional El nombre del autor, la organización o el periodista

Texto libre

Tamaño de texto recomendado: Menos de 25 caracteres

Fuente: imagen Opcional Una imagen de la fuente, como el autor, la organización o el reportero Consulta la sección Especificaciones de imagen para obtener más información.
Descripción Opcional

Es un solo párrafo de texto que describe la entidad.

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado: 180 caracteres

Lista de subtítulos Opcional

Hasta 3 subtítulos, cada uno con una sola línea de texto

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado para cada subtítulo: Máximo 50 caracteres

Insignias Opcional

Cada distintivo puede ser texto libre (máx. 15 caracteres) o una imagen pequeña.

Tratamiento especial de la UX sobre la imagen o el video, por ejemplo, como una insignia superpuesta en la imagen

  • "Actualización en vivo"
  • Duración de lectura del artículo
Insignia: texto Opcional

Título de la insignia

Nota: Se requiere texto o una imagen para la insignia.

Texto libre

Tamaño de texto recomendado: Máximo de 15 caracteres

Insignia: imagen Opcional

Imagen pequeña

Tratamiento especial de UX, por ejemplo, como una superposición de insignia en la miniatura de la imagen o el video

Nota: Se requiere texto o una imagen para la insignia.

Consulta la sección Especificaciones de imagen para obtener más información.
Hora de publicación del contenido Opcional Es la marca de tiempo de época en milisegundos en la que se publicó o actualizó el contenido en la app. Marca de tiempo de época en milisegundos
Tiempo de la participación más reciente Opcional

Es la marca de tiempo de época en milisegundos en la que el usuario interactuó con esta entidad por última vez.

Marca de tiempo de época en milisegundos
Porcentaje de progreso Opcional

Es el porcentaje del contenido completo que consumió el usuario hasta la fecha.

Es un valor int entre 0 y 100, incluidos ambos.
Categorías de contenido Opcional Describe la categoría del contenido en la entidad.

Lista de enumeraciones

Consulta la sección Categoría de contenido para obtener orientación.

DisplayTimeWindow (opcional): Establece un período para que un contenido se muestre en la superficie
Fecha y hora de inicio Opcional

Es la marca de tiempo de época a partir de la cual se debe mostrar el contenido en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos
Fecha y hora de finalización Opcional

Es la marca de tiempo de época a partir de la cual el contenido ya no se mostrará en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos

EventEntity

Atributo Requisito Descripción Formato
URI de acción Obligatorio

Vínculo directo a la entidad en la app del proveedor.

Nota: Puedes usar vínculos directos para la atribución. Consulta estas Preguntas frecuentes

URI
Título Obligatorio Es el título de la entidad.

String

Tamaño de texto recomendado: Máximo 50 caracteres

Hora de inicio localizada: Marca de tiempo Obligatorio

Es la marca de tiempo de época en la que se espera que comience el evento.

Joda-Time Instant
Hora de inicio localizada: zona horaria Obligatorio

Zona horaria en la que se espera que comience el evento.

DateTimeZone de Joda-Time

Consulta las Especificaciones de zona horaria para obtener más información.

Modo de evento Obligatorio

Es un campo para indicar si el evento será virtual, presencial o ambos.

Enumeración: VIRTUAL, IN_PERSON o HYBRID
Imágenes de pósteres Obligatorio

Solo mostraremos 1 imagen cuando se proporcionen varias. Se recomienda una relación de aspecto de 16:9

Nota: Se recomienda incluir una imagen. Si se proporciona una insignia, asegúrate de que haya un espacio seguro de 24 dp en la parte superior y en la inferior de la imagen.

Consulta la sección Especificaciones de imagen para obtener más información.
Ubicación: país Condicionalmente obligatorio

Es el país en el que se lleva a cabo el evento.

Nota: Este campo es obligatorio para los eventos que son PRESENCIALES o HÍBRIDOS.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Ciudad Condicionalmente obligatorio

Es la ciudad en la que se lleva a cabo el evento.

Nota: Este campo es obligatorio para los eventos que son PRESENCIALES o HÍBRIDOS.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Dirección visible Condicionalmente obligatorio

Es la dirección o el nombre del lugar donde se llevará a cabo el evento que se debe mostrar al usuario.

Nota: Este campo es obligatorio para los eventos que son PRESENCIALES o HÍBRIDOS.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Dirección Opcional Dirección de la calle (si corresponde) de la ubicación en la que se lleva a cabo el evento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Estado Opcional Estado o provincia (si corresponde) en el que se organiza el evento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: código postal Opcional El código postal (si corresponde) de la ubicación en la que se organiza el evento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Barrio Opcional El vecindario (si corresponde) en el que se organiza el evento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Hora de finalización Opcional

Es la marca de tiempo de época en la que se espera que finalice el evento.

Nota: Se representará en milisegundos.

Marca de tiempo de época en milisegundos
Descripción Opcional

Es un solo párrafo de texto que describe la entidad.

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado: 180 caracteres

Lista de subtítulos Opcional

Hasta 3 subtítulos, cada uno con una sola línea de texto

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado para cada subtítulo: Máximo 50 caracteres

Insignias Opcional

Cada distintivo puede ser texto libre (máx. 15 caracteres) o una imagen pequeña.

Insignia: texto Opcional

Título de la insignia

Nota: Se requiere texto o una imagen para la insignia.

Texto libre

Tamaño de texto recomendado: Máximo de 15 caracteres

Insignia: imagen Opcional

Imagen pequeña

Tratamiento especial de UX, por ejemplo, como una superposición de insignia en la miniatura de la imagen o el video

Nota: Se requiere texto o una imagen para la insignia.

Consulta la sección Especificaciones de imagen para obtener más información.
Precio - CurrentPrice Condicionalmente obligatorio

Es el precio actual de la entrada o el pase para el evento.

Se debe proporcionar si se incluye el precio tachado.

Texto libre
Precio: StrikethroughPrice Opcional Es el precio original de la entrada o el pase para el evento. Texto libre
Texto destacado de precio Opcional Es el texto destacado del precio para mostrar una promoción, un evento o un descuento para miembros, si está disponible.

Texto libre

Tamaño de texto recomendado: Menos de 45 caracteres (el texto demasiado largo puede mostrar puntos suspensivos)

Categorías de contenido Opcional Describe la categoría del contenido en la entidad.

Lista de enumeraciones aptas

  • TYPE_MOVIES_AND_TV_SHOWS (ejemplo: Cine)
  • TYPE_DIGITAL_GAMES (ejemplo: deportes electrónicos)
  • TYPE_MUSIC (ejemplo: concierto)
  • TYPE_TRAVEL_AND_LOCAL (ejemplo: Tour, festival)
  • TYPE_HEALTH_AND_FITENESS (por ejemplo, clase de yoga)
  • TYPE_EDUCATION (ejemplo: clase)
  • TYPE_SPORTS (ejemplo: Partido de fútbol americano)
  • TYPE_DATING (ejemplo: reunión)

Consulta la sección Categoría de contenido para obtener orientación.

DisplayTimeWindow (opcional): Establece un período para que un contenido se muestre en la superficie
Fecha y hora de inicio Opcional

Es la marca de tiempo de época a partir de la cual se debe mostrar el contenido en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos
Fecha y hora de finalización Opcional

Es la marca de tiempo de época a partir de la cual el contenido ya no se mostrará en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos

LodgingEntity

Atributo Requisito Descripción Formato
URI de acción Obligatorio

Vínculo directo a la entidad en la app del proveedor.

Nota: Puedes usar vínculos directos para la atribución. Consulta estas Preguntas frecuentes

URI
Título Obligatorio Es el título de la entidad.

String

Tamaño de texto recomendado: Máximo 50 caracteres

Imágenes de pósteres Obligatorio

Solo mostraremos 1 imagen cuando se proporcionen varias. Se recomienda una relación de aspecto de 16:9.

Nota: Si se proporciona una insignia, asegúrate de que haya un espacio seguro de 24 dps en la parte superior y en la inferior de la imagen.

Consulta la sección Especificaciones de imagen para obtener más información.
Ubicación: país Obligatorio Es el país en el que se realiza el alojamiento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Ciudad Obligatorio Ciudad en la que se realiza el alojamiento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Dirección visible Obligatorio Es la dirección que se mostrará al usuario. Recomendamos incluir el nombre de la ciudad y, posiblemente, el estado o el país para la mayoría de los casos de uso. Incluye solo la dirección o el vecindario si el usuario está cerca de la ubicación, si la conoce o si la ciudad se incluye en el título del clúster. Si incluyes la dirección, proporciona una dirección concisa y usa abreviaturas siempre que sea posible (por ejemplo, "calle" en lugar de "calle").

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Dirección Opcional La dirección (si corresponde) del alojamiento

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Estado Opcional Estado o provincia (si corresponde) en el que se encuentra el alojamiento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: código postal Opcional El código postal (si corresponde) del alojamiento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Barrio Opcional Barrio (si corresponde) del alojamiento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Insignias Opcional

Cada distintivo puede ser texto libre (máx. 15 caracteres) o una imagen pequeña.

Insignia: texto Opcional

Título de la insignia

Nota: Se requiere texto o una imagen para la insignia.

Texto libre

Tamaño de texto recomendado: Máximo de 15 caracteres

Insignia: imagen Opcional

Imagen pequeña

Tratamiento especial de UX, por ejemplo, como una superposición de insignia en la miniatura de la imagen o el video

Nota: Se requiere texto o una imagen para la insignia.

Consulta la sección Especificaciones de imagen para obtener más información.
Descripción Opcional

Es un solo párrafo de texto que describe la entidad.

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado: 180 caracteres

Lista de subtítulos Opcional

Hasta 3 subtítulos, cada uno con una sola línea de texto

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado para cada subtítulo: Máximo 50 caracteres

AvailabilityTimeWindow - Hora de inicio localizada - Marca de tiempo Opcional Es la marca de tiempo de la época en la que se espera que el alojamiento esté abierto o disponible. Joda-Time Instant
AvailabilityTimeWindow - Hora de inicio localizada - Zona horaria Opcional Es la zona horaria en la que se espera que el alojamiento esté abierto o disponible.

DateTimeZone de Joda-Time

Consulta las Especificaciones de zona horaria para obtener más información.

AvailabilityTimeWindow - Hora de finalización localizada - Marca de tiempo Opcional Es la marca de tiempo de época hasta la que se espera que el alojamiento esté abierto o disponible. Joda-Time Instant
AvailabilityTimeWindow - Hora de finalización localizada - Zona horaria Opcional Es la zona horaria en la que se espera que el alojamiento esté abierto o disponible.

DateTimeZone de Joda-Time

Consulta las Especificaciones de zona horaria para obtener más información.

Calificación: Valor máximo Opcional

Es el valor máximo de la escala de calificación.

Se debe brindar si también se proporciona el valor actual de la calificación.

Número >= 0.0
Calificación: Valor actual Opcional

Es el valor actual de la escala de calificación.

Se debe proporcionar si también se proporciona el valor máximo de la calificación.

Número >= 0.0
Calificación: Cantidad Opcional

Es la cantidad de calificaciones del alojamiento.

Nota: Proporciona este campo si tu app quiere controlar cómo se muestra esta información a los usuarios. Proporciona la cadena concisa que se puede mostrar al usuario. Por ejemplo, si el recuento es de 1,000,000, considera usar abreviaturas como 1 M para que no se trunque en tamaños de pantalla más pequeños.

String
Calificación: Valor de recuento Opcional

Es la cantidad de calificaciones del alojamiento.

Nota: Proporciona este campo si no deseas controlar la lógica de abreviatura de la pantalla por tu cuenta. Si se incluyen tanto el recuento como el valor del recuento, usaremos el recuento para mostrarlo a los usuarios.

Largo
Precio - CurrentPrice Condicionalmente obligatorio

Es el precio actual del alojamiento.

Se debe brindar si se proporciona el precio tachado.

Texto libre
Precio: StrikethroughPrice Opcional Es el precio original del alojamiento, que aparecerá tachado en la IU. Texto libre
Texto destacado de precio Opcional Es el texto destacado del precio para mostrar una promoción, un evento o un descuento para miembros, si está disponible.

Texto libre

Tamaño de texto recomendado: Menos de 45 caracteres (el texto demasiado largo puede mostrar puntos suspensivos)

DisplayTimeWindow (opcional): Establece un período para que un contenido se muestre en la superficie
Fecha y hora de inicio Opcional

Es la marca de tiempo de época a partir de la cual se debe mostrar el contenido en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos
Fecha y hora de finalización Opcional

Es la marca de tiempo de época a partir de la cual el contenido ya no se mostrará en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos

StoreEntity

El objeto StoreEntity representa una tienda individual que los socios desarrolladores quieren publicar, como un lugar popular para comer o un restaurante que sea relevante para la experiencia de viaje de una persona.

Atributo Requisito Descripción Formato
Imágenes de pósteres Obligatorio Se debe proporcionar al menos una imagen. Consulta la sección Especificaciones de imagen para obtener más información.
URI de acción Obligatorio

Vínculo directo a la entidad en la app del proveedor.

Nota: Puedes usar vínculos directos para la atribución. Consulta estas Preguntas frecuentes

URI
Título Opcional Es el nombre de la tienda.

Texto libre

Tamaño de texto recomendado: Menos de 45 caracteres (el texto demasiado largo puede mostrar puntos suspensivos)

Ubicación Opcional Es la ubicación de la tienda.

Texto libre

Tamaño de texto recomendado: Menos de 45 caracteres (el texto demasiado largo puede mostrar puntos suspensivos)

Texto destacado Opcional Es el texto destacado para mostrar una promoción, un evento o una actualización de la tienda, si está disponible.

Texto libre

Tamaño de texto recomendado: Menos de 45 caracteres (el texto demasiado largo puede mostrar puntos suspensivos)

Condiciones del texto destacado Opcional Son las condiciones para el texto destacado.

Texto libre

Tamaño de texto recomendado: Menos de 45 caracteres (el texto demasiado largo puede mostrar puntos suspensivos)

Descripción Opcional Es una descripción de la tienda.

Texto libre

Tamaño de texto recomendado: Menos de 90 caracteres (el texto demasiado largo puede mostrar puntos suspensivos)

Categoría Opcional

Categoría de una tienda. En el contexto de los lugares para comer, puede ser cocina, como "francesa", "estadounidense moderna", "ramen" o "alta cocina".

Texto libre

Tamaño de texto recomendado: Menos de 45 caracteres (el texto demasiado largo puede mostrar puntos suspensivos)

Calificación: Valor máximo Opcional

Es el valor máximo de la escala de calificación.

Se debe brindar si también se proporciona el valor actual de la calificación.

Número >= 0.0
Calificación: Valor actual Opcional

Es el valor actual de la escala de calificación.

Se debe proporcionar si también se proporciona el valor máximo de la calificación.

Número >= 0.0
Calificación: Cantidad Opcional

Es la cantidad de calificaciones del alojamiento.

Nota: Proporciona este campo si tu app quiere controlar cómo se muestra esta información a los usuarios. Proporciona la cadena concisa que se puede mostrar al usuario. Por ejemplo, si el recuento es de 1,000,000, considera usar abreviaturas como 1 M para que no se trunque en tamaños de pantalla más pequeños.

String
Calificación: Valor de recuento Opcional

Es la cantidad de calificaciones del alojamiento.

Nota: Proporciona este campo si no deseas controlar la lógica de abreviatura de la pantalla por tu cuenta. Si se incluyen tanto el recuento como el valor del recuento, usaremos el recuento para mostrarlo a los usuarios.

Largo
DisplayTimeWindow (opcional): Establece un período para que un contenido se muestre en la superficie
Fecha y hora de inicio Opcional

Es la marca de tiempo de época a partir de la cual se debe mostrar el contenido en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos
Fecha y hora de finalización Opcional

Es la marca de tiempo de época a partir de la cual el contenido ya no se mostrará en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos

PointOfInterestEntity

Atributo Requisito Descripción Formato
URI de acción Obligatorio

Vínculo directo a la entidad en la app del proveedor.

Nota: Puedes usar vínculos directos para la atribución. Consulta estas Preguntas frecuentes

URI
Título Obligatorio Es el título de la entidad.

String

Tamaño de texto recomendado: Máximo 50 caracteres

Imágenes de pósteres Condicionalmente obligatorio

Solo mostraremos 1 imagen cuando se proporcionen varias. Se recomienda una relación de aspecto de 16:9

Nota: Se requiere una imagen si la entidad forma parte del clúster de recomendaciones. Si se proporciona una insignia, asegúrate de que haya un espacio seguro de 24 dp en la parte superior y en la inferior de la imagen.

Consulta la sección Especificaciones de imagen para obtener más información.
Tiempo de la participación más reciente Condicionalmente obligatorio

Es la marca de tiempo de época en la que el usuario interactuó por última vez con esta entidad.

Nota: Este campo es obligatorio si la entidad forma parte del clúster de búsqueda continua.

Joda-Time Instant
Ubicación: país Condicionalmente obligatorio

Es el país en el que se encuentra el punto de interés.

Nota: Este campo es obligatorio si la entidad forma parte de un clúster de recomendaciones.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Ciudad Condicionalmente obligatorio

Ciudad en la que se encuentra el punto de interés.

Nota: Este campo es obligatorio si la entidad forma parte de un clúster de recomendaciones.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Dirección visible Condicionalmente obligatorio

Es la dirección que se mostrará al usuario. Proporciona una dirección concisa, usando abreviaturas cuando sea posible (por ejemplo, "St" para "Street", "Ave" para "Avenue"). Es posible que esta cadena se trunque según el dispositivo y la configuración del usuario. Incluye el nombre de la ciudad para una identificación clara.

Nota: Este campo es obligatorio si la entidad forma parte de un clúster de recomendaciones.

Texto libre

Tamaño de texto recomendado: Máximo de 35 caracteres

Ubicación: Dirección Opcional La dirección (si corresponde) del lugar de interés

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Estado Opcional Estado o provincia (si corresponde) en el que se encuentra el punto de interés.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: código postal Opcional Código postal (si corresponde) del lugar de interés.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Barrio Opcional Barrio (si corresponde) del lugar de interés.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

AvailabilityTimeWindow - Hora de inicio localizada - Marca de tiempo Opcional Es la marca de tiempo de época en la que se espera que el punto de interés esté abierto o disponible. Joda-Time Instant
AvailabilityTimeWindow - Hora de inicio localizada - Zona horaria Opcional Es la zona horaria en la que se espera que el punto de interés esté abierto o disponible.

DateTimeZone de Joda-Time

Consulta las Especificaciones de zona horaria para obtener más información.

AvailabilityTimeWindow - Hora de finalización localizada - Marca de tiempo Opcional Es la marca de tiempo de la época hasta la que se espera que el punto de interés esté abierto o disponible. Joda-Time Instant
AvailabilityTimeWindow - Hora de finalización localizada - Zona horaria Opcional Es la zona horaria en la que se espera que el punto de interés esté abierto o disponible.

DateTimeZone de Joda-Time

Consulta las Especificaciones de zona horaria para obtener más información.

Insignias Opcional

Cada distintivo puede ser texto libre (máx. 15 caracteres) o una imagen pequeña.

Insignia: texto Opcional

Título de la insignia

Nota: Se requiere texto o una imagen para la insignia.

Texto libre

Tamaño de texto recomendado: Máximo de 15 caracteres

Insignia: imagen Opcional

Imagen pequeña

Tratamiento especial de UX, por ejemplo, como una superposición de insignia en la miniatura de la imagen o el video

Nota: Se requiere texto o una imagen para la insignia.

Consulta la sección Especificaciones de imagen para obtener más información.
Descripción Opcional

Es un solo párrafo de texto que describe la entidad.

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado: 180 caracteres

Lista de subtítulos Opcional

Hasta 3 subtítulos, cada uno con una sola línea de texto

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado para cada subtítulo: Máximo 50 caracteres

Calificación: Valor máximo Opcional

Es el valor máximo de la escala de calificación.

Se debe brindar si también se proporciona el valor actual de la calificación.

Número >= 0.0
Calificación: Valor actual Opcional

Es el valor actual de la escala de calificación.

Se debe proporcionar si también se proporciona el valor máximo de la calificación.

Número >= 0.0
Calificación: Cantidad Opcional

Es la cantidad de calificaciones del lugar de interés.

Nota: Proporciona este campo si tu app quiere controlar cómo se muestra esta información a los usuarios. Proporciona la cadena concisa que se puede mostrar al usuario. Por ejemplo, si el recuento es de 1,000,000, considera usar abreviaturas como 1 M para que no se trunque en tamaños de pantalla más pequeños.

String
Calificación: Valor de recuento Opcional

Es la cantidad de calificaciones del lugar de interés.

Nota: Proporciona este campo si no deseas controlar la lógica de abreviatura de la pantalla por tu cuenta. Si se incluyen tanto el recuento como el valor del recuento, usaremos el recuento para mostrarlo a los usuarios.

Largo
Precio - CurrentPrice Condicionalmente obligatorio

Es el precio actual de las entradas o el pase de entrada para el punto de interés.

Se debe proporcionar si se incluye el precio tachado.

Texto libre
Precio: StrikethroughPrice Opcional Es el precio original de las entradas o el pase de entrada para el punto de interés. Texto libre
Texto destacado de precio Opcional Es el texto destacado del precio para mostrar una promoción, un evento o un descuento para miembros, si está disponible.

Texto libre

Tamaño de texto recomendado: Menos de 45 caracteres (el texto demasiado largo puede mostrar puntos suspensivos)

Categorías de contenido Opcional Describe la categoría del contenido en la entidad.

Lista de enumeraciones aptas

  • TYPE_TRAVEL_AND_LOCAL
  • TYPE_MOVIES_AND_TV_SHOWS (ejemplo: cine)
  • TYPE_MEDICAL (ejemplo: hospital)
  • TYPE_EDUCATION (ejemplo: escuela)
  • TYPE_SPORTS (ejemplo: estadio)

Consulta la sección Categoría de contenido para obtener orientación.

DisplayTimeWindow (opcional): Establece un período para que un contenido se muestre en la superficie
Fecha y hora de inicio Opcional

Es la marca de tiempo de época a partir de la cual se debe mostrar el contenido en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos
Fecha y hora de finalización Opcional

Es la marca de tiempo de época a partir de la cual el contenido ya no se mostrará en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos

RestaurantReservationEntity

Atributo Requisito Descripción Formato
URI de acción Obligatorio

Vínculo directo a la entidad en la app del proveedor.

Nota: Puedes usar vínculos directos para la atribución. Consulta estas Preguntas frecuentes

URI
Título Obligatorio Es el título de la entidad.

String

Tamaño de texto recomendado: Máximo 50 caracteres

Hora de inicio de la reserva localizada (marca de tiempo) Obligatorio Es la marca de tiempo de época en la que se espera que comience la reserva. Joda-Time Instant
Hora de inicio de la reserva localizada: zona horaria Obligatorio Zona horaria en la que se espera que comience la reserva.

DateTimeZone de Joda-Time

Consulta las Especificaciones de zona horaria para obtener más información.

Ubicación: país Obligatorio País en el que se encuentra el restaurante.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Ciudad Obligatorio Es la ciudad en la que se encuentra el restaurante.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Dirección visible Obligatorio Es la dirección del restaurante que se mostrará al usuario.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Dirección Opcional Dirección (si corresponde) del restaurante

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Estado Opcional El estado o la provincia (si corresponde) en el que se encuentra el restaurante.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: código postal Opcional El código postal (si corresponde) del restaurante.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Barrio Opcional El vecindario (si corresponde) del restaurante.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Imágenes de pósteres Opcional Solo mostraremos 1 imagen cuando se proporcionen varias. Se recomienda una relación de aspecto de 16:9. Consulta la sección Especificaciones de imagen para obtener más información.
Descripción Opcional

Es un solo párrafo de texto que describe la entidad.

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado: 180 caracteres

Lista de subtítulos Opcional

Hasta 3 subtítulos, cada uno con una sola línea de texto

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado para cada subtítulo: Máximo 50 caracteres

Tamaño de la tabla Opcional La cantidad de personas en el grupo de reserva Número entero > 0
DisplayTimeWindow (opcional): Establece un período para que un contenido se muestre en la superficie
Fecha y hora de inicio Opcional

Es la marca de tiempo de época a partir de la cual se debe mostrar el contenido en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos
Fecha y hora de finalización Opcional

Es la marca de tiempo de época a partir de la cual el contenido ya no se mostrará en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos

EventReservationEntity

Atributo Requisito Descripción Formato
URI de acción Obligatorio

Vínculo directo a la entidad en la app del proveedor.

Nota: Puedes usar vínculos directos para la atribución. Consulta estas Preguntas frecuentes

URI
Título Obligatorio Es el título de la entidad.

String

Tamaño de texto recomendado: Máximo 50 caracteres

Hora de inicio localizada: Marca de tiempo Obligatorio

Es la marca de tiempo de época en la que se espera que comience el evento.

Joda-Time Instant
Hora de inicio localizada: zona horaria Obligatorio

Zona horaria en la que se espera que comience el evento.

DateTimeZone de Joda-Time

Consulta las Especificaciones de zona horaria para obtener más información.

Modo de evento Obligatorio

Es un campo para indicar si el evento será virtual, presencial o ambos.

Enumeración: VIRTUAL, IN_PERSON o HYBRID
Ubicación: país Condicionalmente obligatorio

Es el país en el que se lleva a cabo el evento.

Nota: Este campo es obligatorio para los eventos que son PRESENCIALES o HÍBRIDOS.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Ciudad Condicionalmente obligatorio

Es la ciudad en la que se lleva a cabo el evento.

Nota: Este campo es obligatorio para los eventos que son PRESENCIALES o HÍBRIDOS.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Dirección visible Condicionalmente obligatorio

Es la dirección o el nombre del lugar donde se llevará a cabo el evento que se debe mostrar al usuario.

Nota: Este campo es obligatorio para los eventos que son PRESENCIALES o HÍBRIDOS.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Dirección Opcional Dirección de la calle (si corresponde) de la ubicación en la que se lleva a cabo el evento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Estado Opcional Estado o provincia (si corresponde) en el que se organiza el evento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: código postal Opcional El código postal (si corresponde) de la ubicación en la que se organiza el evento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Barrio Opcional El vecindario (si corresponde) en el que se organiza el evento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Imágenes de pósteres Opcional

Solo mostraremos 1 imagen cuando se proporcionen varias. Se recomienda una relación de aspecto de 16:9

Nota: Se recomienda incluir una imagen. Si se proporciona una insignia, asegúrate de que haya un espacio seguro de 24 dp en la parte superior y en la inferior de la imagen.

Consulta la sección Especificaciones de imagen para obtener más información.
Hora de finalización localizada: Marca de tiempo Opcional

Es la marca de tiempo de época en la que se espera que finalice el evento.

Joda-Time Instant
Hora de finalización localizada: zona horaria Opcional

Zona horaria en la que se espera que finalice el evento.

DateTimeZone de Joda-Time

Consulta las Especificaciones de zona horaria para obtener más información.

Proveedor de servicios: Nombre Opcional

Es el nombre del proveedor de servicios.

Nota: Se requiere texto o una imagen para el proveedor de servicios.

Texto libre. Por ejemplo, el nombre del organizador del evento o de la gira
Proveedor de servicios: Imagen Opcional

Logotipo o imagen del proveedor de servicios.

Nota: Se requiere texto o una imagen para el proveedor de servicios.

Consulta la sección Especificaciones de imagen para obtener más información.
Descripción Opcional

Es un solo párrafo de texto que describe la entidad.

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado: 180 caracteres

Lista de subtítulos Opcional

Hasta 3 subtítulos, cada uno con una sola línea de texto

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado para cada subtítulo: Máximo 50 caracteres

Insignias Opcional

Cada distintivo puede ser texto libre (máx. 15 caracteres) o una imagen pequeña.

Insignia: texto Opcional

Título de la insignia

Nota: Se requiere texto o una imagen para la insignia.

Texto libre

Tamaño de texto recomendado: Máximo de 15 caracteres

Insignia: imagen Opcional

Imagen pequeña

Tratamiento especial de UX, por ejemplo, como una superposición de insignia en la miniatura de la imagen o el video

Nota: Se requiere texto o una imagen para la insignia.

Consulta la sección Especificaciones de imagen para obtener más información.
ID de reserva Opcional Es el ID de la reserva del evento. Texto libre
Precio - CurrentPrice Condicionalmente obligatorio

Es el precio actual de la entrada o el pase para el evento.

Se debe proporcionar si se incluye el precio tachado.

Texto libre
Precio: StrikethroughPrice Opcional Es el precio original de la entrada o el pase para el evento. Texto libre
Texto destacado de precio Opcional Es el texto destacado del precio para mostrar una promoción, un evento o un descuento para miembros, si está disponible.

Texto libre

Tamaño de texto recomendado: Menos de 45 caracteres (el texto demasiado largo puede mostrar puntos suspensivos)

Calificación: Valor máximo Opcional

Es el valor máximo de la escala de calificación.

Se debe brindar si también se proporciona el valor actual de la calificación.

Número >= 0.0
Calificación: Valor actual Opcional

Es el valor actual de la escala de calificación.

Se debe proporcionar si también se proporciona el valor máximo de la calificación.

Número >= 0.0
Calificación: Cantidad Opcional

Es la cantidad de calificaciones del evento.

Nota: Proporciona este campo si tu app quiere controlar cómo se muestra esta información a los usuarios. Proporciona la cadena concisa que se puede mostrar al usuario. Por ejemplo, si el recuento es de 1,000,000, considera usar abreviaturas como 1 M para que no se trunque en tamaños de pantalla más pequeños.

String
Calificación: Valor de recuento Opcional

Es la cantidad de calificaciones del evento.

Nota: Proporciona este campo si no deseas controlar la lógica de abreviatura de la pantalla por tu cuenta. Si se incluyen tanto el recuento como el valor del recuento, usaremos el recuento para mostrarlo a los usuarios.

Largo
Categorías de contenido Opcional Describe la categoría del contenido en la entidad.

Lista de enumeraciones aptas

  • TYPE_MOVIES_AND_TV_SHOWS (ejemplo: Cine)
  • TYPE_DIGITAL_GAMES (ejemplo: deportes electrónicos)
  • TYPE_MUSIC (ejemplo: concierto)
  • TYPE_TRAVEL_AND_LOCAL (ejemplo: Tour, festival)
  • TYPE_HEALTH_AND_FITENESS (por ejemplo, clase de yoga)
  • TYPE_EDUCATION (ejemplo: clase)
  • TYPE_SPORTS (ejemplo: Partido de fútbol americano)
  • TYPE_DATING (ejemplo: reunión)

Consulta la sección Categoría de contenido para obtener orientación.

DisplayTimeWindow (opcional): Establece un período para que un contenido se muestre en la superficie
Fecha y hora de inicio Opcional

Es la marca de tiempo de época a partir de la cual se debe mostrar el contenido en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos
Fecha y hora de finalización Opcional

Es la marca de tiempo de época a partir de la cual el contenido ya no se mostrará en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos

LodgingReservationEntity

Atributo Requisito Descripción Formato
URI de acción Obligatorio

Vínculo directo a la entidad en la app del proveedor.

Nota: Puedes usar vínculos directos para la atribución. Consulta estas Preguntas frecuentes

URI
Título Obligatorio Es el título de la entidad.

Texto libre. Por ejemplo, "Tu estadía a partir del 12 de diciembre".

Tamaño de texto recomendado: Máximo 50 caracteres

Hora de registro de entrada localizada: Marca de tiempo Obligatorio Es la marca de tiempo de época que representa la hora de registro de la reservación. Joda-Time Instant
Hora de registro de entrada localizada: zona horaria Obligatorio Es la zona horaria en la que existe la hora de entrada para la reserva.

DateTimeZone de Joda-Time

Consulta las Especificaciones de zona horaria para obtener más información.

Hora de registro de salida localizada: Marca de tiempo Obligatorio Es la marca de tiempo de época que representa la hora de salida de la reserva. Joda-Time Instant
Hora de registro de salida localizada: zona horaria Obligatorio Es la zona horaria en la que existe la hora de salida para la reserva.

DateTimeZone de Joda-Time

Consulta las Especificaciones de zona horaria para obtener más información.

Ubicación: país Obligatorio Es el país en el que se encuentra el alojamiento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Ciudad Obligatorio Es la ciudad en la que se encuentra el alojamiento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Dirección visible Obligatorio Es la dirección que se mostrará al usuario. Proporciona una dirección concisa, usando abreviaturas cuando sea posible (por ejemplo, "St" para "Street", "Ave" para "Avenue"). Es posible que esta cadena se trunque según el dispositivo y la configuración del usuario. Incluye el nombre de la ciudad para una identificación clara.

Texto libre

Tamaño de texto recomendado: Máximo de 35 caracteres

Ubicación: Dirección Opcional La dirección (si corresponde) del alojamiento

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Estado Opcional Estado o provincia (si corresponde) en el que se encuentra el alojamiento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: código postal Opcional El código postal (si corresponde) del alojamiento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación: Barrio Opcional Barrio (si corresponde) del alojamiento.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Imágenes de pósteres Opcional

Solo mostraremos 1 imagen cuando se proporcionen varias. Se recomienda una relación de aspecto de 16:9.

Nota: Si se proporciona una insignia, asegúrate de que haya un espacio seguro de 24 dps en la parte superior y en la inferior de la imagen.

Consulta la sección Especificaciones de imagen para obtener más información.
Descripción Opcional

Es un solo párrafo de texto que describe la entidad.

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado: 180 caracteres

Lista de subtítulos Opcional

Hasta 3 subtítulos, cada uno con una sola línea de texto

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado para cada subtítulo: Máximo 50 caracteres

ID de reserva Opcional Es el ID de la reserva de alojamiento. Texto libre
Calificación: Valor máximo Opcional

Es el valor máximo de la escala de calificación.

Se debe brindar si también se proporciona el valor actual de la calificación.

Número >= 0.0
Calificación: Valor actual Opcional

Es el valor actual de la escala de calificación.

Se debe proporcionar si también se proporciona el valor máximo de la calificación.

Número >= 0.0
Calificación: Cantidad Opcional

Es la cantidad de calificaciones del alojamiento.

Nota: Proporciona este campo si tu app quiere controlar cómo se muestra esta información a los usuarios. Proporciona la cadena concisa que se puede mostrar al usuario. Por ejemplo, si el recuento es de 1,000,000, considera usar abreviaturas como 1 M para que no se trunque en tamaños de pantalla más pequeños.

String
Calificación: Valor de recuento Opcional

Es la cantidad de calificaciones del alojamiento.

Nota: Proporciona este campo si no deseas controlar la lógica de abreviatura de la pantalla por tu cuenta. Si se incluyen tanto el recuento como el valor del recuento, usaremos el recuento para mostrarlo a los usuarios.

Largo
Precio - CurrentPrice Condicionalmente obligatorio

Es el precio actual del alojamiento.

Se debe brindar si se proporciona el precio tachado.

Texto libre
Precio: StrikethroughPrice Opcional Es el precio original del alojamiento, que aparecerá tachado en la IU. Texto libre
Texto destacado de precio Opcional Es el texto destacado del precio para mostrar una promoción, un evento o un descuento para miembros, si está disponible.

Texto libre

Tamaño de texto recomendado: Menos de 45 caracteres (el texto demasiado largo puede mostrar puntos suspensivos)

DisplayTimeWindow (opcional): Establece un período para que un contenido se muestre en la superficie
Fecha y hora de inicio Opcional

Es la marca de tiempo de época a partir de la cual se debe mostrar el contenido en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos
Fecha y hora de finalización Opcional

Es la marca de tiempo de época a partir de la cual el contenido ya no se mostrará en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos

TransportationReservationEntity

Atributo Requisito Descripción Formato
URI de acción Obligatorio

Vínculo directo a la entidad en la app del proveedor.

Nota: Puedes usar vínculos directos para la atribución. Consulta estas Preguntas frecuentes

URI
Título Obligatorio Es el título de la entidad.

Texto libre. Por ejemplo, "SFO a SAN".

Tamaño de texto recomendado: Máximo 50 caracteres

Tipo de transporte Obligatorio Es el modo o tipo de transporte de la reserva. Enum: FLIGHT, TRAIN, BUS o FERRY
Hora de salida localizada: marca de tiempo Obligatorio Es la marca de tiempo de época que representa la hora de partida. Joda-Time Instant
Hora de salida localizada: zona horaria Obligatorio Es la zona horaria de la hora de salida.

DateTimeZone de Joda-Time

Consulta las Especificaciones de zona horaria para obtener más información.

Hora de llegada localizada: Marca de tiempo Obligatorio Es la marca de tiempo de época que representa la hora de llegada. Joda-Time Instant
Hora de llegada localizada: zona horaria Obligatorio Zona horaria de la hora de llegada.

DateTimeZone de Joda-Time

Consulta las Especificaciones de zona horaria para obtener más información.

Número de transporte Obligatorio El número de vuelo, autobús, tren o ferry/crucero Texto libre
Hora de embarque localizada (marca de tiempo) Obligatorio Es la marca de tiempo de época que representa la hora de embarque de la reserva (si corresponde). Joda-Time Instant
Hora de embarque localizada: zona horaria Obligatorio Zona horaria de la hora de embarque de la reserva (si corresponde)

DateTimeZone de Joda-Time

Consulta las Especificaciones de zona horaria para obtener más información.

Ubicación de partida: país Opcional Es el país de salida.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación de salida: Ciudad Opcional Ciudad de salida

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación de partida: Dirección visible Opcional Es la ubicación de partida que se mostrará al usuario.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación de partida: Dirección Opcional Dirección (si corresponde) de la ubicación de partida

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación de salida: Estado Opcional Estado o provincia (si corresponde) de la ubicación de partida.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación de salida: código postal Opcional El código postal (si corresponde) de la ubicación de partida.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación de partida: vecindario Opcional Barrio (si corresponde) de la ubicación de partida.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación de llegada: país Opcional Es el país de llegada.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación de llegada: Ciudad Opcional Ciudad de llegada

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación de llegada: Dirección visible Opcional Es la ubicación de llegada que se mostrará al usuario.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación de llegada: dirección Opcional Dirección (si corresponde) de la ubicación de llegada

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación de llegada: Estado Opcional Estado o provincia (si corresponde) de la ubicación de llegada.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación de llegada: código postal Opcional El código postal (si corresponde) de la ubicación de llegada.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Ubicación de llegada: vecindario Opcional Barrio (si corresponde) de la ubicación de llegada.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Proveedor de servicios: Nombre Opcional

Es el nombre del proveedor de servicios.

Nota: Se requiere texto o una imagen para el proveedor de servicios.

Texto libre. Por ejemplo, nombre de la aerolínea
Proveedor de servicios: Imagen Opcional

Logotipo o imagen del proveedor de servicios.

Nota: Se requiere texto o una imagen para el proveedor de servicios.

Consulta la sección Especificaciones de imagen para obtener más información.
Imágenes de pósteres Opcional

Solo mostraremos 1 imagen cuando se proporcionen varias. Se recomienda una relación de aspecto de 16:9.

Consulta la sección Especificaciones de imagen para obtener más información.
Descripción Opcional

Es un solo párrafo de texto que describe la entidad.

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado: 180 caracteres

Lista de subtítulos Opcional

Hasta 3 subtítulos, cada uno con una sola línea de texto

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado para cada subtítulo: Máximo 50 caracteres

ID de reserva Opcional Es el ID de la reserva de transporte. Texto libre
Precio - CurrentPrice Condicionalmente obligatorio

Es el precio actual de la reserva.

Se debe brindar si se proporciona el precio tachado.

Texto libre
Precio: StrikethroughPrice Opcional Es el precio original de la reserva, que aparecerá tachado en la IU. Texto libre
Texto destacado de precio Opcional Es el texto destacado del precio para mostrar una promoción, un evento o un descuento para miembros, si está disponible.

Texto libre

Tamaño de texto recomendado: Menos de 45 caracteres (el texto demasiado largo puede mostrar puntos suspensivos)

DisplayTimeWindow (opcional): Establece un período para que un contenido se muestre en la superficie
Fecha y hora de inicio Opcional

Es la marca de tiempo de época a partir de la cual se debe mostrar el contenido en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos
Fecha y hora de finalización Opcional

Es la marca de tiempo de época a partir de la cual el contenido ya no se mostrará en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos

VehicleRentalReservationEntity

Atributo Requisito Descripción Formato
URI de acción Obligatorio

Vínculo directo a la entidad en la app del proveedor.

Nota: Puedes usar vínculos directos para la atribución. Consulta estas Preguntas frecuentes

URI
Título Obligatorio Es el título de la entidad.

Texto libre. Por ejemplo, "Avis Union Square SF".

Tamaño de texto recomendado: Máximo 50 caracteres

Hora de retiro localizada: Marca de tiempo Obligatorio Es la marca de tiempo de época que representa la hora de retiro de la reserva. Joda-Time Instant
Hora de retiro localizada: zona horaria Obligatorio Zona horaria de la hora de retiro de la reserva.

DateTimeZone de Joda-Time

Consulta las Especificaciones de zona horaria para obtener más información.

Hora de devolución localizada: Marca de tiempo Opcional Es la marca de tiempo de época que representa la hora de salida de la reserva. Joda-Time Instant
Hora de devolución localizada: zona horaria Opcional Zona horaria de la hora de salida de la reserva.

DateTimeZone de Joda-Time

Consulta las Especificaciones de zona horaria para obtener más información.

Dirección de retiro: país Opcional Es el país de la ubicación de retiro.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Dirección de retiro: ciudad Opcional Ciudad de la ubicación de retiro

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Dirección de retiro: Dirección visible Opcional Es la ubicación de retiro que se mostrará al usuario.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Dirección de retiro: Dirección Opcional Dirección (si corresponde) de la ubicación de retiro

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Dirección de retiro: Estado Opcional Estado o provincia (si corresponde) de la ubicación de retiro.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Dirección de retiro: Código postal Opcional El código postal (si corresponde) de la ubicación de retiro.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Dirección de retiro (vecindario) Opcional Vecindario (si corresponde) de la ubicación de retiro.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Dirección de devolución: país Opcional Es el país de la ubicación de devolución.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Dirección de devolución: Ciudad Opcional La ciudad de la ubicación de devolución.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Dirección de devolución: Dirección visible Opcional Es la ubicación de devolución que se mostrará al usuario.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Dirección de devolución: Dirección Opcional Dirección (si corresponde) de la ubicación de devolución

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Dirección de devolución: Estado Opcional Estado o provincia (si corresponde) de la ubicación de devolución.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Dirección de devolución: Código postal Opcional El código postal (si corresponde) de la ubicación de devolución.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Dirección de devolución: vecindario Opcional Barrio (si corresponde) de la ubicación de devolución.

Texto libre

Tamaño de texto recomendado: Máximo de 20 caracteres

Proveedor de servicios: Nombre Opcional

Es el nombre del proveedor de servicios.

Nota: Se requiere texto o una imagen para el proveedor de servicios.

Texto libre. Por ejemplo, "Avis Car Rental".
Proveedor de servicios: Imagen Opcional

Logotipo o imagen del proveedor de servicios.

Nota: Se requiere texto o una imagen para el proveedor de servicios.

Consulta la sección Especificaciones de imagen para obtener más información.
Imágenes de pósteres Opcional

Solo mostraremos 1 imagen cuando se proporcionen varias. Se recomienda una relación de aspecto de 16:9.

Consulta la sección Especificaciones de imagen para obtener más información.
Descripción Opcional

Es un solo párrafo de texto que describe la entidad.

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado: 180 caracteres

Lista de subtítulos Opcional

Hasta 3 subtítulos, cada uno con una sola línea de texto

Nota: Se mostrará al usuario la lista de descripciones o subtítulos, pero no ambas.

Texto libre

Tamaño de texto recomendado para cada subtítulo: Máximo 50 caracteres

ID de confirmación Opcional Es el ID de confirmación de la reserva de alquiler de vehículo. Texto libre
Precio - CurrentPrice Condicionalmente obligatorio

Es el precio actual de la reserva.

Se debe brindar si se proporciona el precio tachado.

Texto libre
Precio: StrikethroughPrice Opcional Es el precio original de la reserva, que aparecerá tachado en la IU. Texto libre
Texto destacado de precio Opcional Es el texto destacado del precio para mostrar una promoción, un evento o un descuento para miembros, si está disponible.

Texto libre

Tamaño de texto recomendado: Menos de 45 caracteres (el texto demasiado largo puede mostrar puntos suspensivos)

DisplayTimeWindow (opcional): Establece un período para que un contenido se muestre en la superficie
Fecha y hora de inicio Opcional

Es la marca de tiempo de época a partir de la cual se debe mostrar el contenido en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos
Fecha y hora de finalización Opcional

Es la marca de tiempo de época a partir de la cual el contenido ya no se mostrará en la superficie.

Si no la estableces, el contenido será apto para mostrarse en la superficie.

Marca de tiempo de época en milisegundos

Especificaciones de imagen

En esta tabla, se indican las especificaciones obligatorias para los recursos de imagen:

Relación de aspecto Píxeles mínimos Píxeles recomendados

Formato cuadrado (1 x 1)

Preferido

300 x 300 1,200 x 1,200
Formato horizontal (1.91 x 1) 600 x 314 1,200 x 628
Formato vertical (4 x 5) 480 x 600 960 x 1,200

Las imágenes deben estar alojadas en CDN públicas para que Google pueda acceder a ellas.

Formatos de archivo

PNG, JPG, GIF estático, WebP

Tamaño máximo de los archivos

5120 KB

Recomendaciones adicionales

  • Área segura para la imagen: Coloca el contenido importante en el 80% central de la imagen.
  • Usa un fondo transparente para que la imagen se muestre correctamente cuando se configure el tema oscuro o claro.

Especificaciones de zona horaria

Prefiere el ID (por ejemplo, "America/Los_Angeles") al desplazamiento (por ejemplo, "-07:00").

Ejemplo de uso: DateTimeZone.forID("America/Los_Angeles")

Categoría de contenido

La categoría de contenido permite que las apps publiquen contenido que pertenece a varias categorías. Esto asigna el contenido a algunas de las categorías predefinidas, como las siguientes:

  • 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

Las imágenes deben estar alojadas en CDN públicas para que Google pueda acceder a ellas.

Lineamientos para usar las categorías de contenido

  1. Algunas entidades, como ArticleEntity y GenericFeaturedEntity, son aptas para usar cualquiera de las categorías de contenido. En el caso de otras entidades, como EventEntity, EventReservationEntity y PointOfInterestEntity, solo es apto un subconjunto de estas categorías. Verifica la lista de categorías aptas para un tipo de entidad antes de completar la lista.
  2. Usa el tipo de entidad específico para algunas categorías de contenido en lugar de una combinación de las entidades genéricas y ContentCategory:

  3. El campo ContentCategory es opcional y debe dejarse en blanco si el contenido no pertenece a ninguna de las categorías mencionadas anteriormente.

  4. En caso de que se proporcionen varias categorías de contenido, indícalas en orden de relevancia para el contenido, con la categoría de contenido más relevante en primer lugar de la lista.

Paso 2: Proporciona los datos de los clústeres

Se recomienda que el trabajo de publicación de contenido se ejecute en segundo plano (por ejemplo, con WorkManager) y se programe con frecuencia o en eventos (por ejemplo, cada vez que el usuario abre la app o cuando acaba de agregar algo a su carrito).

AppEngageTravelClient es responsable de publicar los clústeres.

Hay cinco APIs para publicar clústeres en el cliente:

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishReservationCluster
  • publishContinueSearchCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteReservationCluster
  • deleteContinueSearchCluster
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

Esta API se usa para verificar si el servicio está disponible para la integración y si el contenido se puede presentar en el dispositivo.

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

Esta API se usa para publicar una lista de objetos 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());

Cuando el servicio recibe la solicitud, se realizan las siguientes acciones en una transacción:

  • Se quitan los datos existentes de RecommendationCluster del socio desarrollador.
  • Los datos de la solicitud se analizan y se almacenan en el clúster de Recommendation actualizado.

En caso de error, se rechaza la solicitud completa y se mantiene el estado existente.

publishFeaturedCluster

Esta API se usa para publicar una lista de objetos FeaturedCluster.

Kotlin

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

Cuando el servicio recibe la solicitud, se realizan las siguientes acciones en una transacción:

  • Se quitan los datos existentes de FeaturedCluster del socio desarrollador.
  • Los datos de la solicitud se analizan y se almacenan en el clúster de Featured actualizado.

En caso de error, se rechaza la solicitud completa y se mantiene el estado existente.

publishReservationCluster

Esta API se usa para publicar un objeto ReservationCluster.

Kotlin

client.publishReservationCluster(
    PublishReservationClusterRequest.Builder()
      .setReservationCluster(
        ReservationCluster.Builder()
          .addLodgingReservationEntity(lodgingReservationEntity)
          .addVehicleRentalReservationEntity(vehicleRentalReservationEntity)
          .addTransportationReservationEntity(transportationReservationEntity)
          .addEventReservationEntity(eventReservationEntity)
          .addRestaurantReservationEntity(restaurantReservationEntity)
          .build())
      .build())

Java

client.publishReservationCluster(
            new PublishReservationClusterRequest.Builder()
                .setReservationCluster(
                    new ReservationCluster.Builder()
                        .addLodgingReservationEntity(lodgingReservationEntity)
                        .addVehicleRentalReservationEntity(vehicleRentalReservationEntity)
                        .addTransportationReservationEntity(transportationReservationEntity)
                        .addEventReservationEntity(eventReservationEntity)
                        .addRestaurantReservationEntity(restaurantReservationEntity)
                        .build())
                .build());

Cuando el servicio recibe la solicitud, se realizan las siguientes acciones en una transacción:

  • Se quitan los datos existentes de ReservationCluster del socio desarrollador.
  • Los datos de la solicitud se analizan y se almacenan en el clúster de Reservation actualizado.

En caso de error, se rechaza la solicitud completa y se mantiene el estado existente.

publishContinueSearchCluster

Esta API se usa para publicar una lista de objetos ContinueSearchCluster.

Kotlin

client.publishContinueSearchCluster(
    PublishContinueSearchClusterRequest.Builder()
      .setContinueSearchCluster(
        ContinueSearchCluster.Builder()
          .addPointOfInterestEntity(entity1)
          .addPointOfInterestEntity(entity2)
          .build())
      .build())

Java

client.publishContinueSearchCluster(
            new PublishContinueSearchClusterRequest.Builder()
                .setContinueSearchCluster(
                    new ContinueSearchCluster.Builder()
                        .addPointOfInterestEntity(entity1)
                        .addPointOfInterestEntity(entity2)
                        .build())
                .build());

Cuando el servicio recibe la solicitud, se realizan las siguientes acciones en una transacción:

  • Se quitan los datos existentes de ContinueSearchCluster del socio desarrollador.
  • Los datos de la solicitud se analizan y se almacenan en el clúster de Continue Search actualizado.

En caso de error, se rechaza la solicitud completa y se mantiene el estado existente.

publishUserAccountManagementRequest

Esta API se usa para publicar una tarjeta de acceso. La acción de acceso dirige a los usuarios a la página de acceso de la app para que esta pueda publicar contenido (o proporcionar contenido más personalizado).

Los siguientes metadatos forman parte de la tarjeta de acceso:

Atributo Requisito Descripción
URI de acción Obligatorio Vínculo directo a la acción (p. ej., navega a la página de acceso de la app)
Imagen Opcional: En caso de que no se proporcione el título, debes brindar uno.

Imagen que se muestra en la tarjeta

Imágenes con una relación de aspecto de 16 × 9, con una resolución de 1264 × 712

Título Opcional: En caso de que no se proporcione la imagen, debes brindar una. Título en la tarjeta
Texto de acción Opcional Texto que se muestra en la CTA (p. ej., Acceder)
Subtítulo Opcional Subtítulo opcional en la tarjeta

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

Cuando el servicio recibe la solicitud, se realizan las siguientes acciones en una transacción:

  • Se quitan los datos existentes de UserAccountManagementCluster del socio desarrollador.
  • Los datos de la solicitud se analizan y se almacenan en el clúster de UserAccountManagementCluster actualizado.

En caso de error, se rechaza la solicitud completa y se mantiene el estado existente.

updatePublishStatus

Si, por algún motivo empresarial interno, no se publica ninguno de los clústeres, te recomendamos que actualices el estado de publicación a través de la API de updatePublishStatus. A continuación, explicamos por qué es importante:

  • Proporcionar el estado en todas las situaciones, incluso cuando el contenido está publicado (STATUS == PUBLISHED), es fundamental para propagar los paneles que usan este estado explícito para transmitir el estado y otras métricas de tu integración.
  • Si no se publica contenido pero el estado de integración no está roto (STATUS == NOT_PUBLISHED), Google puede evitar activar alertas en los paneles de estado de la app. Confirma que el contenido no se publicó debido a una situación prevista desde el punto de vista del proveedor.
  • Ayuda a los desarrolladores a proporcionar estadísticas sobre cuándo se publican los datos y cuándo no.
  • Google puede usar los códigos de estado para sugerir al usuario que realice determinadas acciones en la app de modo que pueda ver el contenido de la app o superarlo.

La lista de códigos de estado de publicación aptos es la siguiente:

// 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

Si el contenido no se publica debido a que un usuario no accedió, te recomendamos que publiques la tarjeta de acceso. Si, por algún motivo, los proveedores no pueden publicar la tarjeta de acceso, recomendamos que llamen a la API de updatePublishStatus con el código de estado 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());

deleteRecommendationClusters

Esta API se usa para borrar el contenido de los clústeres de Recommendation.

Kotlin

client.deleteRecommendationClusters()

Java

client.deleteRecommendationClusters();

Cuando el servicio recibe la solicitud, quita los datos existentes de los clústeres de Recommendation. En caso de error, se rechaza la solicitud completa y se mantiene el estado existente.

deleteFeaturedCluster

Esta API se usa para borrar el contenido del clúster de Featured.

Kotlin

client.deleteFeaturedCluster()

Java

client.deleteFeaturedCluster();

Cuando el servicio recibe la solicitud, quita los datos existentes del clúster de Featured. En caso de error, se rechaza la solicitud completa y se mantiene el estado existente.

deleteReservationCluster

Esta API se usa para borrar el contenido del clúster de Reservation.

Kotlin

client.deleteReservationCluster()

Java

client.deleteReservationCluster();

Cuando el servicio recibe la solicitud, quita los datos existentes del clúster de Reservation. En caso de error, se rechaza la solicitud completa y se mantiene el estado existente.

deleteUserManagementCluster

Esta API se usa para borrar el contenido del clúster de UserAccountManagement.

Kotlin

client.deleteUserManagementCluster()

Java

client.deleteUserManagementCluster();

Cuando el servicio recibe la solicitud, quita los datos existentes del clúster de UserAccountManagement. En caso de error, se rechaza la solicitud completa y se mantiene el estado existente.

deleteContinueSearchCluster

Esta API se usa para borrar el contenido del clúster de Continue Search.

Kotlin

client.deleteContinueSearchCluster()

Java

client.deleteContinueSearchCluster();

Cuando el servicio recibe la solicitud, quita los datos existentes del clúster de Continue Search. En caso de error, se rechaza la solicitud completa y se mantiene el estado existente.

deleteClusters

Esta API se usa para borrar el contenido de un tipo de clúster determinado.

Kotlin

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

Java

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

Cuando el servicio recibe la solicitud, quita los datos existentes de todos los clústeres que coincidan con los tipos de clúster especificados. Los clientes pueden optar por pasar uno o varios tipos de clústeres. En caso de error, se rechaza la solicitud completa y se mantiene el estado existente.

Manejo de errores

Te recomendamos que escuches el resultado de la tarea de las APIs de publicación, de manera que se pueda realizar una acción de seguimiento para recuperar y volver a enviar una tarea con éxito.

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

El error se muestra como una AppEngageException con la causa incluida como un código de error.

Código de error Nombre del error Nota
1 SERVICE_NOT_FOUND El servicio no está disponible en el dispositivo determinado.
2 SERVICE_NOT_AVAILABLE El servicio está disponible en el dispositivo determinado, pero no en el momento de la llamada (por ejemplo, está inhabilitado explícitamente).
3 SERVICE_CALL_EXECUTION_FAILURE No se pudo ejecutar la tarea debido a problemas con los subprocesos. En este caso, se puede volver a intentar.
4 SERVICE_CALL_PERMISSION_DENIED El llamador no tiene permiso para realizar la llamada de servicio.
5 SERVICE_CALL_INVALID_ARGUMENT La solicitud contiene datos no válidos (por ejemplo, una cantidad de clústeres mayor que la permitida).
6 SERVICE_CALL_INTERNAL Hay un error en el servicio.
7 SERVICE_CALL_RESOURCE_EXHAUSTED La llamada de servicio se realiza con demasiada frecuencia.

Paso 3: Controla los intents de transmisión

Además de realizar llamadas a las APIs de publicación de contenido a través de un trabajo, también se requiere configurar un BroadcastReceiver para recibir la solicitud de publicación de contenido.

El objetivo de los intents de transmisión es principalmente reactivar apps y forzar la sincronización de datos. Los intents de transmisión no están diseñados para enviarse con mucha frecuencia. Solo se activan cuando el servicio de Engage determina que el contenido puede estar inactivo (por ejemplo, si es de hace una semana). De esa manera, será más probable que el usuario tenga una experiencia de contenido actualizada, incluso si la aplicación no se ejecutó durante un período prolongado.

El BroadcastReceiver debe configurarse de las siguientes dos maneras:

  • Registra de forma dinámica una instancia de la clase BroadcastReceiver con Context.registerReceiver(). Esto permite la comunicación desde aplicaciones que aún están activas en la memoria.

Kotlin

class AppEngageBroadcastReceiver : BroadcastReceiver(){
  // Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
  // is received
  // Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
  // Trigger continue search cluster publish when PUBLISH_CONTINUE_SEARCH
  // broadcast is received
  // Trigger reservation cluster publish when PUBLISH_RESERVATION broadcast is
  // received
}

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

// Register Recommendation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)

// Register Featured Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)

// Register Continue Search Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(com.google.android.engage.travel.service.Intents.ACTION_PUBLISH_CONTINUE_SEARCH),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)

// Register Reservation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(com.google.android.engage.travel.service.Intents.ACTION_PUBLISH_RESERVATION),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)
}

Java

class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received

// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received

// Trigger continue search cluster publish when PUBLISH_CONTINUE_SEARCH
// broadcast is received

// Trigger reservation cluster publish when PUBLISH_RESERVATION broadcast is
// received
}

public static void registerBroadcastReceivers(Context context) {

context = context.getApplicationContext();

// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

// Register Continue Search Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.travel.service.Intents.ACTION_PUBLISH_CONTINUE_SEARCH),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

// Register Reservation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.travel.service.Intents.ACTION_PUBLISH_RESERVATION),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

}
  • Declara de forma estática una implementación con la etiqueta <receiver> en tu archivo AndroidManifest.xml. Esto permite que la aplicación reciba intents de transmisión cuando no está en ejecución y que la aplicación publique el contenido.

<application>
   <receiver
      android:name=".AppEngageBroadcastReceiver"
      android:permission="com.google.android.engage.REQUEST_ENGAGE_DATA"
      android:exported="true"
      android:enabled="true">
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.travel.PUBLISH_CONTINUE_SEARCH" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.travel.PUBLISH_RESERVATION" />
      </intent-filter>
   </receiver>
</application>

El servicio envía los siguientes intents:

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION Te recomendamos que inicies una llamada a publishRecommendationClusters cuando recibas este intent.
  • com.google.android.engage.action.PUBLISH_FEATURED Te recomendamos que inicies una llamada a publishFeaturedCluster cuando recibas este intent.
  • com.google.android.engage.action.travel.PUBLISH_CONTINUE_SEARCH Te recomendamos que inicies una llamada a publishContinueSearchCluster cuando recibas este intent.
  • com.google.android.engage.action.travel.PUBLISH_RESERVATION Te recomendamos que inicies una llamada a publishReservationCluster cuando recibas este intent.

Flujo de trabajo de integración

Si deseas obtener una guía paso a paso para verificar la integración una vez que esta se complete, consulta Flujo de trabajo de integración para desarrolladores de Engage.

Preguntas frecuentes

Consulta Preguntas frecuentes sobre el SDK de Engage para ver preguntas frecuentes.

Contacto

Comunícate con engage-developers@google.com si tienes preguntas durante el proceso de integración.

Próximos pasos

Después de completar esta integración, sigue estos pasos:

  • Envía un correo electrónico a engage-developers@google.com y adjunta el APK integrado que está listo para que Google lo pruebe.
  • Google realiza una verificación y revisiones internas para asegurarse de que la integración funcione según lo previsto. Si se necesitan cambios, Google se comunica contigo con los detalles necesarios.
  • Cuando se completen las pruebas y no se necesiten cambios, Google se comunicará contigo para notificarte que puedes comenzar a publicar el APK integrado y actualizado en Play Store.
  • Después de que Google confirme que tu APK actualizado se publicó en Play Store, los clústeres de Recommendation, Featured, Reservation y Continue Search se podrán publicar y estar visibles para los usuarios.