Engage SDK Audio: Petunjuk integrasi teknis pihak ketiga

Google membuat platform di perangkat yang mengatur aplikasi pengguna menurut kategori dan memungkinkan pengalaman imersif baru untuk konsumsi dan penemuan konten aplikasi yang dipersonalisasi. Pengalaman layar penuh ini memberi partner developer peluang untuk menampilkan konten lengkap terbaik di saluran khusus di luar aplikasi mereka.

Panduan ini berisi petunjuk bagi partner developer untuk mengintegrasikan konten audio, menggunakan Engage SDK untuk mengisi area platform baru ini dan platform Google yang ada.

Detail integrasi

Terminologi

Integrasi ini mencakup tiga jenis cluster berikut: Rekomendasi, Lanjutan, dan Unggulan.

  • Cluster Rekomendasi menampilkan saran yang dipersonalisasi untuk konten yang dapat dibaca dari setiap partner developer.

    Rekomendasi Anda menggunakan struktur berikut:

    • Cluster Rekomendasi: Tampilan UI yang berisi kelompok rekomendasi dari partner developer yang sama.

      Gambar 1. UI Entertainment Space menampilkan Cluster Rekomendasi dari satu partner.
    • Entity: Objek yang mewakili satu item dalam cluster. Entity dapat berupa playlist, buku audio, podcast, dan lainnya. Baca bagian Memberikan data entity untuk mengetahui daftar jenis entity yang didukung.

      Gambar 2. UI Entertainment Space menampilkan satu Entity dalam Cluster Rekomendasi milik satu partner.
  • Cluster Lanjutan menampilkan konten audio yang baru-baru ini diakses oleh pengguna dari beberapa partner developer dalam satu pengelompokan UI. Setiap partner developer akan diizinkan untuk menyiarkan maksimum 10 entity di cluster Lanjutan.

    Gambar 3. UI Entertainment Space menampilkan cluster Lanjutan dengan rekomendasi yang belum selesai dari beberapa partner (hanya satu rekomendasi yang saat ini terlihat).
  • Cluster Unggulan menampilkan pilihan item dari beberapa partner developer dalam satu pengelompokan UI. Akan ada satu cluster Unggulan yang akan ditampilkan di dekat bagian atas UI dengan penempatan prioritas di atas semua cluster Rekomendasi. Setiap partner developer akan diizinkan untuk menyiarkan hingga 10 entity di cluster Unggulan.

    Gambar 4. UI Entertainment Space menampilkan cluster Unggulan dengan rekomendasi dari beberapa partner (hanya satu rekomendasi yang saat ini terlihat).

Persiapan

Level API minimum: 19

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

dependencies {
    // Make sure you also include that repository in your project's build.gradle file.
    implementation 'com.google.android.engage:engage-core:1.4.0'
}

Ringkasan

Desain ini didasarkan pada implementasi layanan terikat.

Data yang dapat dipublikasikan klien tunduk pada batas berikut untuk berbagai jenis cluster:

Jenis cluster Batas cluster Batas maksimum entity dalam cluster
Cluster Rekomendasi Maksimal 5 Maksimal 50
Cluster Lanjutan Maksimal 1 Maksimal 10
Cluster Unggulan Maksimal 1 Maksimal 10

Langkah 1: Memberikan data entity

SDK telah menentukan entity yang berbeda untuk mewakili setiap jenis item. Kami mendukung entity berikut untuk kategori Dengarkan:

  1. MusicAlbumEntity
  2. MusicArtistEntity
  3. MusicTrackEntity
  4. MusicVideoEntity
  5. PlaylistEntity
  6. PodcastSeriesEntity
  7. PodcastEpisodeEntity
  8. LiveRadioStationEntity
  9. AudiobookEntity

Diagram di bawah ini menguraikan atribut dan persyaratan yang tersedia untuk setiap jenis.

MusicAlbumEntity

Objek MusicAlbumEntity mewakili album musik (misalnya, Midnights oleh Taylor Swift).

Atribut Persyaratan Catatan
Nama Wajib Judul album musik.
Gambar poster Wajib Minimal satu gambar harus diberikan. Lihat Spesifikasi Gambar untuk panduan.
URI halaman info Wajib

Deep link ke aplikasi penyedia untuk mengetahui detail album musik.

Catatan: Anda dapat menggunakan deep link untuk atribusi. Lihat FAQ ini

