Panduan integrasi Engage SDK untuk TV

Lanjutkan Menonton memanfaatkan cluster Lanjutan untuk menampilkan video yang belum selesai dan episode berikutnya yang akan ditonton dari season TV yang sama, dari beberapa aplikasi dalam satu pengelompokan UI. Anda dapat menampilkan entitas mereka di cluster lanjutan ini. Ikuti panduan ini untuk mempelajari cara meningkatkan engagement pengguna melalui pengalaman Lanjutkan Menonton menggunakan Engage SDK.

Persiapan

Sebelum Anda memulai, selesaikan langkah-langkah berikut:

  1. Update ke Target API 19 atau yang lebih tinggi

  2. Tambahkan library com.google.android.engage ke aplikasi Anda:

    Ada SDK terpisah untuk digunakan dalam integrasi: satu untuk aplikasi seluler dan satu untuk aplikasi TV.

    Ponsel

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

    TV

    
      dependencies {
        implementation 'com.google.android.engage:engage-tv:1.0.2
      }
    
  3. Setel lingkungan layanan Engage ke produksi dalam file AndroidManifest.xml.

    Ponsel

    
    <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. Tambahkan izin untuk WRITE_EPG_DATA untuk APK TV

    <uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" />
    
  5. Verifikasi publikasi konten yang andal dengan menggunakan layanan latar belakang, seperti androidx.work, untuk penjadwalan.

  6. Untuk memberikan pengalaman menonton yang lancar, publikasikan data lanjutkan menonton saat peristiwa ini terjadi:

    1. Login Pertama: Saat pengguna login untuk pertama kalinya, publikasikan data untuk memastikan histori penayangan mereka langsung tersedia.
    2. Pembuatan atau Pengalihan Profil (Aplikasi Multi-Profil): Jika aplikasi Anda mendukung beberapa profil, publikasikan data saat pengguna membuat atau mengganti profil.
    3. Gangguan Pemutaran Video: Untuk membantu pengguna melanjutkan dari bagian terakhir yang mereka tonton, publikasikan data saat mereka menjeda atau menghentikan video, atau saat aplikasi keluar selama pemutaran.
    4. Pembaruan Panel Lanjutkan Menonton (Jika Didukung): Saat pengguna menghapus item dari panel Lanjutkan Menonton, tunjukkan perubahan tersebut dengan memublikasikan data yang diperbarui.
    5. Penyelesaian Video:
      1. Untuk film, hapus film yang telah selesai ditonton dari panel Lanjutkan Menonton. Jika film adalah bagian dari serial, tambahkan film berikutnya untuk terus menarik perhatian pengguna.
      2. Untuk episode, hapus episode yang telah selesai dan tambahkan episode berikutnya dalam serial, jika tersedia, untuk mendorong penayangan berkelanjutan.

Integrasi

AccountProfile

Untuk mengizinkan pengalaman "lanjutkan menonton" yang dipersonalisasi di Google TV, berikan informasi akun dan profil. Gunakan AccountProfile untuk memberikan:

  1. ID Akun: ID unik yang merepresentasikan akun pengguna dalam aplikasi Anda. ID ini dapat berupa ID akun yang sebenarnya atau versi yang di-obfuscate dengan tepat.

  2. ID Profil (opsional): Jika aplikasi Anda mendukung beberapa profil dalam satu akun, berikan ID unik untuk profil pengguna tertentu (sekali lagi, nyata atau di-obfuscate).

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

Membuat entity

SDK telah menentukan entity yang berbeda untuk mewakili setiap jenis item. Cluster kelanjutan mendukung entity berikut:

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

Tentukan URI khusus platform dan gambar poster untuk entitas ini.

Selain itu, buat URI pemutaran untuk setiap platform—seperti Android TV, Android, atau iOS—jika Anda belum melakukannya. Jadi, saat pengguna melanjutkan menonton di setiap platform, aplikasi akan menggunakan URI pemutaran yang ditargetkan untuk memutar konten video.

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

Gambar poster memerlukan URI dan dimensi piksel (tinggi dan lebar). Menargetkan faktor bentuk yang berbeda dengan menyediakan beberapa gambar poster, tetapi pastikan semua gambar mempertahankan rasio aspek 16:9 dan tinggi minimum 200 piksel untuk tampilan yang benar dari entitas "Lanjutkan Menonton", terutama dalam Entertainment Space Google. Gambar dengan tinggi kurang dari 200 piksel mungkin tidak ditampilkan.

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

Contoh ini menunjukkan cara membuat MovieEntity dengan semua kolom wajib:

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

Dengan memberikan detail seperti genre dan rating konten, Google TV dapat menampilkan konten Anda dengan cara yang lebih dinamis dan menghubungkannya dengan penonton yang tepat.

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

Entitas otomatis tetap tersedia selama 60 hari kecuali jika Anda menentukan waktu habis masa berlaku yang lebih singkat. Tetapkan masa berlaku kustom hanya jika Anda ingin entitas dihapus sebelum periode default ini.

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

