TV entegrasyonu kılavuzu için Engage SDK'sı

İzlemeye Devam Et özelliği, bitmemiş videoları ve aynı TV sezonunda izlenecek sonraki bölümleri tek bir kullanıcı arayüzü grubunda birden fazla uygulamadan göstermek için Devam Ettirme kümesinden yararlanır. Bu devamlılık kümesinde bu varlıkları öne çıkarabilirsiniz. Engage SDK'yı kullanarak "İzlemeye Devam Et" deneyimiyle kullanıcı etkileşimini nasıl artıracağınızı öğrenmek için bu kılavuzu inceleyin.

Ön çalışma

Başlamadan önce aşağıdaki adımları tamamlayın:

  1. Hedef API 19 veya üstüne güncelleme

  2. Uygulamanıza com.google.android.engage kitaplığını ekleyin:

    Entegrasyonda kullanılacak ayrı SDK'lar vardır: biri mobil uygulamalar, diğeri ise TV uygulamaları için.

    Mobil

    
      dependencies {
        implementation 'com.google.android.engage:engage-core:1.5.5
      }
    

    TV

    
      dependencies {
        implementation 'com.google.android.engage:engage-tv:1.0.2
      }
    
  3. AndroidManifest.xml dosyasında Engage hizmet ortamını üretime ayarlayın.

    Mobil

    
    <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" />
    
  4. TV APK'sı için WRITE_EPG_DATA izni ekleme

    <uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" />
    
  5. Planlama için androidx.work gibi bir arka plan hizmeti kullanarak güvenilir içerik yayınlamayı doğrulayın.

  6. Sorunsuz bir izleme deneyimi sunmak için aşağıdaki etkinlikler gerçekleştiğinde "izlemeye devam et" verilerini yayınlayın:

    1. İlk Giriş: Bir kullanıcı ilk kez giriş yaptığında, görüntüleme geçmişinin hemen kullanılabilmesi için verileri yayınlayın.
    2. Profil Oluşturma veya Geçiş (Çok Profilli Uygulamalar): Uygulamanız birden fazla profili destekliyorsa kullanıcı profil oluşturduğunda veya profiller arasında geçiş yaptığında verileri yayınlayın.
    3. Video Oynatma Kesintisi: Kullanıcıların kaldıkları yerden devam etmesine yardımcı olmak için videoyu duraklattıklarında veya durdurduklarında ya da oynatma sırasında uygulamadan çıktıklarında verileri yayınlayın.
    4. İzlemeye Devam Etme Bölmesi Güncellemeleri (Destekleniyorsa): Kullanıcı, İzlemeye Devam Etme bölmesinden bir öğeyi kaldırdığında güncellenmiş verileri yayınlayarak bu değişikliği yansıtın.
    5. Videoyu Tamamlama:
      1. Filmler için tamamlanan filmi İzlemeye Devam Et tepsisinden kaldırın. Film bir serinin parçasıysa kullanıcıların ilgisini canlı tutmak için bir sonraki filmi ekleyin.
      2. Bölümler için, tamamlanmış bölümü kaldırın ve varsa serideki sonraki bölümü ekleyerek izleyicileri izlemeye devam etmeye teşvik edin.

Entegrasyon

AccountProfile

Google TV'de kişiselleştirilmiş bir "izlemeye devam et" deneyimine izin vermek için hesap ve profil bilgilerini sağlayın. AccountProfile'ı kullanarak şunları sağlayabilirsiniz:

  1. Hesap kimliği: Kullanıcının uygulamanızdaki hesabını temsil eden benzersiz tanımlayıcı. Bu, gerçek hesap kimliği veya uygun şekilde karartılmış bir sürüm olabilir.

  2. Profil kimliği (isteğe bağlı): Uygulamanız tek bir hesapta birden fazla profili destekliyorsa belirli kullanıcı profili için benzersiz bir tanımlayıcı (gerçek veya karartılmış) sağlayın.

// 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()

Varlık oluşturma