Artis Wajib Daftar artis dalam album musik.
URI Pemutaran Opsional

Deep link yang mulai memutar album di aplikasi penyedia.

Catatan: Anda dapat menggunakan deep link untuk atribusi. Lihat FAQ ini

Deskripsi Opsional Harus dalam 200 karakter jika disediakan.
Jumlah lagu Opsional Jumlah lagu dalam album musik.
Genre Opsional Daftar genre dalam album musik.
Format Album Opsional

ALBUM (termasuk LP dan LP ganda)

EP

SINGLE

Kompilasi

Label musik Opsional Daftar label musik yang terkait dengan album.
Didownload di Perangkat Opsional Boolean yang menunjukkan apakah album musik didownload di perangkat.
Vulgar Opsional

Boolean yang menunjukkan apakah konten tersebut vulgar atau tidak

Item yang berisi materi vulgar atau memiliki peringatan saran orang tua harus disetel ke BENAR (TRUE). Item vulgar muncul dengan tag "E".

Tanggal rilis Opsional Tanggal rilis album dalam epoch milidetik.
Durasi Opsional Durasi album dalam milidetik.
Waktu engagement terakhir Opsional

Disarankan untuk item di Cluster Lanjutan. Dapat digunakan untuk pemberian peringkat.

Dalam epoch milidetik

Persentase progres selesai Opsional

Disarankan untuk item di Cluster Lanjutan.

Bilangan bulat antara 0 dan 100

MusicArtistEntity

Objek MusicArtistEntity mewakili artis musik (misalnya, Adele).

Atribut Persyaratan Catatan
Nama Wajib Nama artis musik.
Gambar poster Wajib Minimal satu gambar harus diberikan. Lihat Spesifikasi Gambar untuk panduan.
URI halaman info Wajib

Deep link ke aplikasi penyedia untuk mengetahui detail artis musik.

Catatan: Anda dapat menggunakan deep link untuk atribusi. Lihat FAQ ini

URI Pemutaran Opsional

Deep link yang mulai memutar lagu artis di aplikasi penyedia.

Catatan: Anda dapat menggunakan deep link untuk atribusi. Lihat FAQ ini

Deskripsi Opsional Harus dalam 200 karakter jika disediakan.
Waktu engagement terakhir Opsional

Disarankan untuk item di Cluster Lanjutan. Dapat digunakan untuk pemberian peringkat.

Dalam epoch milidetik

MusicTrackEntity

Objek MusicTrackEntity mewakili trek musik (misalnya, Yellow oleh Coldplay).

Atribut Persyaratan Catatan
Nama Wajib Judul trek musik.
Gambar poster Wajib Minimal satu gambar harus diberikan. Lihat Spesifikasi Gambar untuk panduan.
URI Pemutaran Wajib

Deep link yang mulai memutar trek musik di aplikasi penyedia.

Catatan: Anda dapat menggunakan deep link untuk atribusi. Lihat FAQ ini

URI halaman info Opsional

Deep link ke aplikasi penyedia untuk mengetahui detail trek musik.

Catatan: Anda dapat menggunakan deep link untuk atribusi. Lihat FAQ ini

Deskripsi Opsional Harus dalam 200 karakter jika disediakan.
Durasi Opsional Durasi lagu dalam milidetik.
Album Opsional Nama album tempat lagu berada.
Artis Wajib Daftar artis untuk trek musik.
Didownload di Perangkat Opsional Boolean yang menunjukkan apakah trek musik didownload di perangkat.
Vulgar Opsional

Boolean yang menunjukkan apakah konten tersebut vulgar atau tidak

Item yang berisi materi vulgar atau memiliki peringatan saran orang tua harus disetel ke BENAR (TRUE). Item vulgar muncul dengan tag "E".

Waktu engagement terakhir Opsional

Disarankan untuk item di Cluster Lanjutan. Dapat digunakan untuk pemberian peringkat.

Dalam epoch milidetik

Persentase progres selesai Opsional

Disarankan untuk item di Cluster Lanjutan.

Bilangan bulat antara 0 dan 100

MusicVideoEntity

Objek MusicVideoEntity mewakili video musik (misalnya, The Weeknd - Take My Breath (Video Musik Resmi)).

Atribut Persyaratan Catatan
Nama Wajib Judul video musik.
Gambar poster Wajib Minimal satu gambar harus diberikan. Lihat Spesifikasi Gambar untuk panduan.
URI Pemutaran Wajib