Contoh ini menunjukkan cara membuat TvEpisodeEntity dengan semua kolom yang diperlukan:

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

String nomor episode (seperti "2"), dan string nomor season (seperti "1") akan diubah ke bentuk yang tepat sebelum ditampilkan di kartu lanjutkan menonton. Perhatikan bahwa nilai ini harus berupa string numerik, jangan masukkan "e2", atau "episode 2", atau "s1" atau "season 1".

Jika acara TV tertentu memiliki satu season, tetapkan nomor season sebagai 1.

Untuk memaksimalkan peluang penonton menemukan konten Anda di Google TV, pertimbangkan untuk memberikan data tambahan seperti genre, rating konten, dan jangka waktu ketersediaan, karena detail ini dapat meningkatkan opsi tampilan dan pemfilteran.

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

Berikut adalah contoh pembuatan VideoClipEntity dengan semua kolom wajib diisi.

VideoClipEntity merepresentasikan klip buatan pengguna seperti video 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()

Secara opsional, Anda dapat menetapkan pembuat, gambar pembuat, waktu pembuatan dalam milidetik, atau jangka waktu ketersediaan .

LiveStreamingVideoEntity

Berikut contoh pembuatan LiveStreamingVideoEntity dengan semua kolom wajib diisi.

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

Secara opsional, Anda dapat menetapkan waktu mulai, penyiar, ikon penyiar, atau jangka waktu ketersediaan untuk entitas live streaming.

Untuk mengetahui informasi mendetail tentang atribut dan persyaratan, lihat referensi API.

Menyediakan data cluster Lanjutan

AppEngagePublishClient bertanggung jawab untuk memublikasikan cluster Lanjutan. Anda menggunakan metode publishContinuationCluster() untuk memublikasikan objek ContinuationCluster.

Pertama, Anda harus menggunakan isServiceAvailable() untuk memeriksa apakah layanan tersedia untuk integrasi.

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

Saat layanan menerima permintaan tersebut, tindakan berikut akan terjadi dalam satu transaksi:

  • Data ContinuationCluster yang ada dari partner developer akan dihapus.
  • Data dari permintaan akan diuraikan dan disimpan di ContinuationCluster yang diperbarui.

Jika terjadi error, seluruh permintaan akan ditolak dan status yang ada dipertahankan.

API publikasi adalah API penyisipan yang menggantikan konten yang sudah ada. Jika perlu memperbarui entity tertentu di ContinuationCluster, Anda harus memublikasikan semua entity lagi.

Data ContinuationCluster hanya boleh diberikan untuk akun dewasa. Publikasikan hanya jika AccountProfile milik orang dewasa.

Sinkronisasi lintas perangkat

Flag SyncAcrossDevices mengontrol apakah data ContinuationCluster pengguna disinkronkan di seluruh perangkat seperti TV, ponsel, tablet, dll. Sinkronisasi lintas perangkat dinonaktifkan secara default.

Nilai:

  • benar: Data ContinuationCluster dibagikan di semua perangkat pengguna untuk pengalaman menonton yang lancar. Sebaiknya pilih opsi ini untuk mendapatkan pengalaman lintas perangkat terbaik.
  • salah: Data ContinuationCluster dibatasi untuk perangkat saat ini.

Aplikasi media harus menyediakan setelan yang jelas untuk mengaktifkan/menonaktifkan sinkronisasi lintas perangkat. Jelaskan manfaatnya bagi pengguna dan simpan preferensi pengguna sekali saja, lalu terapkan di publishContinuationCluster dengan tepat.

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

Untuk mendapatkan hasil maksimal dari fitur lintas-perangkat kami, verifikasi bahwa aplikasi mendapatkan izin pengguna dan aktifkan SyncAcrossDevices ke true. Hal ini memungkinkan konten disinkronkan dengan lancar di seluruh perangkat, sehingga menghasilkan pengalaman pengguna yang lebih baik dan peningkatan interaksi. Misalnya, partner yang menerapkan fitur ini mengalami peningkatan 40% pada klik "lanjutkan menonton" karena konten mereka ditampilkan di beberapa perangkat.

Menghapus data Penemuan video

Untuk menghapus data pengguna secara manual dari server Google TV sebelum periode retensi 60 hari standar, gunakan metode client.deleteClusters(). Setelah menerima permintaan, layanan akan menghapus semua data penemuan video yang ada untuk profil akun, atau untuk seluruh akun.

Enum DeleteReason menentukan alasan penghapusan data. Kode berikut menghapus data lanjutkan menonton saat logout.


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

Pengujian

Gunakan aplikasi verifikasi untuk memverifikasi bahwa integrasi Engage SDK berfungsi dengan benar. menyediakan alat untuk membantu Anda memverifikasi data dan mengonfirmasi bahwa intent siaran ditangani dengan benar.

