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
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.
Obtén acceso
Para obtener acceso para ver y habilitar la API en la consola de Google Cloud, tu cuenta debe estar inscrita.
- 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.
- 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. Lo 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 propague el cambio, recibirás una notificación para saber si tus cuentas de servicio pueden llamar a la API.
- 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 elaccountIdque 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 |
Sí |
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 elaccountIdque 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.