Deep link yang mulai memutar video musik di aplikasi penyedia.

Catatan: Anda dapat menggunakan deep link untuk atribusi. Lihat FAQ ini

URI halaman info Opsional

Deep link ke aplikasi penyedia untuk mengetahui detail video musik.

Catatan: Anda dapat menggunakan deep link untuk atribusi. Lihat FAQ ini

Durasi Opsional Durasi video dalam milidetik.
Jumlah tayangan Opsional Jumlah tayangan video dalam format teks bebas.
Artis Opsional Daftar artis video musik.
Rating konten Opsional Daftar rating konten lagu.
Deskripsi Opsional Harus dalam 200 karakter jika disediakan.
Didownload di Perangkat Opsional Boolean yang menunjukkan apakah video musik didownload di perangkat.
Vulgar Opsional

Boolean yang menunjukkan apakah konten tersebut vulgar atau tidak

Item yang berisi materi vulgar atau memiliki peringatan saran orang tua harus disetel ke BENAR (TRUE). Item vulgar muncul dengan tag "E".

Waktu engagement terakhir Opsional

Disarankan untuk item di Cluster Lanjutan. Dapat digunakan untuk pemberian peringkat.

Dalam epoch milidetik

Persentase progres selesai Opsional

Disarankan untuk item di Cluster Lanjutan.

Bilangan bulat antara 0 dan 100

PlaylistEntity

Objek PlaylistEntity mewakili playlist musik (misalnya, Playlist Top 10 AS).

Atribut Persyaratan Catatan
Nama Wajib Judul playlist.
Gambar poster Wajib Minimal satu gambar harus diberikan. Lihat Spesifikasi Gambar untuk panduan.
URI Pemutaran Wajib

Deep link yang mulai memutar playlist musik di aplikasi penyedia.

Catatan: Anda dapat menggunakan deep link untuk atribusi. Lihat FAQ ini

URI halaman info Opsional

Deep link ke aplikasi penyedia untuk mengetahui detail playlist musik.

Catatan: Anda dapat menggunakan deep link untuk atribusi. Lihat FAQ ini

Durasi Opsional Durasi playlist dalam milidetik.
Jumlah lagu Opsional Jumlah lagu dalam playlist musik.
Deskripsi Opsional Harus dalam 200 karakter jika disediakan.
Didownload di Perangkat Opsional Boolean yang menunjukkan apakah playlist didownload di perangkat.
Vulgar Opsional

Boolean yang menunjukkan apakah konten tersebut vulgar atau tidak

Item yang berisi materi vulgar atau memiliki peringatan saran orang tua harus disetel ke BENAR (TRUE). Item vulgar muncul dengan tag "E".

Waktu engagement terakhir Opsional

Disarankan untuk item di Cluster Lanjutan. Dapat digunakan untuk pemberian peringkat.

Dalam epoch milidetik

Persentase progres selesai Opsional

Disarankan untuk item di Cluster Lanjutan.

Bilangan bulat antara 0 dan 100

PodcastSeriesEntity

Objek PodcastSeriesEntity mewakili seri podcast (misalnya, This American Life).

Atribut Persyaratan Catatan
Nama Wajib Judul seri podcast.
Gambar poster Wajib Minimal satu gambar harus diberikan. Lihat Spesifikasi Gambar untuk panduan.
URI halaman info Wajib

Deep link ke aplikasi penyedia untuk mengetahui detail rangkaian podcast.

Catatan: Anda dapat menggunakan deep link untuk atribusi. Lihat FAQ ini

URI Pemutaran Opsional

Deep link yang mulai memutar seri podcast di aplikasi penyedia.

Catatan: Anda dapat menggunakan deep link untuk atribusi. Lihat FAQ ini

Jumlah episode Opsional Jumlah episode dalam seri podcast.
Nama produksi Opsional Nama produksi seri podcast.
Host Opsional Daftar host seri podcast.
Genre Opsional Daftar genre seri podcast.
Didownload di perangkat Opsional Boolean yang menunjukkan apakah podcast didownload di perangkat.
Deskripsi Opsional Harus dalam 200 karakter jika disediakan.
Vulgar Opsional

Boolean yang menunjukkan apakah konten tersebut vulgar atau tidak