Setelah memanggil API publikasi, konfirmasi bahwa data Anda dipublikasikan dengan benar dengan memeriksa aplikasi verifikasi. Cluster lanjutan Anda akan ditampilkan sebagai baris yang berbeda dalam antarmuka aplikasi.

  • Tetapkan Engage Service Flag hanya untuk build non-produksi di file Manifes Android aplikasi Anda.
  • Instal dan buka aplikasi Engage Verify
  • Jika isServiceAvailable adalah false, klik tombol "Alihkan" untuk mengaktifkan.
  • Masukkan nama paket aplikasi Anda untuk otomatis melihat data yang dipublikasikan setelah Anda mulai memublikasikan.
  • Uji tindakan ini di aplikasi Anda:
    • Login.
    • Beralih antar-profil(jika berlaku).
    • Mulai, lalu jeda video, atau kembali ke halaman beranda.
    • Tutup aplikasi selama pemutaran video.
    • Menghapus item dari baris "Lanjutkan Menonton" (jika didukung).
  • Setelah setiap tindakan, pastikan aplikasi Anda memanggil API publishContinuationClusters dan data ditampilkan dengan benar di aplikasi verifikasi.
  • Aplikasi verifikasi akan menampilkan tanda centang "Semua Oke" berwarna hijau untuk entitas yang diterapkan dengan benar.

    Screenshot Berhasil Aplikasi Verifikasi
    Gambar 1. Keberhasilan Aplikasi Verifikasi
  • Aplikasi verifikasi akan menandai entitas yang bermasalah.

    Screenshot Error Aplikasi Verifikasi
    Gambar 2. Error Aplikasi Verifikasi
  • Untuk memecahkan masalah entitas yang mengalami error, gunakan remote TV Anda untuk memilih dan mengklik entitas di aplikasi verifikasi. Masalah tertentu akan ditampilkan dan ditandai dengan warna merah untuk ditinjau (lihat contoh di bawah).

    Detail error Aplikasi Verifikasi
    Gambar 3. Detail Error Aplikasi Verifikasi

REST API

Engage SDK menawarkan REST API untuk memberikan pengalaman menonton terus-menerus yang konsisten di seluruh platform non-Android seperti iOS, Roku TV. API ini memungkinkan developer memperbarui status "Lanjutkan Menonton" untuk pengguna yang memilih ikut serta dari platform non-Android.

Prasyarat

  • Anda harus menyelesaikan integrasi berbasis Engage SDK di perangkat terlebih dahulu. Langkah penting ini membuat hubungan yang diperlukan antara ID pengguna Google dan AccountProfile aplikasi Anda.
  • Akses dan Autentikasi API: Untuk melihat dan mengaktifkan API di Project Google Cloud, Anda harus melalui proses daftar yang diizinkan. Semua permintaan API memerlukan autentikasi.

Mendapatkan Akses

Agar dapat mengakses untuk melihat dan mengaktifkan API di Konsol Google Cloud, akun Anda harus terdaftar.

  1. ID Pelanggan Google Workspace harus tersedia. Jika tidak tersedia, Anda mungkin perlu menyiapkan Google Workspace serta Akun Google yang ingin Anda gunakan untuk memanggil API.
  2. Siapkan akun dengan Konsol Google Cloud menggunakan email yang terkait dengan Google Workspace.
  3. Membuat project baru
  4. Buat akun layanan untuk Autentikasi API. Setelah Anda membuat akun layanan, Anda akan memiliki dua item:
    • ID akun layanan.
    • File JSON dengan kunci akun layanan Anda. Jaga keamanan file ini, Anda akan memerlukannya untuk mengautentikasi klien ke API nanti.
  5. Workspace dan Akun Google terkait kini dapat menggunakan REST API. Setelah perubahan diterapkan, Anda akan diberi tahu apakah API siap dipanggil oleh akun layanan Anda.
  6. Ikuti langkah-langkah berikut untuk bersiap melakukan panggilan API yang didelegasikan.

Memublikasikan Cluster Lanjutan

Untuk memublikasikan Data Penemuan Video, lakukan permintaan POST ke API publishContinuationCluster menggunakan sintaksis berikut.

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

Dalam hal ini:

  • package_name: Nama paket penyedia media
  • accountId: ID unik untuk akun pengguna di sistem Anda. Harus cocok dengan accountId yang digunakan di jalur dalam perangkat.
  • profileId: ID unik untuk profil pengguna dalam akun di sistem Anda. ID ini harus cocok dengan profileId yang digunakan di jalur dalam perangkat.

URL untuk akun tanpa profil adalah:

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

Payload ke permintaan ditampilkan di kolom entities. entities mewakili daftar entitas konten yang dapat berupa MovieEntity atau TVEpisodeEntity. Ini adalah bidang yang wajib diisi.

Isi Permintaan

Kolom

Jenis

Wajib

Deskripsi

entitas

Daftar Objek MediaEntity

Ya

Daftar entitas konten (maks. 5), hanya lima entitas teratas yang akan dipertahankan dan sisanya dihapus. Daftar kosong diizinkan untuk menandakan bahwa pengguna telah selesai menonton semua entitas.

Kolom entities berisi masing-masing movieEntity dan tvEpisodeEntity.

Kolom

Jenis

Wajib

Deskripsi

movieEntity

MovieEntity

Ya

Objek yang mewakili film dalam ContinuationCluster.