SDK, her öğe türünü temsil etmek için farklı öğeler tanımlamıştır. Devamlılık kümesi aşağıdaki varlıkları destekler:

  1. MovieEntity
  2. TvEpisodeEntity
  3. LiveStreamingVideoEntity
  4. VideoClipEntity

Bu öğeler için platforma özel URI'leri ve poster resimlerini belirtin.

Ayrıca, henüz yapmadıysanız her platform (ör. Android TV, Android veya iOS) için oynatma URI'leri oluşturun. Bu nedenle, kullanıcı her platformda izlemeye devam ettiğinde uygulama, video içeriğini oynatmak için hedeflenmiş bir oynatma URI'si kullanır.

// 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)

Poster resimleri için URI ve piksel boyutları (yükseklik ve genişlik) gerekir. Birden fazla poster resmi sağlayarak farklı form faktörlerini hedefleyin ancak tüm resimlerin 16:9 en boy oranını ve "İzlemeye Devam Et" öğesinin doğru şekilde gösterilmesi için minimum 200 piksel yüksekliği koruduğunu doğrulayın. Bu özellikle Google'ın Entertainment Space'inde önemlidir. Yüksekliği 200 pikselden az olan resimler gösterilmeyebilir.

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

Bu örnekte, gerekli tüm alanları içeren bir MovieEntity nasıl oluşturulacağı gösterilmektedir:

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()

Türler ve içerik derecelendirmeleri gibi ayrıntılar sağladığınızda Google TV, içeriğinizi daha dinamik şekillerde sergileyebilir ve doğru izleyicilerle buluşturabilir.

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()

Daha kısa bir geçerlilik süresi belirtmediğiniz sürece öğeler 60 gün boyunca otomatik olarak kullanılabilir durumda kalır. Yalnızca öğenin bu varsayılan süreden önce kaldırılması gerekiyorsa özel bir geçerlilik sonu ayarlayın.

// 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

Bu örnekte, gerekli tüm alanları içeren bir TvEpisodeEntity nasıl oluşturulacağı gösterilmektedir:

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()

Bölüm numarası dizesi (ör. "2") ve sezon numarası dizesi (ör. "1"), "İzlemeye devam et" kartında gösterilmeden önce uygun biçime genişletilir. Bunların sayısal bir dize olması gerektiğini unutmayın. "e2", "episode 2", "s1" veya "season 1" yazmayın.

Belirli bir TV programının tek bir sezonu varsa sezon numarasını 1 olarak ayarlayın.

İzleyicilerin Google TV'de içeriğinizi bulma olasılığını en üst düzeye çıkarmak için türler, içerik derecelendirmeleri ve stok durumu zaman aralıkları gibi ek veriler sağlamayı düşünebilirsiniz. Bu ayrıntılar, görüntüleme ve filtreleme seçeneklerini iyileştirebilir.

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

Aşağıda, gerekli tüm alanları içeren bir VideoClipEntity oluşturma örneği verilmiştir.

VideoClipEntity, YouTube videosu gibi kullanıcı tarafından oluşturulan bir klibi temsil eder.

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()

İsteğe bağlı olarak oluşturucu, oluşturucu resmi, oluşturulma zamanı (milisaniye cinsinden) veya kullanılabilirlik zaman aralığını ayarlayabilirsiniz .

LiveStreamingVideoEntity

Aşağıda, tüm zorunlu alanları içeren bir LiveStreamingVideoEntity oluşturma örneği verilmiştir.

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()

İsteğe bağlı olarak, canlı yayın öğesi için başlangıç zamanını, yayıncıyı, yayıncı simgesini veya kullanılabilirlik zaman aralığını ayarlayabilirsiniz.

Özellikler ve şartlar hakkında ayrıntılı bilgi için API referansına bakın.

Devamlılık kümesi verileri sağlama

AppEngagePublishClient, Devam Ettirme kümesini yayınlamaktan sorumludur. publishContinuationCluster() nesnesi yayınlamak için publishContinuationCluster() yöntemini kullanırsınız.ContinuationCluster

Öncelikle, hizmetin entegrasyona uygun olup olmadığını kontrol etmek için isServiceAvailable() işlevini kullanmanız gerekir.