Item yang berisi materi vulgar atau memiliki peringatan saran orang tua harus disetel ke BENAR (TRUE). Item vulgar muncul dengan tag "E".

Waktu engagement terakhir Opsional

Disarankan untuk item di Cluster Lanjutan. Dapat digunakan untuk pemberian peringkat.

Dalam epoch milidetik

PodcastEpisodeEntity

Objek PodcastEpisodeEntity mewakili seri podcast (misalnya, Spark Bird, Episode 754: This American Life).

Atribut Persyaratan Catatan
Nama Wajib Judul episode podcast.
Gambar poster Wajib Minimal satu gambar harus diberikan. Lihat Spesifikasi Gambar untuk panduan.
URI Pemutaran Wajib

Deep link yang mulai memutar episode podcast di aplikasi penyedia.

Catatan: Anda dapat menggunakan deep link untuk atribusi. Lihat FAQ ini

Judul seri produksi Wajib Nama seri podcast yang mencakup episode tersebut.
Durasi Wajib Durasi episode podcast dalam milidetik.
Tanggal Publikasi Wajib Tanggal publikasi podcast (dalam epoch milidetik)
URI halaman info Opsional

Deep link ke aplikasi penyedia untuk mengetahui detail episode podcast.

Catatan: Anda dapat menggunakan deep link untuk atribusi. Lihat FAQ ini

Nama produksi Opsional Nama produksi seri podcast.
Indeks episode Opsional Indeks episode dalam serial (indeks pertama adalah 1).
Host Opsional Daftar host episode podcast.
Genre Opsional Daftar genre episode podcast.
Didownload di perangkat Opsional Boolean yang menunjukkan apakah episode podcast didownload di perangkat.
Deskripsi Opsional Harus dalam 200 karakter jika disediakan.
Podcast Video Opsional Boolean yang menunjukkan apakah episode podcast memiliki konten video
Vulgar Opsional

Boolean yang menunjukkan apakah konten tersebut vulgar atau tidak

Item yang berisi materi vulgar atau memiliki peringatan saran orang tua harus disetel ke BENAR (TRUE). Item vulgar muncul dengan tag "E".

Jenis Dengarkan Berikutnya Opsional

Direkomendasikan untuk Item di Cluster Lanjutan

TYPE_CONTINUE - Melanjutkan item audio yang belum selesai didengarkan.

TYPE_NEXT - Melanjutkan ke salah satu seri baru.

TYPE_NEW - Baru dirilis.

Waktu engagement terakhir Opsional

Disarankan untuk item di Cluster Lanjutan. Dapat digunakan untuk pemberian peringkat.

Dalam epoch milidetik

Persentase progres selesai Opsional

Disarankan untuk item di Cluster Lanjutan.

Bilangan bulat antara 0 dan 100

LiveRadioStationEntity

Objek LiveRadioStationEntity mewakili stasiun radio live (misalnya, 98,1 The Breeze).

Atribut Persyaratan Catatan
Nama Wajib Nama stasiun radio live.
Gambar poster Wajib Minimal satu gambar harus diberikan. Lihat Spesifikasi Gambar untuk panduan.
URI Pemutaran Wajib

Deep link yang mulai memutar stasiun radio di aplikasi penyedia.

Catatan: Anda dapat menggunakan deep link untuk atribusi. Lihat FAQ ini

URI halaman info Opsional

Deep link ke aplikasi penyedia untuk mengetahui detail stasiun radio.

Catatan: Anda dapat menggunakan deep link untuk atribusi. Lihat FAQ ini

Frekuensi Opsional Frekuensi tempat stasiun radio disiarkan (misalnya, "98,1 FM").
Judul acara Opsional Acara saat ini yang sedang diputar di stasiun radio.
Host Opsional Daftar host stasiun radio.
Deskripsi Opsional Harus dalam 200 karakter jika disediakan.
Waktu engagement terakhir Opsional

Disarankan untuk item di Cluster Lanjutan. Dapat digunakan untuk pemberian peringkat.

Dalam epoch milidetik

AudiobookEntity

Objek AudiobookEntity mewakili buku audio (misalnya, buku audio Becoming oleh Michelle Obama).

Atribut Persyaratan Catatan
Nama Wajib
Gambar poster Wajib Minimal satu gambar harus diberikan. Lihat Spesifikasi Gambar untuk panduan.
Penulis Wajib Anda harus memberikan setidaknya satu nama penulis.
Narator Wajib Anda harus memberikan setidaknya satu nama narator.
URI link tindakan Wajib