tvEpisodeEntity

TvEpisodeEntity

Ya

Objek yang merepresentasikan episode TV dalam ContinuationCluster.

Setiap objek dalam array entity harus berupa salah satu jenis MediaEntity yang tersedia, yaitu MovieEntity dan TvEpisodeEntity, beserta kolom umum dan khusus jenis.

Cuplikan kode berikut menampilkan payload isi permintaan untuk 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"
      }
    }
  ]
}

Menghapus data penemuan video

Gunakan clearClusters API untuk menghapus data penemuan video.

Gunakan URL POST untuk menghapus entity dari data penemuan video. Untuk menghapus data cluster lanjutan, lakukan permintaan POST ke API clearClusters menggunakan sintaksis berikut.

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

Dalam hal ini:

  • package_name: Nama paket penyedia media.
  • accountId: ID unik untuk akun pengguna di sistem Anda. Harus cocok dengan accountId yang digunakan di jalur dalam perangkat.
  • profileId: ID unik untuk profil pengguna dalam akun di sistem Anda. ID ini harus cocok dengan profileId yang digunakan di jalur dalam perangkat.

Payload untuk clearClusters API hanya berisi satu kolom, reason, yang berisi DeleteReason yang menentukan alasan penghapusan data.

{
  "reason": "DELETE_REASON_LOSS_OF_CONSENT"
}

Pengujian

Setelah berhasil memposting data, gunakan akun pengujian pengguna untuk memverifikasi bahwa konten yang diharapkan muncul di baris "Lanjutkan Menonton" di platform Google yang ditargetkan seperti Google TV dan aplikasi seluler Google TV Android dan iOS.

Saat pengujian, izinkan penundaan propagasi yang wajar selama beberapa menit dan patuhi persyaratan menonton, seperti menonton sebagian film atau menyelesaikan satu episode. Lihat panduan Tonton Berikutnya untuk developer aplikasi untuk mengetahui detailnya.

Download

Sebelum mendownload, Anda harus menyetujui persyaratan dan ketentuan berikut.

Persyaratan dan Ketentuan

Ini adalah Perjanjian Lisensi Software Development Kit Android

1. Pengantar

1.1 Software Development Kit Android (dalam Perjanjian Lisensi ini disebut sebagai "SDK" dan secara khusus mencakup file sistem Android, API terpaket, dan add-on Google API) yang dilisensikan kepada Anda tunduk pada persyaratan Perjanjian Lisensi ini. Perjanjian Lisensi merupakan kontrak yang mengikat secara hukum antara Anda dan Google dalam kaitannya dengan penggunaan SDK oleh Anda. 1.2 "Android" berarti kumpulan software Android untuk perangkat yang disediakan berdasarkan Proyek Open Source Android, yang terdapat di URL berikut: https://source.android.com/, sebagaimana diperbarui dari waktu ke waktu. 1.3 "Penerapan yang kompatibel" berarti perangkat Android yang (i) sesuai dengan Compatibility Definition Document Android, yang terdapat di situs kompatibilitas Android (https://source.android.com/compatibility) dan dapat diperbarui dari waktu ke waktu; dan (ii) lulus Compatibility Test Suite (CTS) Android. 1.4 "Google" adalah Google LLC, yang diatur menurut hukum Negara Bagian Delaware, Amerika Serikat, dan beroperasi menurut hukum Amerika Serikat dengan tempat utama bisnis di 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA.

2. Menerima Perjanjian Lisensi ini

2.1 Untuk menggunakan SDK, Anda harus menyetujui Perjanjian Lisensi terlebih dahulu. Anda tidak boleh menggunakan SDK ini jika Anda tidak menyetujui Perjanjian Lisensi ini. 2.2 Dengan mengklik setuju dan/atau menggunakan SDK ini, berarti Anda menyatakan setuju terhadap persyaratan Perjanjian Lisensi ini. 2.3 Anda tidak boleh menggunakan SDK ini dan tidak boleh menyetujui Perjanjian Lisensi ini jika Anda adalah orang yang dilarang menerima SDK berdasarkan hukum Amerika Serikat atau negara lain, termasuk negara tempat Anda tinggal atau tempat Anda menggunakan SDK. 2.4 Jika Anda setuju untuk terikat dengan Perjanjian Lisensi ini atas nama perusahaan atau entitas lain, berarti Anda menyatakan dan menjamin bahwa Anda memiliki kewenangan hukum penuh untuk mengikat perusahaan atau entitas tersebut dengan Perjanjian Lisensi ini. Jika Anda tidak memiliki kewenangan yang diperlukan, Anda tidak boleh menyetujui Perjanjian Lisensi ini atau menggunakan SDK atas nama perusahaan atau entitas lain.

3. Lisensi SDK dari Google

