Funkcja Kontynuuj oglądanie korzysta z klastra kontynuacji, aby wyświetlać niedokończone filmy i kolejne odcinki z tego samego sezonu serialu z różnych aplikacji w jednej grupie interfejsu. Możesz wyróżnić ich podmioty w tym klastrze kontynuacji. Z tego przewodnika dowiesz się, jak zwiększyć zaangażowanie użytkowników dzięki funkcji „Oglądaj dalej” za pomocą pakietu Engage SDK.
Przygotowanie
Zanim zaczniesz, wykonaj te czynności:
zaktualizować docelowy interfejs API do wersji 19 lub nowszej.
Dodaj bibliotekę
com.google.android.engage
do aplikacji:Do integracji możesz użyć oddzielnych pakietów SDK: jednego do aplikacji mobilnych i jednego do aplikacji na telewizory.
Telefon
dependencies { implementation 'com.google.android.engage:engage-core:1.5.5 }
TV
dependencies { implementation 'com.google.android.engage:engage-tv:1.0.2 }
W pliku
AndroidManifest.xml
ustaw środowisko usługi Engage na produkcyjne.Telefon
<meta-data android:name="com.google.android.engage.service.ENV" android:value="PRODUCTION" />
TV
<meta-data android:name="com.google.android.engage.service.ENV" android:value="PRODUCTION" />
Dodaj uprawnienia dla
WRITE_EPG_DATA
w przypadku pliku APK na telewizor<uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" />
Weryfikuj publikowanie wiarygodnych treści za pomocą usługi działającej w tle, takiej jak
androidx.work
, do planowania.Aby zapewnić płynne oglądanie, publikuj dane dotyczące kontynuowania oglądania, gdy wystąpią te zdarzenia:
- Pierwsze logowanie: gdy użytkownik loguje się po raz pierwszy, opublikuj dane, aby jego historia oglądania była od razu dostępna.
- Tworzenie lub przełączanie profili (aplikacje z wieloma profilami): jeśli aplikacja obsługuje wiele profili, publikuj dane, gdy użytkownik tworzy lub przełącza profile.
- Przerwanie odtwarzania filmu: aby ułatwić użytkownikom powrót do miejsca, w którym skończyli oglądać film, publikuj dane, gdy wstrzymują lub zatrzymują film albo gdy zamykają aplikację podczas odtwarzania.
- Aktualizacje sekcji „Oglądaj dalej” (jeśli jest obsługiwana): gdy użytkownik usunie element z sekcji „Oglądaj dalej”, odzwierciedlaj tę zmianę, publikując zaktualizowane dane.
- Ukończenie filmu:
- W przypadku filmów usuń obejrzany film z sekcji Oglądaj dalej. Jeśli film jest częścią serii, dodaj kolejny film, aby utrzymać zaangażowanie użytkownika.
- W przypadku odcinków usuń ukończony odcinek i dodaj kolejny odcinek z serii, jeśli jest dostępny, aby zachęcić do dalszego oglądania.
Integracja
AccountProfile
Aby umożliwić spersonalizowane „kontynuowanie oglądania” w Google TV, podaj informacje o koncie i profilu. Użyj AccountProfile, aby podać:
Identyfikator konta: unikalny identyfikator, który reprezentuje konto użytkownika w Twojej aplikacji. Może to być rzeczywisty identyfikator konta lub odpowiednio zamaskowana wersja.
Identyfikator profilu (opcjonalnie): jeśli Twoja aplikacja obsługuje wiele profili w ramach jednego konta, podaj unikalny identyfikator konkretnego profilu użytkownika (ponownie, prawdziwy lub zaciemniony).
// If your app only supports account
val accountProfile = AccountProfile.Builder()
.setAccountId("your_users_account_id")
.build()
// If your app supports both account and profile
val accountProfile = AccountProfile.Builder()
.setAccountId("your_users_account_id")
.setProfileId("your_users_profile_id")
.build()
Tworzenie encji
Pakiet SDK ma zdefiniowane różne obiekty reprezentujące każdy typ produktu. Klaster Continuation obsługuje te jednostki:
Określ identyfikatory URI i obrazy plakatu dla tych elementów na poszczególnych platformach.
Utwórz też identyfikatory URI odtwarzania dla każdej platformy, np. Android TV, Android lub iOS, jeśli jeszcze tego nie zrobiono. Gdy użytkownik kontynuuje oglądanie na każdej platformie, aplikacja używa docelowego identyfikatora URI odtwarzania, aby odtworzyć treści wideo.
// Required. Set this when you want continue watching entities to show up on
// Google TV
val playbackUriTv = PlatformSpecificUri.Builder()
.setPlatformType(PlatformType.TYPE_ANDROID_TV)
.setActionUri(Uri.parse("https://www.example.com/entity_uri_for_tv"))
.build()
// Required. Set this when you want continue watching entities to show up on
// Google TV Android app, Entertainment Space, Playstore Widget
val playbackUriAndroid = PlatformSpecificUri.Builder()
.setPlatformType(PlatformType.TYPE_ANDROID_MOBILE)
.setActionUri(Uri.parse("https://www.example.com/entity_uri_for_android"))
.build()
// Optional. Set this when you want continue watching entities to show up on
// Google TV iOS app
val playbackUriIos = PlatformSpecificUri.Builder()
.setPlatformType(PlatformType.TYPE_IOS)
.setActionUri(Uri.parse("https://www.example.com/entity_uri_for_ios"))
.build()
val platformSpecificPlaybackUris =
Arrays.asList(playbackUriTv, playbackUriAndroid, playbackUriIos)
Obrazy plakatu wymagają identyfikatora URI i wymiarów w pikselach (wysokości i szerokości). Kieruj reklamy na różne urządzenia, przesyłając wiele obrazów plakatu, ale upewnij się, że wszystkie obrazy mają współczynnik proporcji 16:9 i minimalną wysokość 200 pikseli, aby zapewnić prawidłowe wyświetlanie elementu „Oglądaj dalej”, zwłaszcza w Entertainment Space Google. Obrazy o wysokości mniejszej niż 200 pikseli mogą się nie wyświetlać.
val images = Arrays.asList(
Image.Builder()
.setImageUri(Uri.parse("http://www.example.com/entity_image1.png"))
.setImageHeightInPixel(300)
.setImageWidthInPixel(169)
.build(),
Image.Builder()
.setImageUri(Uri.parse("http://www.example.com/entity_image2.png"))
.setImageHeightInPixel(640)
.setImageWidthInPixel(360)
.build()
// Consider adding other images for different form factors
)
MovieEntity
Ten przykład pokazuje, jak utworzyć MovieEntity
ze wszystkimi wymaganymi polami:
val movieEntity = MovieEntity.Builder()
.setWatchNextType(WatchNextType.TYPE_CONTINUE)
.setName("Movie name")
.addPlatformSpecificPlaybackUri(platformSpecificPlaybackUris)
.addPosterImages(images)
// Timestamp in millis for sample last engagement time 12/1/2023 00:00:00
.setLastEngagementTimeMillis(1701388800000)
// Suppose the duration is 2 hours, it is 72000000 in milliseconds
.setDurationMills(72000000)
// Suppose last playback offset is 1 hour, 36000000 in milliseconds
.setLastPlayBackPositionTimeMillis(36000000)
.build()
Podanie szczegółów, takich jak gatunki i oceny treści, umożliwia Google TV prezentowanie Twoich treści w bardziej dynamiczny sposób i łączenie ich z odpowiednimi widzami.
val genres = Arrays.asList("Action", "Science fiction")
val rating1 = RatingSystem.Builder().setAgencyName("MPAA").setRating("PG-13").build()
val contentRatings = Arrays.asList(rating1)
val movieEntity = MovieEntity.Builder()
...
.addGenres(genres)
.addContentRatings(contentRatings)
.build()
Jednostki pozostają automatycznie dostępne przez 60 dni, chyba że określisz krótszy czas wygaśnięcia. Niestandardowy okres ważności należy ustawić tylko wtedy, gdy chcesz, aby element został usunięty przed upływem domyślnego okresu.
// Set the expiration time to be now plus 30 days in milliseconds
val expirationTime = DisplayTimeWindow.Builder()
.setEndTimestampMillis(now().toMillis()+2592000000).build()
val movieEntity = MovieEntity.Builder()
...
.addAvailabilityTimeWindow(expirationTime)
.build()
TvEpisodeEntity
Ten przykład pokazuje, jak utworzyć element TvEpisodeEntity
ze wszystkimi wymaganymi polami:
val tvEpisodeEntity = TvEpisodeEntity.Builder()
.setWatchNextType(WatchNextType.TYPE_CONTINUE)
.setName("Episode name")
.addPlatformSpecificPlaybackUri(platformSpecificPlaybackUris)
.addPosterImages(images)
// Timestamp in millis for sample last engagement time 12/1/2023 00:00:00
.setLastEngagementTimeMillis(1701388800000)
.setDurationMills(72000000) // 2 hours in milliseconds
// 45 minutes and 15 seconds in milliseconds is 2715000
.setLastPlayBackPositionTimeMillis(2715000)
.setEpisodeNumber("2")
.setSeasonNumber("1")
.setShowTitle("Title of the show")
.build()
Ciąg numeru odcinka (np. "2"
) i ciąg numeru sezonu (np. "1"
) zostaną rozwinięte do odpowiedniej formy przed wyświetleniem na karcie „Kontynuuj oglądanie”. Pamiętaj, że powinny to być ciągi znaków numerycznych. Nie wpisuj „e2”, „episode 2”, „s1” ani „season 1”.
Jeśli dany serial telewizyjny ma tylko 1 sezon, ustaw numer sezonu na 1.
Aby zwiększyć szanse na to, że widzowie znajdą Twoje treści w Google TV, rozważ podanie dodatkowych danych, takich jak gatunki, oceny treści i okresy dostępności, ponieważ te szczegóły mogą ulepszyć wyświetlanie i opcje filtrowania.
val genres = Arrays.asList("Action", "Science fiction")
val rating1 = RatingSystem.Builder().setAgencyName("MPAA").setRating("PG-13").build()
val contentRatings = Arrays.asList(rating1)
val tvEpisodeEntity = TvEpisodeEntity.Builder()
...
.addGenres(genres)
.addContentRatings(contentRatings)
.setSeasonTitle("Season Title")
.setShowTitle("Show Title")
.build()
VideoClipEntity
Oto przykład tworzenia VideoClipEntity
ze wszystkimi wymaganymi polami.
VideoClipEntity
– klip wygenerowany przez użytkownika, np. film w YouTube.
val videoClipEntity = VideoClipEntity.Builder()
.setPlaybackUri(Uri.parse("https://www.example.com/uri_for_current_platform")
.setWatchNextType(WatchNextType.TYPE_CONTINUE)
.setName("Video clip name")
.addPlatformSpecificPlaybackUri(platformSpecificPlaybackUris)
.addPosterImages(images)
// Timestamp in millis for sample last engagement time 12/1/2023 00:00:00
.setLastEngagementTimeMillis(1701388800000)
.setDurationMills(600000) //10 minutes in milliseconds
.setLastPlayBackPositionTimeMillis(300000) //5 minutes in milliseconds
.addContentRating(contentRating)
.build()
Możesz opcjonalnie ustawić twórcę, obraz twórcy, czas utworzenia w milisekundach lub okno czasowe dostępności .
LiveStreamingVideoEntity
Oto przykład tworzenia LiveStreamingVideoEntity
ze wszystkimi wymaganymi polami.
val liveStreamingVideoEntity = LiveStreamingVideoEntity.Builder()
.setPlaybackUri(Uri.parse("https://www.example.com/uri_for_current_platform")
.setWatchNextType(WatchNextType.TYPE_CONTINUE)
.setName("Live streaming name")
.addPlatformSpecificPlaybackUri(platformSpecificPlaybackUris)
.addPosterImages(images)
// Timestamp in millis for sample last engagement time 12/1/2023 00:00:00
.setLastEngagementTimeMillis(1701388800000)
.setDurationMills(72000000) //2 hours in milliseconds
.setLastPlayBackPositionTimeMillis(36000000) //1 hour in milliseconds
.addContentRating(contentRating)
.build()
Opcjonalnie możesz ustawić czas rozpoczęcia, nadawcę, ikonę nadawcy lub przedział czasu dostępności dla elementu transmisji na żywo.
Szczegółowe informacje o atrybutach i wymaganiach znajdziesz w dokumentacji interfejsu API.
Podaj dane klastra kontynuacji
AppEngagePublishClient
odpowiada za publikowanie klastra kontynuacji.
Do publikowania obiektu publishContinuationCluster()
używasz metody publishContinuationCluster()
.ContinuationCluster
Najpierw użyj funkcji isServiceAvailable(), aby sprawdzić, czy usługa jest dostępna do integracji.
client.publishContinuationCluster(
PublishContinuationClusterRequest
.Builder()
.setContinuationCluster(
ContinuationCluster.Builder()
.setAccountProfile(accountProfile)
.addEntity(movieEntity1)
.addEntity(movieEntity2)
.addEntity(tvEpisodeEntity1)
.addEntity(tvEpisodeEntity2)
.setSyncAcrossDevices(true)
.build()
)
.build()
)
Gdy usługa otrzyma żądanie, w ramach jednej transakcji zostaną wykonane te działania:
- Istniejące dane
ContinuationCluster
od partnera dewelopera zostaną usunięte. - Dane z żądania są analizowane i zapisywane w zaktualizowanym
ContinuationCluster
.
W przypadku błędu całe żądanie jest odrzucane, a dotychczasowy stan jest zachowywany.
Interfejsy API publikowania to interfejsy API typu upsert, które zastępują istniejące treści. Jeśli chcesz zaktualizować konkretny element w obiekcie ContinuationCluster, musisz ponownie opublikować wszystkie elementy.
Dane ContinuationCluster powinny być podawane tylko w przypadku kont osób dorosłych. Publikuj tylko wtedy, gdy profil konta należy do osoby dorosłej.
Synchronizacja na różnych urządzeniach
Flaga SyncAcrossDevices
określa, czy dane ContinuationCluster
użytkownika mają być synchronizowane na różnych urządzeniach, takich jak telewizor, telefon, tablet itp. Synchronizacja między urządzeniami jest domyślnie wyłączona.
Wartości:
- true: dane ContinuationCluster są udostępniane na wszystkich urządzeniach użytkownika, aby zapewnić płynne oglądanie. Zdecydowanie zalecamy tę opcję, aby zapewnić jak najlepsze wrażenia na różnych urządzeniach.
- false: Dane ContinuationCluster są ograniczone do bieżącego urządzenia.
Uzyskiwanie zgody:
Aplikacja multimedialna musi zawierać wyraźne ustawienie umożliwiające włączanie i wyłączanie synchronizacji na różnych urządzeniach. Wyjaśnij użytkownikowi korzyści i zapisz jego preferencje, aby zastosować je w funkcji publishContinuationCluster.
// Example to allow cross device syncing.
client.publishContinuationCluster(
PublishContinuationClusterRequest
.Builder()
.setContinuationCluster(
ContinuationCluster.Builder()
.setAccountProfile(accountProfile)
.setSyncAcrossDevices(true)
.build()
)
.build()
)
Aby w pełni wykorzystać funkcję na różnych urządzeniach, sprawdź, czy aplikacja uzyskuje zgodę użytkownika, i włącz SyncAcrossDevices
, aby true
. Dzięki temu treści mogą być płynnie synchronizowane na różnych urządzeniach, co zwiększa wygodę użytkowników i ich zaangażowanie. Na przykład partner, który wdrożył tę funkcję, odnotował wzrost liczby kliknięć „Oglądaj dalej” o 40%
dzięki temu, że jego treści były wyświetlane na wielu urządzeniach.
Usuwanie danych dotyczących reklam wideo Discovery
Aby ręcznie usunąć dane użytkownika z serwera Google TV przed upływem standardowego 60-dniowego okresu przechowywania, użyj metody client.deleteClusters(). Po otrzymaniu prośby usługa usunie wszystkie dotychczasowe dane dotyczące odkrywania filmów z profilu konta lub z całego konta.
Wyliczenie DeleteReason
określa przyczynę usunięcia danych.
Poniższy kod usuwa dane „Oglądaj dalej” po wylogowaniu.
// If the user logs out from your media app, you must make the following call
// to remove continue watching data from the current google TV device,
// otherwise, the continue watching data will persist on the current
// google TV device until 60 days later.
client.deleteClusters(
DeleteClustersRequest.Builder()
.setAccountProfile(AccountProfile())
.setReason(DeleteReason.DELETE_REASON_USER_LOG_OUT)
.setSyncAcrossDevices(true)
.build()
)
Testowanie
Użyj aplikacji weryfikacyjnej, aby sprawdzić, czy integracja pakietu Engage SDK działa prawidłowo. Ta aplikacja na Androida udostępnia narzędzia, które pomagają sprawdzać dane i potwierdzać, że intencje transmisji są prawidłowo obsługiwane.
Po wywołaniu interfejsu API publikowania sprawdź, czy dane są prawidłowo publikowane, korzystając z aplikacji weryfikacyjnej. Klaster kontynuacji powinien być wyświetlany jako osobny wiersz w interfejsie aplikacji.
- Ustaw Engage Service Flag tylko w przypadku wersji nieprodukcyjnych w pliku manifestu Androida aplikacji.
- Zainstaluj i otwórz aplikację Engage Verify.
- Jeśli
isServiceAvailable
ma wartośćfalse
, kliknij przycisk „Przełącz”, aby włączyć. - Wpisz nazwę pakietu aplikacji, aby automatycznie wyświetlać opublikowane dane po rozpoczęciu publikowania.
- Przetestuj te działania w aplikacji:
- Zaloguj się.
- Przełącz się między profilami(jeśli to możliwe).
- Rozpocznij, a następnie wstrzymaj odtwarzanie filmu lub wróć na stronę główną.
- Zamknij aplikację podczas odtwarzania filmu.
- Usuń element z wiersza „Oglądaj dalej” (jeśli jest obsługiwany).
- Po każdej czynności sprawdź, czy aplikacja wywołała interfejs API
publishContinuationClusters
i czy dane są prawidłowo wyświetlane w aplikacji weryfikacyjnej. Aplikacja weryfikacyjna wyświetli zielony znacznik „Wszystko w porządku” w przypadku prawidłowo zaimplementowanych podmiotów.
Rysunek 1. Weryfikacja aplikacji zakończona sukcesem Aplikacja do weryfikacji oznaczy wszystkie problematyczne elementy.
Rysunek 2. Błąd aplikacji weryfikacyjnej Aby rozwiązać problemy z elementami, użyj pilota do telewizora, aby wybrać i kliknąć element w aplikacji weryfikacyjnej. Konkretne problemy zostaną wyświetlone i wyróżnione na czerwono (patrz przykład poniżej).
Rysunek 3. Szczegóły błędu aplikacji do weryfikacji
API REST
Pakiet Engage SDK udostępnia interfejs REST API, który zapewnia spójne działanie funkcji „Oglądaj dalej” na platformach innych niż Android, takich jak iOS czy Roku TV. Interfejs API umożliwia deweloperom aktualizowanie stanu „Oglądaj dalej” w przypadku użytkowników, którzy wyrazili zgodę na tę funkcję, na platformach innych niż Android.
Wymagania wstępne
- Najpierw musisz zakończyć integrację opartą na pakiecie SDK Engage na urządzeniu.
Ten ważny krok tworzy niezbędne powiązanie między identyfikatorem użytkownika Google a
AccountProfile
aplikacji. - Dostęp do interfejsu API i uwierzytelnianie: aby wyświetlić i włączyć interfejs API w projekcie Google Cloud, musisz przejść proces dodawania do listy dozwolonych. Wszystkie żądania interfejsu API wymagają uwierzytelnienia.
Uzyskiwanie dostępu
Aby uzyskać dostęp do interfejsu API w konsoli Google Cloud i móc go włączyć, musisz zarejestrować swoje konto.
- Identyfikator klienta Google Workspace powinien być dostępny. Jeśli nie jest dostępny, może być konieczne skonfigurowanie Google Workspace oraz kont Google, których chcesz używać do wywoływania interfejsu API.
- Skonfiguruj konto w Google Cloud Console, używając adresu e-mail powiązanego z Google Workspace.
- Tworzenie nowego projektu
- Utwórz konto usługi do uwierzytelniania interfejsu API. Po utworzeniu konta usługi będziesz mieć 2 elementy:
- Identyfikator konta usługi.
- Plik JSON z kluczem konta usługi. Zabezpiecz ten plik, ponieważ będzie on później potrzebny do uwierzytelniania klienta w interfejsie API.
- Workspace i powiązane z nim konta Google mogą teraz korzystać z interfejsów API REST. Gdy zmiana zostanie wprowadzona, otrzymasz powiadomienie o tym, czy interfejs API jest gotowy do wywoływania przez Twoje konta usługi.
- Aby przygotować się do wykonania wywołania delegowanego interfejsu API, wykonaj te czynności.
Opublikuj klaster kontynuacji
Aby opublikować dane dotyczące reklam wideo Discovery, wyślij żądanie POST do interfejsu APIpublishContinuationCluster
, używając tej składni:
https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/profiles/{profile_id}/publishContinuationCluster
Gdzie:
package_name
: nazwa pakietu dostawcy multimediów.accountId
: unikalny identyfikator konta użytkownika w Twoim systemie. Musi on odpowiadaćaccountId
używanemu w ścieżce na urządzeniu.profileId
: unikalny identyfikator profilu użytkownika na koncie w Twoim systemie. Musi odpowiadać identyfikatorowi profileId używanemu w ścieżce na urządzeniu.
Adres URL konta bez profilu to:
https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/publishContinuationCluster
Ładunek żądania jest przedstawiony w polu entities
. entities
reprezentuje listę elementów treści, które mogą być MovieEntity
lub
TVEpisodeEntity
. To pole jest wymagane.
Treść żądania
Pole |
Typ |
Wymagany |
Opis |
encje, |
Lista obiektów MediaEntity |
Tak |
Lista elementów treści (maksymalnie 5). Zachowywanych jest tylko 5 najważniejszych elementów, a pozostałe są usuwane. Pusta lista oznacza, że użytkownik obejrzał już wszystkie elementy. |
Pole entities
zawiera poszczególne wartości movieEntity
i tvEpisodeEntity
.
Pole |
Typ |
Wymagany |
Opis |
movieEntity |
MovieEntity |
Tak |
Obiekt reprezentujący film w obiekcie ContinuationCluster. |
tvEpisodeEntity |
TvEpisodeEntity |
Tak |
Obiekt reprezentujący odcinek serialu w ramach ContinuationCluster. |
Każdy obiekt w tablicy entities musi być jednym z dostępnych typów MediaEntity, czyli MovieEntity
i TvEpisodeEntity
, a także zawierać pola wspólne i specyficzne dla danego typu.
Poniższy fragment kodu przedstawia ładunek treści żądania dla interfejsu API publishContinuationCluster
.
{
"entities": [
{
"movieEntity": {
"watch_next_type": "WATCH_NEXT_TYPE_CONTINUE",
"name": "Movie1",
"platform_specific_playback_uris": [
"https://www.example.com/entity_uri_for_android",
"https://www.example.com/entity_uri_for_iOS"
],
"poster_images": [
"http://www.example.com/movie1_img1.png",
"http://www.example.com/movie1_imag2.png"
],
"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": [
"https://www.example.com/entity_uri_for_android",
"https://www.example.com/entity_uri_for_iOS"
],
"poster_images": [
"http://www.example.com/episode1_img1.png",
"http://www.example.com/episode1_imag2.png"
],
"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"
}
}
]
}
Usuwanie danych dotyczących odkrywania filmów
Użyj clearClusters
interfejsu API, aby usunąć dane dotyczące odkrywania filmów.
Użyj adresu URL POST, aby usunąć podmioty z danych o odkrywaniu filmów.
Aby usunąć dane klastra kontynuacji, wyślij żądanie POST do interfejsu APIclearClusters
, używając tej składni:
https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/profiles/{profile_id}/clearClusters
Gdzie:
package_name
: nazwa pakietu dostawcy multimediów.accountId
: unikalny identyfikator konta użytkownika w Twoim systemie. Musi on odpowiadaćaccountId
używanemu w ścieżce na urządzeniu.profileId
: unikalny identyfikator profilu użytkownika na koncie w Twoim systemie. Musi odpowiadać identyfikatorowi profileId używanemu w ścieżce na urządzeniu.
Ładunek interfejsu clearClusters
API zawiera tylko jedno pole reason
, które zawiera DeleteReason
określający przyczynę usunięcia danych.
{
"reason": "DELETE_REASON_LOSS_OF_CONSENT"
}
Testowanie
Po przesłaniu danych użyj testowego konta użytkownika, aby sprawdzić, czy oczekiwane treści pojawiają się w wierszu „Oglądaj dalej” na docelowych platformach Google, takich jak Google TV oraz aplikacje mobilne Google TV na Androida i iOS.
Podczas testowania uwzględnij rozsądne opóźnienie propagacji wynoszące kilka minut i przestrzegaj wymagań dotyczących oglądania, takich jak obejrzenie części filmu lub odcinka. Szczegółowe informacje znajdziesz w wytycznych dotyczących funkcji „Obejrzyj następny” dla programistów aplikacji.