client.publishContinuationCluster(
    PublishContinuationClusterRequest
        .Builder()
        .setContinuationCluster(
            ContinuationCluster.Builder()
                .setAccountProfile(accountProfile)
                .addEntity(movieEntity1)
                .addEntity(movieEntity2)
                .addEntity(tvEpisodeEntity1)
                .addEntity(tvEpisodeEntity2)
                .setSyncAcrossDevices(true)
                .build()
        )
        .build()
)

Hizmet isteği aldığında tek bir işlemde aşağıdaki işlemler gerçekleşir:

  • Geliştirici iş ortağından alınan mevcut ContinuationCluster verileri kaldırılır.
  • İstekten gelen veriler ayrıştırılır ve güncellenen ContinuationCluster içinde saklanır.

Hata durumunda isteğin tamamı reddedilir ve mevcut durum korunur.

Yayınlama API'leri, ekleme/güncelleme API'leridir. Mevcut içeriğin yerini alır. ContinuationCluster'daki belirli bir öğeyi güncellemeniz gerekiyorsa tüm öğeleri yeniden yayınlamanız gerekir.

ContinuationCluster verileri yalnızca yetişkin hesapları için sağlanmalıdır. Yalnızca AccountProfile bir yetişkine ait olduğunda yayınlayın.

Cihazlar arası senkronizasyon

SyncAcrossDevices işareti, kullanıcının ContinuationCluster verilerinin TV, telefon, tablet gibi cihazlar arasında senkronize edilip edilmeyeceğini kontrol eder. Cihazlar arası senkronizasyon varsayılan olarak devre dışıdır.

Değerler:

  • true: Sorunsuz bir izleme deneyimi için ContinuationCluster verileri kullanıcının tüm cihazlarında paylaşılır. En iyi cihazlar arası deneyim için bu seçeneği kullanmanızı kesinlikle öneririz.
  • false: ContinuationCluster verileri, mevcut cihazla sınırlıdır.

Medya uygulaması, cihazlar arası senkronizasyonu etkinleştirmek/devre dışı bırakmak için net bir ayar sunmalıdır. Kullanıcıya avantajları açıklayın ve kullanıcının tercihini bir kez saklayıp publishContinuationCluster'da buna göre uygulayın.

// Example to allow cross device syncing.
client.publishContinuationCluster(
    PublishContinuationClusterRequest
        .Builder()
        .setContinuationCluster(
            ContinuationCluster.Builder()
                .setAccountProfile(accountProfile)
                .setSyncAcrossDevices(true)
                .build()
        )
        .build()
)

Cihazlar arası özelliğimizden en iyi şekilde yararlanmak için uygulamanın kullanıcı izni aldığını doğrulayın ve SyncAcrossDevices özelliğini true olarak ayarlayın. Bu sayede içerikler cihazlar arasında sorunsuz bir şekilde senkronize edilebilir. Bu da daha iyi bir kullanıcı deneyimi ve daha fazla etkileşim sağlar. Örneğin, bu özelliği uygulayan bir iş ortağı, içeriği birden fazla cihazda gösterildiği için "izlemeye devam et" tıklamalarında %40 artış elde etti.

Video Discovery verilerini silme

Bir kullanıcının verilerini standart 60 günlük saklama süresinden önce Google TV sunucusundan manuel olarak silmek için client.deleteClusters() yöntemini kullanın. Hizmet, isteği aldıktan sonra hesap profili veya hesabın tamamı için mevcut tüm video keşfi verilerini siler.

DeleteReason numaralandırması, veri silme nedenini tanımlar. Aşağıdaki kod, oturum kapatıldığında "İzlemeye devam et" verilerini kaldırır.


// 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()
)

Test

Engage SDK entegrasyonunun doğru şekilde çalıştığını doğrulamak için doğrulama uygulamasını kullanın. Bu Android uygulaması, verilerinizi doğrulamanıza ve yayın amaçlarının düzgün şekilde işlendiğini onaylamanıza yardımcı olacak araçlar sunar.

