The Android Developer Challenge is back! Submit your idea before December 2.

Menambahkan notifikasi developer real-time

Ringkasan

Layanan Penagihan Google Play menyediakan notifikasi push server yang memungkinkan Anda memantau perubahan status untuk langganan yang dikelola Google Play. Dengan mengaktifkan Notifikasi Developer Real-Time, Anda akan menerima token pembelian langsung dari Cloud Pub/Sub setiap kali ada perubahan pada langganan yang sudah ada.

Notifikasi developer real-time tidak memberikan informasi lengkap tentang status langganan, seperti apakah pengguna saat ini berhak mengakses konten langganan atau tidak. Setelah menerima token, Anda harus selalu menggunakan token pembelian ini untuk mengkueri Google Play Developer API guna mendapatkan informasi lengkap dan mengupdate backend Anda dengan status hak saat ini dari pengguna tersebut.

Jenis notifikasi dapat berubah di masa mendatang. Anda dapat menangani jenis notifikasi yang tidak dikenal, dan dapat mengandalkan Google Play Developer API untuk logika bisnis penting.

Untuk mengaktifkan kapabilitas ini:

  1. Siapkan Cloud Pub/Sub menggunakan project Google Cloud Platform (GCP) Anda sendiri.
  2. Aktifkan notifikasi developer real-time untuk aplikasi Android Anda.

Menyiapkan Cloud Pub/Sub

Cloud Pub/Sub adalah layanan pesan real-time terkelola sepenuhnya yang memungkinkan Anda mengirim dan menerima pesan antar-aplikasi independen. Layanan ini memberikan pesan berlatensi rendah dan tahan lama yang membantu Anda mengintegrasikan sistem yang dihosting di Google Cloud Platform dan infrastruktur eksternal dengan cepat.

Layanan Penagihan Google Play menggunakan Cloud Pub/Sub untuk memublikasikan notifikasi push pada topik-topik yang menjadi langganan Anda.

Menetapkan prasyarat

Untuk menggunakan Cloud Pub/Sub, Anda harus memiliki project di Google Cloud Platform (GCP) dengan Cloud Pub/Sub API yang aktif. Jika Anda belum terbiasa menggunakan GCP dan Cloud Pub/Sub, silakan membaca Panduan memulai.

Untuk menerima notifikasi push, Anda harus membuat server backend aman agar dapat menggunakan pesan yang dikirim ke topik Anda. Server Anda dapat menggunakan Library Klien Cloud Pub/Sub untuk menggunakan pesan tersebut.

Membuat topik

Untuk mulai menerima notifikasi, Anda perlu membuat topik yang akan menjadi tujuan publikasi notifikasi Layanan Penagihan Google Play. Untuk membuat topik:

  1. Baca petunjuk di Membuat topik.
  2. Gunakan Google Cloud Platform Console untuk membuat topik.

Membuat langganan Pub/Sub

Untuk menerima pesan yang dipublikasikan ke suatu topik, Anda harus membuat langganan Pub/Sub ke topik tersebut. Untuk membuat langganan Pub/Sub:

  1. Baca Panduan Pelanggan Cloud Pub/Sub untuk menentukan apakah Anda ingin mengonfigurasi langganan sebagai langganan push atau langganan pull. Langganan pull mengharuskan server backend aman Anda menginisiasi permintaan ke server Cloud Pub/Sub untuk mengambil pesan. Langganan push mengharuskan Cloud Pub/Sub menginisiasi permintaan ke server backend aman Anda untuk mengirim pesan.
  2. Baca petunjuknya di Menambahkan langganan.
  3. Gunakan Google Cloud Platform Console untuk membuat langganan.

Memberikan hak publikasi atas topik Anda

Cloud Pub/Sub mengharuskan Anda memberikan hak istimewa kepada Layanan Penagihan Google Play untuk memublikasikan notifikasi ke topik Anda menggunakan langkah-langkah berikut:

  1. Buka Google Cloud Console.
  2. Pilih project Anda dan klik Pub/Sub di navigasi sebelah kiri.
  3. Temukan topik Anda dan buka detail izin.
    Gambar 1. Mengakses konfigurasi Izin topik.
  4. Tambahkan akun layanan google-play-developer-notifications@system.gserviceaccount.com dan berikan peran Pub/Sub Publisher.
    Gambar 2. Menambahkan akun layanan Google Play sebagai Pub/Sub Publisher.
  5. Simpan untuk menyelesaikan penyiapan topik.
    Gambar 3. Topik selesai dikonfigurasi.

Mengaktifkan notifikasi developer real-time untuk aplikasi Anda