3.1 Sesuai dengan persyaratan Perjanjian Lisensi ini, Google memberi Anda lisensi terbatas, bersifat global, bebas royalti, tidak dapat dialihkan, non-eksklusif, dan tidak dapat disublisensikan untuk menggunakan SDK hanya untuk mengembangkan aplikasi bagi implementasi Android yang kompatibel. 3.2 Anda tidak boleh menggunakan SDK ini untuk mengembangkan aplikasi bagi platform lain (termasuk implementasi Android yang tidak kompatibel) atau untuk mengembangkan SDK lain. Anda bebas mengembangkan aplikasi untuk platform lain, termasuk implementasi Android yang tidak kompatibel, dengan syarat SDK ini tidak digunakan untuk tujuan tersebut. 3.3 Anda setuju bahwa Google atau pihak ketiga memiliki semua hak, kuasa dan kepentingan hukum dalam dan pada SDK, termasuk Hak atas Kekayaan Intelektual yang terdapat dalam SDK. "Hak Atas Kekayaan Intelektual" adalah segala dan semua hak berdasarkan hukum paten, hak cipta, rahasia dagang, merek dagang, serta setiap dan semua hak kepemilikan lainnya. Google memiliki semua hak yang tidak secara tersurat diberikan kepada Anda. 3.4 Anda tidak boleh menggunakan SDK untuk tujuan apa pun yang tidak secara tersurat diizinkan oleh Perjanjian Lisensi. Kecuali sejauh yang diperlukan oleh lisensi pihak ketiga yang berlaku, Anda tidak boleh menyalin (kecuali untuk tujuan pencadangan), mengubah, menyesuaikan, mendistribusikan ulang, mendekompilasi, merekayasa balik, membongkar, atau membuat karya turunan SDK atau bagian SDK. 3.5 Penggunaan, reproduksi, dan distribusi komponen SDK yang dilisensikan berdasarkan lisensi software open source diatur sepenuhnya oleh persyaratan dari lisensi software open source tersebut, bukan Perjanjian Lisensi ini. 3.6 Anda setuju bahwa bentuk dan sifat dari SDK yang disediakan oleh Google dapat berubah tanpa pemberitahuan sebelumnya kepada Anda dan bahwa versi SDK mendatang mungkin tidak kompatibel dengan aplikasi yang dikembangkan berdasarkan SDK versi sebelumnya. Anda setuju bahwa Google dapat menghentikan (secara permanen atau sementara) penyediaan SDK (atau fitur apa pun dalam SDK) kepada Anda atau pengguna secara umum berdasarkan kebijaksanaan mutlak Google, tanpa pemberitahuan sebelumnya kepada Anda. 3.7 Tidak satu pun isi Perjanjian Lisensi ini yang memberi Anda hak untuk menggunakan nama dagang, merek dagang, tanda layanan, logo, nama domain, atau fitur merek khusus lainnya milik Google. 3.8 Anda setuju bahwa Anda tidak akan menghapus, mengaburkan, atau mengubah pemberitahuan hak milik apa pun (termasuk pemberitahuan hak cipta dan merek dagang) yang mungkin melekat atau terkandung dalam SDK.

4. Penggunaan SDK oleh Anda

4.1 Google setuju bahwa pihaknya tidak mendapatkan hak, kuasa, atau kepentingan apa pun dari Anda (atau pemegang lisensi Anda) berdasarkan Perjanjian Lisensi pada atau atas setiap aplikasi software yang Anda kembangkan menggunakan SDK, termasuk segala hak atas kekayaan intelektual yang terdapat dalam aplikasi tersebut. 4.2 Anda setuju untuk menggunakan SDK dan menulis aplikasi hanya untuk tujuan yang diizinkan oleh (a) Perjanjian Lisensi dan (b) hukum yang berlaku, peraturan atau praktik yang diterima secara umum atau pedoman di wilayah hukum terkait (termasuk hukum mengenai ekspor data atau software ke dan dari Amerika Serikat atau negara lain yang relevan). 4.3 Anda setuju bahwa jika Anda menggunakan SDK untuk mengembangkan aplikasi bagi pengguna umum, Anda harus melindungi privasi dan hak hukum pengguna tersebut. Apabila pengguna memberikan kepada Anda nama pengguna, sandi, atau informasi login atau informasi pribadi lainnya, Anda harus memberi tahu pengguna bahwa informasi tersebut akan tersedia bagi aplikasi Anda, dan Anda harus menyediakan pemberitahuan dan perlindungan privasi yang memadai secara hukum bagi mereka. Jika aplikasi Anda menyimpan informasi pribadi atau sensitif yang diberikan oleh pengguna, aplikasi Anda harus menyimpannya dengan aman. Jika pengguna memberikan informasi Akun Google ke aplikasi Anda, aplikasi Anda hanya dapat menggunakan informasi tersebut untuk mengakses Akun Google pengguna saat, serta untuk tujuan terbatas, pengguna telah mengizinkan Anda untuk melakukannya. 4.4 Anda setuju bahwa Anda tidak akan terlibat dalam aktivitas apa pun yang menggunakan SDK, termasuk mengembangkan atau mendistribusikan aplikasi, yang mengganggu, mengacaukan, merusak, atau mengakses secara tidak sah server, jaringan, atau properti atau layanan lain dari pihak ketiga mana pun termasuk, tetapi tidak terbatas pada, Google atau operator komunikasi seluler mana pun. 4.5 Anda setuju bahwa Anda bertanggung jawab sepenuhnya (dan bahwa Google tidak bertanggung jawab kepada Anda atau kepada pihak ketiga mana pun) atas data, konten, atau resource yang Anda buat, transmisikan, atau tampilkan melalui Android dan/atau aplikasi untuk Android, dan atas konsekuensi tindakan Anda (termasuk kehilangan atau kerugian yang mungkin dialami oleh Google) karena melakukannya. 4.6 Anda setuju bahwa Anda bertanggung jawab sepenuhnya (dan bahwa Google tidak bertanggung jawab kepada Anda atau kepada pihak ketiga mana pun) atas setiap pelanggaran kewajiban Anda berdasarkan Perjanjian Lisensi, setiap kontrak pihak ketiga atau Persyaratan Layanan yang berlaku, atau setiap hukum serta regulasi yang berlaku, dan atas konsekuensi (termasuk kehilangan atau kerugian apa pun yang mungkin dialami oleh Google atau pihak ketiga mana pun) akibat pelanggaran tersebut.

