Integra la función de seguir mirando con la API de REST

El SDK de Engage ofrece una API de REST para proporcionar una experiencia coherente de "Ver a continuación" en plataformas que no son de Android, como iOS y Roku TV. La API permite a los desarrolladores actualizar el estado de "Ver a continuación" para los usuarios que aceptaron participar en plataformas que no son de Android.

Requisitos previos

  • Primero debes completar la integración basada en el SDK de Engage integrado en el dispositivo. Este paso fundamental establece la asociación necesaria entre el ID de usuario de Google y el AccountProfile de tu app.
  • Acceso y autenticación de la API: Para ver y habilitar la API en tu proyecto de Google Cloud, debes pasar por un proceso de lista de entidades permitidas. Todas las solicitudes a la API requieren autenticación.

Obtén acceso

Para obtener acceso para ver y habilitar la API en la consola de Google Cloud, tu cuenta debe estar inscrita.

  1. El ID de cliente de Google Workspace debe estar disponible. Si no está disponible, es posible que debas configurar Google Workspace, así como cualquier Cuenta de Google que quieras usar para llamar a la API.
  2. Configura una cuenta con la consola de Google Cloud usando un correo electrónico asociado con Google Workspace.
  3. Crea un proyecto nuevo.
  4. Crea una cuenta de servicio para la autenticación de la API. Una vez que crees la cuenta de servicio, tendrás dos elementos:
    • Un ID de cuenta de servicio
    • Un archivo JSON con la clave de tu cuenta de servicio Mantén este archivo seguro. Lo necesitarás para autenticar tu cliente en la API más adelante.
  5. Workspace y las Cuentas de Google asociadas ahora pueden usar las APIs de REST. Una vez que se propague el cambio, recibirás una notificación para saber si tus cuentas de servicio pueden llamar a la API.
  6. Sigue estos pasos para prepararte para realizar una llamada delegada a la API.

Publica el clúster de Continuation

Para publicar los datos de Engage, realiza una solicitud POST a la API de publishContinuationCluster con la siguiente sintaxis.

https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/profiles/{profile_id}/publishContinuationCluster

En la que:

  • package_name: Es el nombre del paquete del proveedor de contenido multimedia.
  • accountId: Es el ID único de la cuenta del usuario en tu sistema. Debe coincidir con el accountId que se usa en la ruta integrado en el dispositivo.
  • profileId: Es el ID único del perfil del usuario dentro de la cuenta en tu sistema. Debe coincidir con el profileId que se usa en la ruta integrado en el dispositivo.

La URL de la cuenta sin perfil es la siguiente:

https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/publishContinuationCluster

La carga útil de la solicitud se representa en el campo entities. entities representa una lista de entidades de contenido, que puede constar de uno o más de los siguientes elementos: MovieEntity, TVEpisodeEntity, LiveStreamingVideoEntity o VideoClipEntity. Este es un campo obligatorio.

Cuerpo de la solicitud

Campo

Tipo

Obligatorio

Descripción

entidades

Lista de objetos MediaEntity

Lista de entidades de contenido con un máximo de 5. Solo se conservarán los cinco primeros y se descartará el resto. Se permite una lista vacía para indicar que el usuario terminó de ver todas las entidades.

El campo entities contiene movieEntity, tvEpisodeEntity, liveStreamingVideoEntity y videoClipEntity individuales.

Campo

Tipo

Descripción

movieEntity

MovieEntity

Un objeto que representa una película dentro de ContinuationCluster.

tvEpisodeEntity

TvEpisodeEntity

Un objeto que representa un episodio de TV dentro de ContinuationCluster.

liveStreamingVideoEntity

LiveStreamingVideoEntity

Un objeto que representa un video de transmisión en vivo dentro de ContinuationCluster.

videoClipEntity

VideoClipEntity

Un objeto que representa un videoclip dentro de ContinuationCluster.

Cada objeto del array de entidades debe ser uno de los tipos de MediaEntity disponibles, es decir, MovieEntity, TvEpisodeEntity, LiveStreamingVideoEntity o VideoClipEntity, junto con campos comunes y específicos del tipo.

En el siguiente fragmento de código, se muestra la carga útil del cuerpo de la solicitud para la API de publishContinuationCluster.