Untuk mengaktifkan notifikasi developer real-time untuk aplikasi Anda:

  1. Buka Konsol Google Play.
  2. Pilih aplikasi Android Anda.
  3. Buka halaman Fitur pengembangan > Layanan & API.
  4. Scroll ke bagian Notifikasi developer real-time di bawah halaman.

    Gambar 4. Bagian Notifikasi developer real-time.

  5. Di kolom Nama topik, masukkan nama topik Cloud Pub/Sub lengkap yang Anda konfigurasikan sebelumnya. Nama topik harus menggunakan format projects/{project_id}/topics/{topic_name} di mana project_id adalah ID unik untuk project Anda, dan topic_name adalah nama topik yang dibuat sebelumnya.

  6. Klik Kirim Pesan Pengujian untuk mengirim pesan pengujian. Uji publikasi membantu memastikan bahwa semua bagian telah disiapkan dan dikonfigurasi dengan benar. Jika uji publikasi berhasil, akan muncul pesan yang menyatakan bahwa uji publikasi berhasil. Jika Anda memiliki pelanggan yang menjalankan topik ini, maka pelanggan tersebut juga akan menerima pesan pengujian.

    Jika publikasi gagal, pesan error akan ditampilkan. Pastikan nama topik sudah benar dan akun layanan google-play-developer-notifications@system.gserviceaccount.com memiliki akses Pub/Sub Publisher ke topik tersebut.

  7. Klik Perbarui Topik.

Mengubah nama topik

Untuk mengubah nama topik tanpa menghapus pesan, lakukan langkah-langkah berikut:

  1. Buat dan konfigurasikan topik dan langganan baru.
  2. Mulailah membaca dan memproses pesan yang dipublikasikan ke topik baru.
  3. Perbarui nama topik untuk aplikasi tersebut di Konsol Play.
  4. Menggunakan Stackdriver atau Cloud Developer Console, tunggu hingga topik lama berhenti menerima pesan, sambil memastikan topik baru menerima pesan.
  5. Hapus topik lama setelah tidak lagi menerima pesan.

Menghapus topik

Untuk menghapus topik:

  1. Hapus nama topik aplikasi Anda menggunakan Konsol Google Play.
  2. Setelah tidak ada lagi pesan yang masuk, hapus topik Pub/Sub menggunakan Google atau Google Cloud Platform Console

Catatan: Menghapus topik di Pub/Sub sebelum menghapus namanya dapat mengakibatkan pesan hilang. Anda harus menyiapkan ulang topik menggunakan Pub/Sub untuk memperbaiki masalah ini.

Menskalakan pemrosesan notifikasi

Karena beragamnya notifikasi yang berpotensi dikirim ke topik Pub/Sub, mungkin tidak praktis bagi Anda untuk menjalankan satu pemrosesan biner untuk semua notifikasi. Ada beberapa opsi yang dapat dipelajari saat menentukan cara menskalakan pemrosesan notifikasi Anda. Opsi tersebut mencakup:

  • Menggunakan notifikasi gaya push dan pull.
  • Menyiapkan beberapa langganan untuk sebuah topik.
  • Mempublikasikan ulang pesan notifikasi ke project Pub/Sub lainnya.

Misalnya, sebuah langganan dapat menjalankan beberapa proses yang menarik pesan dari langganan tersebut. Pesan dari langganan itu dibagi kepada para pembaca secara otomatis. Selanjutnya, masing-masing proses dapat memproses notifikasi atau merutekan permintaan ke layanan yang lebih khusus.

Jenis notifikasi baru dapat ditambahkan seiring waktu. Pelanggan harus siap menangani notifikasi baru dengan lancar jika ditampilkan, biasanya dengan mengonfirmasi bahwa pesan telah diterima.

Catatan: Jika Anda ingin menggunakan langganan push, daftarkan endpoint Anda sebelum menambahkan endpoint push. Untuk informasi lebih lanjut, baca Mendaftarkan endpoint

Untuk informasi lebih lanjut, baca Ringkasan Pelanggan Pub/Sub.

Memantau traffic notifikasi

Untuk memantau traffic notifikasi, gunakan layanan Google Stackdriver. Layanan ini memungkinkan Anda memantau traffic pada suatu topik dan menyiapkan pemberitahuan untuk kondisi tertentu. Misalnya, Anda dapat memberitahukan jika jumlah pesan yang belum Anda konfirmasi terlalu tinggi (kemungkinan ada masalah dengan pelanggan) atau jika jumlah publikasi terlalu rendah (kemungkinan ada masalah publikasi topik).

Menentukan harga dan kuota

Untuk detail harga dan kuota, baca harga dan kuota.

Memperkirakan penggunaan data

Bagian data pada notifikasi langganan adalah sekitar 1 KB data per permintaan. Setiap publikasi dan pull memerlukan permintaan tersendiri, atau sekitar 2 KB data per notifikasi. Jumlah notifikasi per bulan bergantung pada siklus penagihan dan perilaku pengguna Anda. Anda akan menerima setidaknya satu notifikasi untuk setiap pengguna selama satu siklus penagihan.