Deep link ke aplikasi penyedia untuk buku audio.

Catatan: Anda dapat menggunakan deep link untuk atribusi. Lihat FAQ ini

Tanggal publikasi Opsional Dalam epoch milidetik jika disediakan.
Deskripsi Opsional Harus dalam 200 karakter jika disediakan.
Harga Opsional Teks bebas
Durasi Opsional Harus berupa nilai positif jika diberikan.
Genre Opsional Daftar genre yang terkait dengan buku.
Nama seri Opsional Nama seri buku audio tersebut (misalnya, Harry Potter.
Indeks unit seri Opsional Indeks buku audio dalam seri, dengan 1 sebagai buku audio pertama dalam seri tersebut. Misalnya, jika Harry Potter and the Prisoner of Azkaban adalah buku ke-3 dalam seri ini, maka harus ditetapkan ke 3.
Jenis lanjutkan buku Opsional

TYPE_CONTINUE - Melanjutkan buku yang belum selesai dibaca.

TYPE_NEXT - Melanjutkan ke salah satu seri baru.

TYPE_NEW - Baru dirilis.

Waktu Engagement Terakhir Wajib bersyarat

Harus diberikan saat item berada dalam cluster Lanjutan.

Dalam epoch milidetik.

Persentase Progres Selesai Wajib bersyarat

Harus diberikan saat item berada dalam cluster Lanjutan.

Buku audio yang *baru* diperoleh dapat menjadi bagian dari cluster lanjutkan membaca.

Nilai harus lebih besar dari 0 dan kurang dari 100.

DisplayTimeWindow - Menetapkan periode waktu untuk konten yang akan ditampilkan di platform
Stempel Waktu Awal Opsional

Stempel waktu epoch yang setelahnya konten akan ditampilkan di platform.

Jika tidak disetel, konten akan memenuhi syarat untuk ditampilkan di platform.

Dalam epoch milidetik.

Stempel Waktu Akhir Opsional

Stempel waktu epoch yang setelahnya konten tidak lagi ditampilkan di platform.

Jika tidak disetel, konten akan memenuhi syarat untuk ditampilkan di platform.

Dalam epoch milidetik.

Spesifikasi gambar

Spesifikasi yang diperlukan untuk aset gambar tercantum di bawah ini:

Rasio aspek Persyaratan Piksel minimum Piksel yang direkomendasikan
Persegi (1x1) Wajib 300x300 1200x1200
Lanskap (1,91x1) Opsional 600x314 1200x628
Potret (4x5) Opsional 480x600 960x1200

Format file

PNG, JPG, GIF statis, WebP

Ukuran file maksimum

5120 KB

Rekomendasi tambahan

  • Area aman gambar: Tempatkan konten penting Anda di 80% bagian tengah gambar.

Contoh

MusicAlbumEntity musicAlbumEntity =
        new MusicAlbumEntity.Builder()
            .setName(NAME)
             .addPosterImage(new Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(960)
                  .setImageWidthInPixel(408)
                  .build())
            .setPlayBackUri("https://play.google/album/play")
            .setInfoPageUri("https://play.google/album/info")
            .setDescription("A description of this album.")
            .addArtist("Artist")
            .addGenre("Genre")
            .addMusicLabel("Label")
            .addContentRating("Rating")
            .setSongsCount(960)
            .setReleaseDateEpochMillis(1633032895L)
            .setDurationMillis(1633L)
            .build();
AudiobookEntity audiobookEntity =
        new AudiobookEntity.Builder()
            .setName("Becoming")
            .addPosterImage(new Image.Builder()
                 .setImageUri(Uri.parse("http://www.x.com/image.png"))
                 .setImageHeightInPixel(960)
                 .setImageWidthInPixel(408)
                  .build())
            .addAuthor("Michelle Obama")
            .addNarrator("Michelle Obama")
            .setActionLinkUri(
               Uri.parse("https://play.google/audiobooks/1"))
            .setDurationMillis(16335L)
            .setPublishDateEpochMillis(1633032895L)
            .setDescription("An intimate, powerful, and inspiring memoir")
            .setPrice("$16.95")
            .addGenre("biography")
            .build();

Langkah 2: Menyediakan data Cluster

Sebaiknya jalankan tugas publikasi konten di latar belakang (misalnya, menggunakan WorkManager) dan dijadwalkan secara berkala atau berbasis peristiwa (misalnya, setiap kali pengguna membuka aplikasi atau saat pengguna menambahkan sesuatu ke keranjangnya).

AppEngagePublishClient bertanggung jawab untuk memublikasikan cluster. API berikut tersedia di klien:

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishContinuationCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteContinuationCluster
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

API ini digunakan untuk memeriksa apakah layanan tersedia untuk integrasi, dan apakah konten dapat ditampilkan di perangkat atau tidak.

Kotlin


client.isServiceAvailable.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        // Handle IPC call success
        if(task.result) {
          // Service is available on the device, proceed with content
          // publish calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
}

Java


client.isServiceAvailable().addOnCompleteListener(task - > {
    if (task.isSuccessful()) {
        // Handle success
        if(task.getResult()) {
          // Service is available on the device, proceed with content publish
          // calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
});

publishRecommendationClusters

API ini digunakan untuk memublikasikan daftar objek RecommendationCluster.

Kotlin


client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Trending music")
                        .build())
                .build())

Java


client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Trending music")
                        .build())
                .build());

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

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

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