5. Kredensial Developer Anda

5.1 Anda setuju untuk bertanggung jawab dalam menjaga kerahasiaan semua kredensial developer yang mungkin diberikan Google kepada Anda atau yang mungkin Anda pilih sendiri dan bahwa Anda akan bertanggung jawab sepenuhnya atas semua aplikasi yang dikembangkan dengan kredensial developer Anda.

6. Privasi dan Informasi

6.1 Untuk terus berinovasi dan meningkatkan SDK, Google dapat mengumpulkan statistik penggunaan tertentu dari software, termasuk tetapi tidak terbatas pada ID unik, alamat IP yang dikaitkan, nomor versi software, informasi tentang alat dan/atau layanan di SDK yang digunakan, dan cara penggunaannya. Sebelum informasi apa pun dikumpulkan, SDK akan memberi tahu dan meminta izin Anda. Jika Anda tidak memberikan izin, informasi tidak akan dikumpulkan. 6.2 Data yang dikumpulkan akan diperiksa secara agregat untuk meningkatkan SDK dan dikelola sesuai dengan Kebijakan Privasi Google, yang terdapat di URL berikut: https://policies.google.com/privacy 6.3 Kumpulan data yang dianonimkan dan digabungkan dapat dibagikan kepada partner Google untuk meningkatkan SDK.

7. Aplikasi Pihak Ketiga

7.1 Jika Anda menggunakan SDK untuk menjalankan aplikasi yang dikembangkan oleh pihak ketiga atau yang mengakses data, konten, atau resource yang diberikan oleh pihak ketiga, Anda setuju bahwa Google tidak bertanggung jawab atas aplikasi, data, konten, atau resource tersebut. Anda memahami bahwa semua data, konten, atau resource yang dapat Anda akses melalui aplikasi pihak ketiga semacam ini adalah tanggung jawab penuh orang yang memberikannya, dan Google tidak bertanggung jawab atas kehilangan atau kerusakan yang mungkin Anda alami sebagai hasil dari menggunakan atau mengakses aplikasi, data, konten, atau resource pihak ketiga tersebut. 7.2 Anda harus memahami bahwa data, konten, dan resource yang diberikan kepada Anda melalui aplikasi pihak ketiga semacam ini dapat dilindungi oleh hak atas kekayaan intelektual yang dimiliki oleh penyedia (atau oleh orang atau perusahaan lain atas nama mereka). Anda tidak dapat memodifikasi, menyewa, menyewakan, meminjamkan, menjual, mendistribusikan, atau membuat karya turunan berdasarkan data, konten, atau resource tersebut (baik semua atau sebagian) kecuali pemilik terkait memberikan izin secara khusus kepada Anda untuk melakukannya. 7.3 Anda memahami bahwa penggunaan aplikasi, data, konten, atau resource pihak ketiga semacam ini dapat tunduk pada persyaratan yang terpisah antara Anda dan pihak ketiga yang relevan. Dalam kasus tersebut, Perjanjian Lisensi tidak memengaruhi hubungan hukum antara Anda dengan pihak ketiga ini.

8. Menggunakan API Android