{
  "entities": [
    {
      "movieEntity": {
        "watch_next_type": "WATCH_NEXT_TYPE_CONTINUE",
        "name": "Movie1",
        "platform_specific_playback_uris": [
        {
          "uri": "https://www.example.com/movie_entity_uri_for_android",
          "platforms": [
            "PLATFORM_ANDROID_TV",
            "PLATFORM_ANDROID"
          ]
        },
        {
          "uri": "https://www.example.com/movie_entity_uri_for_iOS",
          "platforms": [
            "PLATFORM_IOS"
          ]
        }
        ],
        "poster_images": [
          {
            "url": "http://www.example.com/movie1_img1.png",
            "width": 1920,
            "height": 1080,
            "accessibility_text": "Movie 1 HD poster"
          },
          {
            "url": "http://www.example.com/movie1_imag2.png",
            "width": 640,
            "height": 360,
            "accessibility_text": "Movie 1 SD poster"
          }
        ],
        "last_engagement_time_millis": 864600000,
        "duration_millis": 5400000,
        "last_play_back_position_time_millis": 3241111
      }
    },
    {
      "tvEpisodeEntity": {
        "watch_next_type": "WATCH_NEXT_TYPE_CONTINUE",
        "name": "TV SERIES EPISODE 1",
        "platform_specific_playback_uris": [
        {
          "uri": "https://www.example.com/episode_entity_uri_for_android_mobile",
          "platforms": [
            "PLATFORM_ANDROID"
          ]
        },
        {
          "uri": "https://www.example.com/episode_entity_uri_for_android_tv",
          "platforms": [
            "PLATFORM_ANDROID_TV"
          ]
        },
        {
          "uri": "https://www.example.com/episode_entity_uri_for_iOS",
          "platforms": [
            "PLATFORM_IOS"
          ]
        }
        ],
        "poster_images": [
          {
            "url": "http://www.example.com/episode1_img1.png",
            "width": 1920,
            "height": 1080,
            "accessibility_text": "Episode 1 HD poster"
          },
          {
            "url": "http://www.example.com/episode1_imag2.png",
            "width": 640,
            "height": 360,
            "accessibility_text": "Episode 1 SD poster"
          }
        ],
        "last_engagement_time_millis": 864600000,
        "duration_millis": 1800000,
        "last_play_back_position_time_millis": 2141231,
        "episode_display_number": "1",
        "season_number": "1",
        "show_title": "title"
      }
    },
    {
      "liveStreamingVideoEntity": {
        "name": "Live Sports Championship",
        "watch_next_type": "WATCH_NEXT_TYPE_CONTINUE",
        "last_engagement_time_millis": 1780978284000,
        "last_play_back_position_time_millis": 1800000,
        "duration_millis": 7200000,
        "platform_specific_playback_uris": [
          {
            "uri": "https://www.example.com/live_streaming_entity_uri_for_android_tv",
            "platforms": ["PLATFORM_ANDROID_TV"]
          }
        ],
        "poster_images": [
          {
            "url": "http://www.example.com/live_stream_image1.png",
            "width": 1920,
            "height": 1080,
            "accessibility_text": "Live Sports Championship Cover Image"
          }
        ],
        "start_time_epoch_millis": 1780976484000,
        "broadcaster": "Global Sports Network",
        "broadcaster_icon": {
          "url": "https://www.example.com/gsports.jpg",
          "width": 512,
          "height": 512,
          "accessibility_text": "Global Sports Network Logo"
        }
      }
    },
    {
      "videoClipEntity": {
        "name": "How to Brew the Perfect Espresso",
        "watch_next_type": "WATCH_NEXT_TYPE_CONTINUE",
        "last_engagement_time_millis": 1780978284000,
        "last_play_back_position_time_millis": 120000,
        "duration_millis": 600000,
        "platform_specific_playback_uris": [
          {
            "uri": "https://www.example.com/video_clip_entity_uri_for_android_tv",
            "platforms": ["PLATFORM_ANDROID_TV"]
          }
        ],
        "poster_images": [
          {
            "url": "http://www.example.com/video_clip_image1.png",
            "width": 1920,
            "height": 1080,
            "accessibility_text": "Espresso Tutorial Cover Image"
          }
        ],
        "created_time_epoch_millis": 1780900000000,
        "creator": "Coffee Enthusiast John",
        "creator_image": {
          "url": "https://www.example.com/image/thumb/creators/john_avatar.jpg",
          "width": 256,
          "height": 256,
          "accessibility_text": "John's Avatar"
        }
      }
    }
  ]
}

Borra los datos de Engage

Usa la API de clearClusters para quitar los datos de Engage.

Para borrar los datos del clúster de Continuation, realiza una solicitud POST a la API de clearClusters con la siguiente sintaxis.

https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/profiles/{profile_id}/clearClusters

En la que:

  • package_name: Es el nombre del paquete del proveedor de contenido multimedia.
  • accountId: Es el ID único de la cuenta del usuario en tu sistema. Debe coincidir con el accountId que se usa en la ruta integrado en el dispositivo.
  • profileId: Es el ID único del perfil del usuario dentro de la cuenta en tu sistema. Debe coincidir con el profileId que se usa en la ruta integrado en el dispositivo.

La carga útil de la API de clearClusters contiene solo un campo, reason, que contiene un DeleteReason que especifica el motivo para quitar los datos.

{
  "reason": "DELETE_REASON_LOSS_OF_CONSENT"
}

Pruebas

Después de publicar los datos correctamente, usa una cuenta de prueba de usuario para verificar que el contenido esperado aparezca en la fila de "Ver a continuación" en las plataformas de Google objetivo, como Google TV y las apps para dispositivos móviles de Google TV para Android y iOS.

En las pruebas, permite una demora de propagación razonable de unos minutos y cumple con los requisitos de visualización, como ver parte de una película o terminar un episodio. Consulta los lineamientos de "Ver a continuación" para desarrolladores de apps para obtener más detalles.