Yayınlama API'sini çağırdıktan sonra doğrulama uygulamasını kontrol ederek verilerinizin doğru şekilde yayınlandığını onaylayın. Devamlılık kümeniz, uygulamanın arayüzünde ayrı bir satır olarak gösterilmelidir.

  • Engage Service Flag'i yalnızca uygulamanızın Android Manifest dosyasındaki üretim dışı derlemeler için ayarlayın.
  • Engage Verify uygulamasını yükleyip açın.
  • isServiceAvailable false ise etkinleştirmek için "Aç/Kapat" düğmesini tıklayın.
  • Yayınlamaya başladığınızda yayınlanan verileri otomatik olarak görüntülemek için uygulamanızın paket adını girin.
  • Uygulamanızda aşağıdaki işlemleri test edin:
    • Oturum açın.
    • Profiller arasında geçiş yapın(varsa).
    • Bir videoyu başlatıp duraklatın veya ana sayfaya dönün.
    • Video oynatılırken uygulamayı kapatın.
    • "İzlemeye Devam Et" satırından bir öğeyi kaldırma (destekleniyorsa)
  • Her işlemden sonra uygulamanızın publishContinuationClusters API'sini çağırdığını ve verilerin doğrulama uygulamasında doğru şekilde gösterildiğini onaylayın.
  • Doğrulama uygulaması, doğru şekilde uygulanmış öğeler için yeşil bir "Her Şey Tamam" onay işareti gösterir.

    Doğrulama Uygulaması Başarı Ekran Görüntüsü
    1. şekil. Verification App Success
  • Doğrulama uygulaması, sorunlu varlıkları işaretler.

    Doğrulama Uygulaması Hatası Ekran Görüntüsü
    Şekil 2. Doğrulama Uygulaması Hatası
  • Hatalı öğelerle ilgili sorunları gidermek için TV kumandanızı kullanarak doğrulama uygulamasında öğeyi seçip tıklayın. Belirli sorunlar, incelemeniz için kırmızı renkte vurgulanarak gösterilir (aşağıdaki örneğe bakın).

    Doğrulama Uygulaması hata ayrıntıları
    3.şekil Doğrulama Uygulaması Hata Ayrıntıları

REST API

Engage SDK, iOS ve Roku TV gibi Android olmayan platformlarda tutarlı bir "izlemeye devam et" deneyimi sağlamak için REST API sunar. API, geliştiricilerin Android dışı platformlardan kayıtlı kullanıcılar için "Devam Eden İzlemeler" durumunu güncellemesine olanak tanır.

Ön koşullar

  • Öncelikle cihaz üzerinde Engage SDK'ya dayalı entegrasyonu tamamlamanız gerekir. Bu kritik adım, Google'ın kullanıcı kimliği ile uygulamanızın AccountProfile arasında gerekli ilişkilendirmeyi oluşturur.
  • API Erişimi ve Kimlik Doğrulama: API'yi Google Cloud projenizde görüntülemek ve etkinleştirmek için izin verilenler listesi sürecinden geçmeniz gerekir. Tüm API istekleri için kimlik doğrulama gerekir.

Erişim elde etme

Google Cloud Console'unuzda API'yi görüntülemek ve etkinleştirmek için hesabınızın kayıtlı olması gerekir.

  1. Google Workspace müşteri kimliği kullanılabilir olmalıdır. Kullanılamıyorsa API'yi çağırmak için kullanmak istediğiniz Google Hesaplarının yanı sıra bir Google Workspace hesabı da oluşturmanız gerekebilir.
  2. Google Workspace ile ilişkili bir e-posta adresi kullanarak Google Cloud Console'da hesap oluşturun.
  3. Yeni proje oluşturma
  4. API kimlik doğrulaması için bir hizmet hesabı oluşturun. Hizmet hesabını oluşturduktan sonra iki öğeniz olur:
    • Bir hizmet hesabı kimliği.
    • Hizmet hesabı anahtarınızın bulunduğu bir JSON dosyası. Bu dosyanın güvenliğini sağlayın. Daha sonra istemcinizin API'de kimliğini doğrulamak için bu dosyaya ihtiyacınız olacaktır.
  5. Workspace ve ilişkili Google Hesapları artık REST API'lerini kullanabilir. Değişiklik yayıldıktan sonra, API'nin hizmet hesaplarınız tarafından çağrılmaya hazır olup olmadığı konusunda bilgilendirilirsiniz.
  6. Yetkilendirilmiş API çağrısı yapmaya hazırlanmak için bu adımları uygulayın.

