Engage SDK には、iOS や Roku TV などの Android プラットフォーム以外のプラットフォームで一貫した「続きを見る」エクスペリエンスを提供するための REST API が用意されています。この API を使用すると、デベロッパーは、Android プラットフォーム以外のプラットフォームからオプトインしたユーザーの「続きを見る」ステータスを更新できます。
前提条件
- まず、オンデバイスの Engage SDK ベースの統合を完了する必要があります。この重要なステップにより、Google のユーザー ID とアプリの
AccountProfileの間に必要な関連付けが確立されます。 - API アクセスと認証: Google Cloud プロジェクトで API を表示して有効にするには、許可リストのプロセスを完了する必要があります。すべての API リクエストで認証が必要です。
アクセス権を取得する
Google Cloud コンソールで API を表示して有効にするには、アカウントを登録する必要があります。
- Google Workspace のお客様 ID が必要です。利用できない場合は、Google Workspace と、API の呼び出しに使用する Google アカウントを設定する必要があります。
- Google Workspace に関連付けられているメールアドレスを使用して、Google Cloud コンソールでアカウントを設定します。
- 新しいプロジェクトを作成する。
- API 認証用のサービス アカウントを作成します。サービス アカウントを作成すると、次の 2 つのアイテムが作成されます。
- サービス アカウント ID。
- サービス アカウント キーを含む JSON ファイル。このファイルは安全に保管してください。これは、後でクライアントを API に対して認証するために必要になります。
- Workspace と関連付けられた Google アカウントで REST API を使用できるようになりました。変更が反映されると、サービス アカウントから API を呼び出す準備ができたかどうかが通知されます。
- 委任された API 呼び出しを行う準備をするには、こちらの手順に沿って操作します。
継続クラスタを公開する
Engage データを公開するには、次の構文を使用して publishContinuationCluster API に POST リクエストを送信します。
https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/profiles/{profile_id}/publishContinuationCluster
ここで
package_name: メディア プロバイダのパッケージ名accountId: システム内のユーザー アカウントの一意の ID。これは、デバイス上のパスで使用されているaccountIdと一致する必要があります。profileId: システム内のアカウントにおけるユーザーのプロファイルの一意の ID。デバイス上のパスで使用されている profileId と一致する必要があります。
プロファイルのないアカウントの URL は次のとおりです。
https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/publishContinuationCluster
リクエストのペイロードは entities フィールドに表示されます。entities は、コンテンツ エンティティのリストを表します。このリストは、MovieEntity、TVEpisodeEntity、LiveStreamingVideoEntity、VideoClipEntity の 1 つ以上で構成されます。これは必須項目です。
リクエストの本文
フィールド |
型 |
必須 |
説明 |
エンティティ |
MediaEntity オブジェクトのリスト |
はい |
コンテンツ エンティティのリスト(最大 5 個)。上位 5 つのみが保持され、残りは破棄されます。ユーザーがすべてのエンティティの視聴を完了したことを示すために、空のリストを使用できます。 |
フィールド entities には、個々の movieEntity、tvEpisodeEntity、liveStreamingVideoEntity、videoClipEntity が含まれます。
フィールド |
型 |
説明 |
movieEntity |
MovieEntity |
ContinuationCluster 内の映画を表すオブジェクト。 |
tvEpisodeEntity |
TvEpisodeEntity |
ContinuationCluster 内のテレビ エピソードを表すオブジェクト。 |
liveStreamingVideoEntity |
LiveStreamingVideoEntity |
ContinuationCluster 内のライブ ストリーミング動画を表すオブジェクト。 |
videoClipEntity |
VideoClipEntity |
ContinuationCluster 内の動画クリップを表すオブジェクト。 |
entities 配列内の各オブジェクトは、使用可能な MediaEntity タイプ(MovieEntity、TvEpisodeEntity、LiveStreamingVideoEntity、VideoClipEntity のいずれか)と、共通フィールドおよびタイプ固有のフィールドである必要があります。
次のコード スニペットは、publishContinuationCluster API のリクエスト本文のペイロードを示しています。
{
"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"
}
}
}
]
}
Engage データを削除する
clearCluster API を使用して Engage データを削除します。
継続クラスタデータを削除するには、次の構文を使用して clearCluster API に POST リクエストを送信します。
https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/profiles/{profile_id}/clearCluster
ここで
package_name: メディア プロバイダのパッケージ名。accountId: システム内のユーザー アカウントの一意の ID。これは、デバイス上のパスで使用されているaccountIdと一致する必要があります。profileId: システム内のアカウントにおけるユーザーのプロファイルの一意の ID。デバイス上のパスで使用されている profileId と一致する必要があります。
プロフィールのないアカウントの URL は次のとおりです。
https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/clearCluster
clearCluster API のペイロードには、reason という 1 つのフィールドのみが含まれます。このフィールドには、データを削除する理由を指定する DeleteReason が含まれます。
{
"reason": "DELETE_REASON_LOSS_OF_CONSENT"
}
テスト
データの送信が成功したら、ユーザー テスト アカウントを使用して、想定されるコンテンツが、ターゲットとする Google サーフェス(Google TV、Android および iOS の Google TV モバイルアプリなど)の「続きを見る」行に表示されることを確認します。
テストでは、数分程度の妥当な伝播遅延を許容し、映画の一部を視聴する、エピソードを最後まで視聴するなど、視聴要件を遵守してください。詳しくは、アプリ デベロッパー向けの Watch Next ガイドラインをご覧ください。