SLA

Layanan notifikasi developer real-time tidak menawarkan SLA latensi resmi. Namun, sebagian besar notifikasi akan dipublikasikan dalam waktu beberapa detik setelah peristiwa terjadi. Anda dapat memantau metrik penggunaan, seperti jumlah Pesan yang belum dikonfirmasi, di halaman Stackdriver untuk memastikan Anda memproses semua pesan secara tepat waktu.

Spesifikasi JSON

Setiap publikasi yang dibuat ke topik Pub/Sub mengandung satu DeveloperNotification berenkode base64 dengan kolom berikut:

{
  "version": string,
  "packageName": string
  "eventTimeMillis": long
  "subscriptionNotification": SubscriptionNotification
  "testNotification": TestNotification
}
Nama properti Nilai Deskripsi
version string Versi notifikasi ini. Pada tahap awal, nilainya adalah "1.0". Versi ini berbeda dengan kolom versi lainnya.
packageName string Nama paket aplikasi yang terkait dengan notifikasi ini (misalnya com.some.thing).
eventTimeMillis long Stempel waktu terjadinya peristiwa, dalam milidetik sejak Epoch.
subscriptionNotification SubscriptionNotification Jika kolom ini ada, berarti notifikasi ini terkait dengan langganan. Kolom ini berisi informasi tambahan yang terkait dengan langganan. Kolom ini sama eksklusifnya dengan testNotification.
testNotification TestNotification Jika kolom ini ada, berarti notifikasi ini terkait dengan uji publikasi. Notifikasi ini hanya dikirim melalui Konsol Developer Play. Kolom ini sama eksklusifnya dengan subscriptionNotification.

Sebuah SubscriptionNotification memuat kolom berikut:

{
  "version": string
  "notificationType": int
  "purchaseToken": string
  "subscriptionId": string
}
Nama properti Nilai Deskripsi
version string Versi notifikasi ini. Pada tahap awal, nilainya adalah "1.0". Versi ini berbeda dengan kolom versi lainnya.
notificationType int

Jenis notifikasi. Dapat memiliki nilai-nilai berikut:

  • (1) SUBSCRIPTION_RECOVERED - Langganan dipulihkan dari penangguhan akun.
  • (2) SUBSCRIPTION_RENEWED - Langganan aktif diperpanjang.
  • (3) SUBSCRIPTION_CANCELED - Langganan dibatalkan, baik secara sukarela maupun tidak. Untuk pembatalan sukarela, notifikasi dikirim jika pengguna melakukan pembatalan.
  • (4) SUBSCRIPTION_PURCHASED - Langganan baru dibeli.
  • (5) SUBSCRIPTION_ON_HOLD - Langganan memasuki penangguhan akun (jika diaktifkan).
  • (6) SUBSCRIPTION_IN_GRACE_PERIOD - Langganan memasuki masa tenggang (jika diaktifkan).
  • (7) SUBSCRIPTION_RESTARTED - Pengguna mengaktifkan kembali langganan mereka dari Play > Akun > Langganan (mewajibkan keikutsertaan untuk pemulihan langganan).
  • (8) SUBSCRIPTION_PRICE_CHANGE_CONFIRMED - Perubahan harga berlangganan berhasil dikonfirmasi oleh pengguna.
  • (9) SUBSCRIPTION_DEFERRED - Waktu pengulangan langganan diperpanjang.
  • (10) SUBSCRIPTION_PAUSED - Langganan dijeda.
  • (11) SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED - Jadwal jeda langganan berubah.
  • (12) SUBSCRIPTION_REVOKED - Langganan dicabut dari pengguna sebelum habis masa berlakunya.
  • (13) SUBSCRIPTION_EXPIRED - Langganan habis masa berlakunya.
purchaseToken string Token diberikan ke perangkat pengguna saat langganan dibeli.
subscriptionId string ID langganan yang dibeli (misalnya 'Monthly001').

Catatan: Notifikasi hanya dikirim untuk peristiwa yang mengharuskan perubahan hak pengguna. Misalnya, refund API tidak mengubah hak pengguna, sehingga tidak akan memicu notifikasi.

Sebuah TestNotification memuat kolom berikut:

{
  "version": string
}
Nama properti Nilai Deskripsi
version string Versi notifikasi ini. Pada tahap awal, nilainya adalah "1.0". Versi ini berbeda dengan kolom versi lainnya.

Contoh

Berikut ini contoh notifikasi untuk pembelian langganan:

{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503349566168",
  "subscriptionNotification":
  {
    "version":"1.0",
    "notificationType":4,
    "purchaseToken":"PURCHASE_TOKEN",
    "subscriptionId":"my.sku"
  }
}

Berikut ini contoh notifikasi pengujian:

{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503350156918",
  "testNotification":
  {
    "version":"1.0"
  }
}