8.1 Google Data API 8.1.1 Jika menggunakan API untuk mengambil data dari Google, Anda memahami bahwa data dapat dilindungi oleh hak atas kekayaan intelektual yang dimiliki oleh Google atau pihak ketiga yang memberikan data (atau oleh orang atau perusahaan lain atas nama mereka). Penggunaan Anda atas API semacam ini dapat tunduk pada Persyaratan Layanan tambahan. Anda tidak boleh memodifikasi, menyewa, menyewakan, meminjamkan, menjual, mendistribusikan, atau membuat karya turunan berdasarkan data ini (baik semua atau sebagian) kecuali diizinkan oleh Persyaratan Layanan yang relevan. 8.1.2 Jika Anda menggunakan API apa pun untuk mengambil data pengguna dari Google, Anda menerima dan menyetujui bahwa Anda hanya akan mengambil data dengan persetujuan tersurat pengguna dan hanya saat, dan untuk tujuan terbatas, pengguna telah memberi Anda izin untuk melakukannya. Jika Anda menggunakan Android Recognition Service API, yang didokumentasikan di URL berikut: https://developer.android.com/reference/android/speech/RecognitionService, sebagaimana diperbarui dari waktu ke waktu, Anda menyetujui bahwa penggunaan API tersebut tunduk pada Adendum Pemrosesan Data untuk Produk yang Pemroses Datanya adalah Google, yang terdapat di URL berikut: https://privacy.google.com/businesses/gdprprocessorterms/, sebagaimana diperbarui dari waktu ke waktu. Dengan mengklik setuju, berarti Anda menyetujui persyaratan Adendum Pemrosesan Data untuk Produk yang Pemroses Datanya adalah Google.

9. Pengakhiran Perjanjian Lisensi

9.1 Perjanjian Lisensi ini akan terus berlaku hingga dihentikan oleh Anda atau Google sebagaimana dijelaskan di bawah ini. 9.2 Jika Anda ingin mengakhiri Perjanjian Lisensi ini, Anda dapat melakukannya dengan menghentikan penggunaan SDK dan semua kredensial developer yang relevan. 9.3 Google dapat menghentikan Perjanjian Lisensi dengan Anda kapan saja jika: (A) Anda melanggar ketentuan apa pun dalam Perjanjian Lisensi; atau (B) Google diwajibkan melakukannya oleh hukum; atau (C) partner yang dengannya Google menawarkan bagian tertentu SDK (seperti API) kepada Anda telah menghentikan hubungannya dengan Google, atau berhenti menawarkan bagian tertentu SDK kepada Anda; atau (D) Google memutuskan untuk tidak lagi menyediakan SDK atau bagian tertentu SDK kepada pengguna di negara tempat tinggal Anda atau dari tempat layanan digunakan, atau ketetapan SDK atau layanan SDK tertentu kepada Anda oleh Google merupakan kebijaksanaan Google sendiri dan tidak lagi memenuhi syarat secara komersial. 9.4 Jika Perjanjian Lisensi berakhir, semua hak, kewajiban, dan tanggung jawab hukum yang manfaatnya dirasakan oleh Anda dan Google, tunduk kepada (atau yang telah terkumpul dari waktu ke waktu selama Perjanjian Lisensi diterapkan) atau yang dinyatakan untuk dilanjutkan tanpa waktu yang ditentukan, tidak akan terpengaruh oleh penghentian ini, dan ketetapan paragraf 14.7 akan terus diterapkan terhadap hak, kewajiban, dan tanggung jawab semacam ini dalam waktu yang tidak ditentukan.

10. PERNYATAAN PENYANGKALAN JAMINAN

10.1 ANDA SECARA TEGAS MEMAHAMI DAN MENYETUJUI BAHWA PENGGUNAAN SDK MENJADI TANGGUNG JAWAB ANDA DAN BAHWA SDK DISEDIAKAN "APA ADANYA" DAN "SEBAGAIMANA TERSEDIA" TANPA JAMINAN DALAM BENTUK APA PUN DARI GOOGLE. 10.2 PENGGUNAAN SDK DAN MATERI YANG DIUNDUH ATAU DIPEROLEH MELALUI PENGGUNAAN SDK ADALAH ATAS KEHENDAK DAN RISIKO ANDA SENDIRI DAN ANDA BERTANGGUNG JAWAB SEPENUHNYA ATAS KERUSAKAN PADA SISTEM KOMPUTER ATAU PERANGKAT LAIN ATAU HILANGNYA DATA YANG DISEBABKAN PENGGUNAAN TERSEBUT . 10.3 LEBIH LANJUT GOOGLE MENYANGKAL SECARA TEGAS TANGGUNG JAWAB HUKUM ATAS SEMUA JAMINAN DAN KETENTUAN APA PUN, BAIK TERSURAT MAUPUN TERSIRAT, TERMASUK, TETAPI TIDAK TERBATAS PADA JAMINAN DAN KETENTUAN TERSIRAT TENTANG KELAYAKAN UNTUK DIPERDAGANGKAN, KESESUAIAN UNTUK TUJUAN TERTENTU, DAN KETIADAAN PELANGGARAN.

11. BATASAN KEWAJIBAN

11.1 ANDA SECARA TERSURAT MEMAHAMI DAN MENYETUJUI BAHWA GOOGLE, ANAK PERUSAHAAN, AFILIASI, SERTA PEMBERI LISENSINYA TIDAK BERTANGGUNG JAWAB APA PUN KEPADA ANDA ATAS KERUGIAN LANGSUNG, TIDAK LANGSUNG, INSIDENTAL, SEBAGAI AKIBAT KHUSUS, ATAU SEBAGAI PERINGATAN YANG MUNGKIN DISEBABKAN OLEH ANDA, TERMASUK KEHILANGAN DATA APA PUN, BAIK GOOGLE ATAU PERWAKILANNYA TELAH DIBERI TAHU ATAU TIDAK, ATAUPUN SEHARUSNYA MENGETAHUI ATAU TIDAK, TERKAIT KEMUNGKINAN KEHILANGAN SEMACAM INI YANG MUNGKIN TERJADI.