publishFeaturedCluster

API ini digunakan untuk memublikasikan daftar objek FeaturedCluster.

Kotlin


client.publishFeaturedCluster(
            PublishFeaturedClusterRequest.Builder()
                .setFeaturedCluster(
                    FeaturedCluster.Builder()
                        ...
                        .build())
                .build())

Java


client.publishFeaturedCluster(
            new PublishFeaturedClusterRequest.Builder()
                .setFeaturedCluster(
                    new FeaturedCluster.Builder()
                        ...
                        .build())
                .build());

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

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

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

publishContinuationCluster

API ini digunakan untuk memublikasikan objek ContinuationCluster.

Kotlin


client.publishContinuationCluster(
            PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    ContinuationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build())

Java


client.publishContinuationCluster(
            PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    ContinuationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .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 Cluster Lanjutan yang diperbarui.

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

publishUserAccountManagementRequest

API ini digunakan untuk memublikasikan kartu Login. Tindakan login mengarahkan pengguna ke halaman login aplikasi sehingga aplikasi dapat memublikasikan konten (atau memberikan konten yang lebih dipersonalisasi)

Metadata berikut adalah bagian dari Kartu Login -

Atribut Persyaratan Deskripsi
URI Tindakan Wajib Deeplink ke Tindakan (yaitu membuka halaman login aplikasi)
Gambar Opsional - Jika tidak diberikan, Judul harus diberikan

Gambar Ditampilkan pada Kartu

Gambar rasio aspek 16x9 dengan resolusi 1264x712

Judul Opsional - Jika tidak diberikan, Gambar harus diberikan Judul pada Kartu
Teks Tindakan Opsional Teks yang Ditampilkan pada CTA (yaitu Login)
Subjudul Opsional Subjudul Opsional pada Kartu

Kotlin


var SIGN_IN_CARD_ENTITY =
      SignInCardEntity.Builder()
          .addPosterImage(
              Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build()

client.publishUserAccountManagementRequest(
            PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

Java


SignInCardEntity SIGN_IN_CARD_ENTITY =
      new SignInCardEntity.Builder()
          .addPosterImage(
              new Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build();

client.publishUserAccountManagementRequest(
            new PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

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

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

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

updatePublishStatus

Jika untuk alasan bisnis internal apa pun, tidak ada cluster yang dipublikasikan, sebaiknya perbarui status publikasi menggunakan API updatePublishStatus. Hal ini penting karena:

  • Memberikan status dalam semua skenario, bahkan saat konten dipublikasikan (STATUS == PUBLISHED), sangat penting untuk mengisi dasbor yang menggunakan status eksplisit ini untuk menyampaikan kondisi dan metrik integrasi Anda yang lain.
  • Jika tidak ada konten yang dipublikasikan, tetapi status integrasi tidak rusak (STATUS == NOT_PUBLISHED), Google dapat menghindari pemicuan pemberitahuan di dasbor kondisi aplikasi. Fitur ini mengonfirmasi bahwa konten tidak dipublikasikan karena situasi yang diharapkan dari sudut pandang penyedia.
  • Hal ini membantu developer memberikan analisis tentang kapan data dipublikasikan atau tidak.
  • Google dapat menggunakan kode status untuk mendorong pengguna melakukan tindakan tertentu dalam aplikasi sehingga mereka dapat melihat konten aplikasi atau mengatasinya.

Daftar kode status publikasi yang memenuhi syarat adalah:

// Content is published
AppEngagePublishStatusCode.PUBLISHED,

// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,

// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,

// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,

// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,

// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,

// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,

// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,

// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER

Jika konten tidak dipublikasikan karena pengguna tidak login, Google merekomendasikan untuk memublikasikan Kartu Login. Jika karena alasan apa pun penyedia tidak dapat memublikasikan Kartu Login, sebaiknya panggil API updatePublishStatus dengan kode status NOT_PUBLISHED_REQUIRES_SIGN_IN

Kotlin


client.updatePublishStatus(
   PublishStatusRequest.Builder()
     .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
     .build())

Java


client.updatePublishStatus(
    new PublishStatusRequest.Builder()
        .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
        .build());

deleteRecommendationClusters

API ini digunakan untuk menghapus konten Cluster Rekomendasi.

Kotlin


client.deleteRecommendationClusters()

Java


client.deleteRecommendationClusters();

Saat menerima permintaan, layanan akan menghapus data yang ada dari Cluster Rekomendasi. Jika terjadi error, seluruh permintaan akan ditolak dan status yang ada dipertahankan.

deleteFeaturedCluster

API ini digunakan untuk menghapus konten Cluster Unggulan.

Kotlin


client.deleteFeaturedCluster()

Java


client.deleteFeaturedCluster();

Saat menerima permintaan, layanan akan menghapus data yang ada dari Cluster Unggulan. Jika terjadi error, seluruh permintaan akan ditolak dan status yang ada dipertahankan.

deleteContinuationCluster

API ini digunakan untuk menghapus konten Cluster Lanjutan.

Kotlin


client.deleteContinuationCluster()

Java


client.deleteContinuationCluster();

Saat menerima permintaan, layanan akan menghapus data yang ada dari Cluster Lanjutan. Jika terjadi error, seluruh permintaan akan ditolak dan status yang ada dipertahankan.

deleteUserManagementCluster

API ini digunakan untuk menghapus konten Cluster UserAccountManagement.

Kotlin


client.deleteUserManagementCluster()

Java


client.deleteUserManagementCluster();

Saat menerima permintaan, layanan akan menghapus data yang ada dari Cluster UserAccountManagement. Jika terjadi error, seluruh permintaan akan ditolak dan status yang ada dipertahankan.

deleteClusters

API ini digunakan untuk menghapus konten jenis cluster tertentu.

Kotlin


client.deleteClusters(
    DeleteClustersRequest.Builder()
      .addClusterType(ClusterType.TYPE_FEATURED)
      .addClusterType(ClusterType.TYPE_RECOMMENDATION)
      ...
      .build())

Java


client.deleteClusters(
            new DeleteClustersRequest.Builder()
                .addClusterType(ClusterType.TYPE_FEATURED)
                .addClusterType(ClusterType.TYPE_RECOMMENDATION)
                ...
                .build());

Saat menerima permintaan tersebut, layanan akan menghapus data yang ada dari semua cluster yang cocok dengan jenis cluster yang ditentukan. Klien dapat memilih untuk meneruskan satu atau beberapa jenis cluster. Jika terjadi error, seluruh permintaan akan ditolak dan status yang ada dipertahankan.

Penanganan error

Sangat disarankan untuk memproses hasil tugas dari API publikasi sehingga tindakan lanjutan dapat diambil untuk memulihkan dan mengirim ulang tugas yang berhasil.

client.publishRecommendationClusters(
              new PublishRecommendationClustersRequest.Builder()
                  .addRecommendationCluster(...)
                  .build())
          .addOnCompleteListener(
              task -> {
                if (task.isSuccessful()) {
                  // do something
                } else {
                  Exception exception = task.getException();
                  if (exception instanceof AppEngageException) {
                    @AppEngageErrorCode
                    int errorCode = ((AppEngageException) exception).getErrorCode();
                    if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
                      // do something
                    }
                  }
                }
              });

Error akan ditampilkan sebagai AppEngageException dengan penyebab disertakan sebagai kode error.

Kode error Catatan
SERVICE_NOT_FOUND Layanan tidak tersedia di perangkat yang ditentukan.
SERVICE_NOT_AVAILABLE Layanan tersedia di perangkat tertentu, tetapi tidak tersedia pada saat panggilan (misalnya, dinonaktifkan secara eksplisit).
SERVICE_CALL_EXECUTION_FAILURE Eksekusi tugas gagal karena masalah threading. Dalam hal ini, tindakan tersebut dapat dicoba lagi.
SERVICE_CALL_PERMISSION_DENIED Pemanggil tidak diizinkan untuk melakukan panggilan layanan.
SERVICE_CALL_INVALID_ARGUMENT Permintaan berisi data yang tidak valid (misalnya, lebih dari jumlah cluster yang diizinkan).
SERVICE_CALL_INTERNAL Terjadi error di sisi layanan.
SERVICE_CALL_RESOURCE_EXHAUSTED Panggilan layanan terlalu sering dilakukan.

Langkah 3: Menangani intent siaran

Selain melakukan panggilan API publikasi konten melalui tugas, Anda juga harus menyiapkan BroadcastReceiver untuk menerima permintaan publikasi konten.

Tujuan intent siaran terutama untuk pengaktifan kembali aplikasi dan memaksa sinkronisasi data. Intent siaran tidak didesain untuk dikirim terlalu sering. Intent itu hanya dipicu jika Layanan Engage menyimpulkan bahwa konten mungkin sudah tidak berlaku (misalnya, seminggu yang lalu). Dengan demikian, pengguna menjadi lebih yakin bahwa mereka dapat memiliki pengalaman konten baru meskipun aplikasi tidak dijalankan dalam waktu yang lama.

BroadcastReceiver harus disiapkan dengan dua cara berikut:

  • Daftarkan instance class BroadcastReceiver secara dinamis menggunakan Context.registerReceiver(). Hal ini memungkinkan komunikasi dari aplikasi yang masih aktif dalam memori.
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received

// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received

// Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
// received
}

public static void registerBroadcastReceivers(Context context) {

context = context.getApplicationContext();

// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION));

// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED));


// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION));

}
  • Deklarasikan penerapan secara statis dengan tag <receiver> di file AndroidManifest.xml Anda. Hal ini memungkinkan aplikasi menerima intent siaran ketika tidak sedang berjalan, dan juga memungkinkan aplikasi untuk memublikasikan konten.
<application>
   <receiver
      android:name=".AppEngageBroadcastReceiver"
      android:exported="true"
      android:enabled="true">
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_CONTINUATION" />
      </intent-filter>
   </receiver>
</application>

Intent berikut akan dikirimkan oleh layanan:

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION Sebaiknya mulai panggilan publishRecommendationClusters saat menerima intent ini.
  • com.google.android.engage.action.PUBLISH_FEATURED Sebaiknya mulai panggilan publishFeaturedCluster saat menerima intent ini.
  • com.google.android.engage.action.PUBLISH_CONTINUATION Sebaiknya mulai panggilan publishContinuationCluster saat menerima intent ini.

Alur kerja integrasi

Untuk panduan langkah demi langkah cara memverifikasi integrasi Anda setelah selesai, lihat Alur kerja integrasi developer untuk Engage.

FAQ

Lihat Pertanyaan Umum tentang Engage SDK untuk mengetahui FAQ.

Kontak

Hubungi engage-developers@google.com jika ada pertanyaan selama proses integrasi. Tim kami akan membalas sesegera mungkin.

Langkah berikutnya

Setelah menyelesaikan integrasi ini, langkah-langkah Anda berikutnya adalah sebagai berikut:

  • Kirim email ke engage-developers@google.com dan lampirkan APK terintegrasi yang siap diuji oleh Google.
  • Google akan melakukan verifikasi dan meninjau secara internal untuk memastikan integrasi berfungsi seperti yang diharapkan. Jika perlu perubahan, Google akan menghubungi Anda dengan detail yang diperlukan.
  • Setelah pengujian selesai dan tidak ada perubahan yang diperlukan, Google akan menghubungi Anda untuk memberi tahu bahwa Anda dapat mulai memublikasikan APK yang diupdate dan terintegrasi ke Play Store.
  • Setelah Google mengonfirmasi bahwa APK yang diupdate telah dipublikasikan ke Play Store, cluster Rekomendasi, Unggulan, dan Lanjutan akan dipublikasikan dan terlihat oleh pengguna.