El SDK de Engage ofrece una API de REST para proporcionar una experiencia de seguir mirando coherente en plataformas que no son de Android, como iOS y Roku TV. La API permite que los desarrolladores actualicen el estado de "Seguir mirando" para los usuarios que habilitaron la opción desde plataformas que no son de Android.
Requisitos previos
- Primero, debes finalizar 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
AccountProfilede 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.
Obtener acceso
Para obtener acceso y habilitar la API en la consola de Google Cloud, tu cuenta debe estar inscrita.
- El ID de cliente de Google Workspace debería estar disponible. Si no está disponible, es posible que debas configurar Google Workspace y las Cuentas de Google que quieras usar para llamar a la API.
- Configura una cuenta con la consola de Google Cloud usando un correo electrónico asociado con Google Workspace.
- Crea un proyecto nuevo.
- 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. La necesitarás para autenticar tu cliente en la API más adelante.
- Workspace y las Cuentas de Google asociadas ahora pueden usar las APIs de REST. Una vez que se haya propagado el cambio, se te notificará si la API está lista para que la llamen tus cuentas de servicio.
- Sigue estos pasos para prepararte para realizar una llamada a la API delegada.
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 elaccountIdque se usa en la ruta de acceso integrada 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 de acceso 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 |
Sí |
Es la 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 mirar todas las entidades. |
El campo entities contiene movieEntity, tvEpisodeEntity,
liveStreamingVideoEntity y videoClipEntity individuales.
Campo |
Tipo |
Descripción |
movieEntity |
MovieEntity |
Es un objeto que representa una película dentro de ContinuationCluster. |
tvEpisodeEntity |
TvEpisodeEntity |
Es un objeto que representa un episodio de TV dentro de ContinuationCluster. |
liveStreamingVideoEntity |
LiveStreamingVideoEntity |
Es un objeto que representa una transmisión de video en vivo dentro de ContinuationCluster. |
videoClipEntity |
VideoClipEntity |
Es un objeto que representa un clip de video 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 clearCluster para quitar los datos de Engage.
Para borrar los datos del clúster de continuación, realiza una solicitud POST a la API de clearCluster con la siguiente sintaxis.
https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/profiles/{profile_id}/clearCluster
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 elaccountIdque se usa en la ruta de acceso integrada 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 de acceso 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}/clearCluster
La carga útil de la API de clearCluster incluye 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 seguir viendo en las plataformas de Google de destino, como Google TV y las apps para dispositivos móviles de Google TV para iOS y Android.
En las pruebas, permite un retraso de propagación razonable de unos minutos y cumple con los requisitos de reproducción, como mirar parte de una película o terminar un episodio. Consulta los lineamientos de Mirar a continuación para desarrolladores de apps para obtener más detalles.