12. Perlindungan Terhadap Kerugian

12.1 Dalam batas maksimum yang diizinkan oleh undang-undang, Anda setuju untuk membela, melindungi terhadap kerugian, dan membebaskan dari kerugian untuk Google, afiliasinya, serta direktur, pegawai, karyawan dan agen dari dan terhadap semua klaim, tindakan, gugatan, atau proses pihak ketiga, serta semua kehilangan, kewajiban, kerugian, biaya, dan pengeluaran (termasuk biaya pengacara yang wajar) yang timbul dari (a) penggunaan SDK Anda, dan (b) aplikasi apa pun yang Anda kembangkan di SDK yang melanggar hak cipta, merek dagang, rahasia dagang, karakteristik merek, paten atau hak atas kekayaan intelektual lain masing-masing pihak, mencemarkan nama baik, atau melanggar hak publisitas atau privasinya, dan (c) ketidakpatuhan Anda terhadap Perjanjian Lisensi.

13. Perubahan Perjanjian Lisensi

13.1 Google boleh membuat perubahan pada Perjanjian Lisensi saat mendistribusikan versi baru SDK. Saat perubahan tersebut dibuat, Google akan menyediakan versi baru Perjanjian Lisensi di situs web penyediaan SDK. 14.1 Perjanjian Lisensi ini merupakan perjanjian hukum menyeluruh antara Anda dan Google dan mengatur penggunaan SDK oleh Anda (kecuali layanan apa pun yang dapat disediakan oleh Google kepada Anda berdasarkan perjanjian tertulis tersendiri), dan sepenuhnya menggantikan setiap perjanjian sebelumnya antara Anda dan Google sehubungan dengan SDK. 14.2 Anda setuju bahwa jika Google tidak menjalankan atau menerapkan hak hukum atau upaya hukum yang terkandung dalam Perjanjian Lisensi ini (atau yang menguntungkan Google berdasarkan hukum yang berlaku), hal ini tidak akan dianggap sebagai pengesampingan formal atas hak Google dan bahwa hak atau upaya hukum tersebut akan tetap tersedia untuk Google. 14.3 Jika persidangan hukum yang berwenang memutuskan masalah ini menetapkan bahwa terdapat ketentuan dalam Perjanjian Lisensi yang tidak berlaku, ketentuan tersebut akan dihapus dari Perjanjian Lisensi tanpa memengaruhi bagian lain dari Perjanjian Lisensi. Semua ketentuan lainnya dalam Perjanjian Lisensi akan tetap valid dan dapat diberlakukan. 14.4 Anda memahami dan menyetujui bahwa setiap anggota grup perusahaan yang mana Google adalah perusahaan induknya, akan menjadi penerima pihak ketiga dari Perjanjian Lisensi ini, dan bahwa perusahaan lain tersebut berhak untuk memberlakukan secara langsung, dan mengandalkan, ketentuan apa pun dalam Perjanjian Lisensi ini, yang memberikan manfaat bagi (atau hak demi kepentingan) mereka. Selain itu, tidak ada satu pun orang atau perusahaan yang akan menjadi penerima pihak ketiga dari Perjanjian ini. 14.5 PEMBATASAN EKSPOR. SDK INI TUNDUK PADA HUKUM DAN PERATURAN EKSPOR AMERIKA SERIKAT. ANDA HARUS MEMATUHI SEMUA HUKUM DAN PERATURAN EKSPOR DOMESTIK DAN INTERNASIONAL YANG BERLAKU UNTUK SDK. HUKUM INI MENCAKUP PEMBATASAN NEGARA TUJUAN, PENGGUNA AKHIR, DAN PENGGUNAAN AKHIR. 14.6 Hak-hak yang diberikan dalam Perjanjian Lisensi tidak boleh dialihkan atau ditransfer oleh Anda atau Google tanpa persetujuan tertulis sebelumnya dari pihak lainnya. Baik Anda maupun Google tidak diperbolehkan mendelegasikan tanggung jawab atau kewajiban berdasarkan Perjanjian Lisensi tanpa persetujuan tertulis sebelumnya dari pihak lainnya. 14.7 Perjanjian Lisensi dan hubungan Anda dengan Google berdasarkan Perjanjian Lisensi, akan diatur oleh hukum Negara Bagian California terlepas dari pertentangan ketentuan hukum. Anda dan Google setuju untuk tunduk pada wilayah hukum eksklusif pengadilan yang terletak di wilayah Santa Clara, California untuk menyelesaikan masalah hukum yang timbul dari Perjanjian Lisensi. Meski demikian, Anda setuju bahwa Google akan tetap diizinkan untuk mengajukan upaya hukum (atau tipe keringanan hukum setara yang mendesak) di wilayah hukum mana pun. 27 Juli 2021
Download

verify_app_multiplatform_public_20250602.apk