Devam Ettirme Kümesini Yayınlama

Video Discovery verilerini yayınlamak için aşağıdaki söz dizimini kullanarak publishContinuationCluster API'sine bir POST isteği gönderin.

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

Nerede:

  • package_name: Medya sağlayıcı paketinin adı
  • accountId: Kullanıcının sisteminizdeki hesabının benzersiz kimliği. Cihazdaki yolda kullanılan accountId ile eşleşmelidir.
  • profileId: Kullanıcının sisteminizdeki hesapta bulunan profilinin benzersiz kimliği. Kimlik, cihaz üzerindeki yolda kullanılan profileId ile eşleşmelidir.

Profil içermeyen hesabın URL'si:

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

İsteğin yükü entities alanında gösterilir. entities MovieEntity veya TVEpisodeEntity olabilen içerik öğelerinin listesini temsil eder. Bu zorunlu bir alandır.

İstek Metni

Field

Tür

Zorunlu

Açıklama

varlıklar

MediaEntity nesnelerinin listesi

Evet

İçerik öğeleri listesi (en fazla 5). Yalnızca ilk beş öğe korunur, geri kalanı bırakılır. Kullanıcının tüm öğeleri izlemeyi bitirdiğini belirtmek için boş listeye izin verilir.

entities alanı, movieEntity ve tvEpisodeEntity değerlerini içeriyor.

Field

Tür

Zorunlu

Açıklama

movieEntity

MovieEntity

Evet

ContinuationCluster içindeki bir filmi temsil eden nesne.

tvEpisodeEntity

TvEpisodeEntity

Evet

ContinuationCluster içindeki bir TV bölümünü temsil eden nesne.

Varlıklar dizisindeki her nesne,ortak ve türe özgü alanlarla birlikte MovieEntity ve TvEpisodeEntity olmak üzere mevcut MediaEntity türlerinden biri olmalıdır.

Aşağıdaki kod snippet'inde, publishContinuationCluster API'si için istek gövdesi yükü gösterilmektedir.

{
  "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"
      }
    }
  ]
}

Video keşfi verilerini silme

Video keşfi verilerini kaldırmak için clearClusters API'yi kullanın.

Öğeleri video keşfi verilerinden kaldırmak için POST URL'sini kullanın. Devamlılık kümesi verilerini silmek için aşağıdaki söz dizimini kullanarak clearClusters API'ye bir POST isteği gönderin.

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

Nerede:

  • package_name: Medya sağlayıcı paket adı.
  • accountId: Kullanıcının sisteminizdeki hesabının benzersiz kimliği. Cihazdaki yolda kullanılan accountId ile eşleşmelidir.
  • profileId: Kullanıcının sisteminizdeki hesapta bulunan profilinin benzersiz kimliği. Kimlik, cihaz üzerindeki yolda kullanılan profileId ile eşleşmelidir.

clearClusters API'sinin yükünde yalnızca bir alan bulunur: reason. Bu alan, verilerin kaldırılma nedenini belirten bir DeleteReason içerir.

{
  "reason": "DELETE_REASON_LOSS_OF_CONSENT"
}

Test

Verileri başarıyla yayınladıktan sonra, hedef Google platformlarındaki (ör. Google TV, Android ve iOS Google TV mobil uygulamaları) "İzlemeye Devam Et" satırında beklenen içeriğin göründüğünü doğrulamak için bir kullanıcı test hesabı kullanın.

Test sırasında birkaç dakikalık makul bir yayılma gecikmesine izin verin ve izleme koşullarına (ör. bir filmin bir bölümünü izleme veya bir bölümü tamamlama) uyun. Ayrıntılar için Uygulama geliştiriciler için Sonrakini İzle kuralları'na bakın.