Bagaimana cara kerja teknologi pemberitahuan push di Android?

218

Bagaimana Google menerapkan fitur pemberitahuan push mereka? Apakah ini bekerja melalui pemungutan suara yang dilakukan oleh layanan yang berjalan di latar belakang atau dengan cara yang berbeda?

Khawar Raza
sumber
24
Kedengarannya seperti pertanyaan nyata bagi saya. Saya bertanya-tanya jawabannya dan Google membawa saya ke sini. Sekali lagi pertanyaan kualitas lain ditutup.
Tino Mclaren
1
Saya juga ingin mengetahui hal ini dan berencana untuk menulis pertanyaan tetapi sudah ada yang ini jadi pasti pertanyaan yang bagus.
Igor Čordaš

Jawaban:

170

Dari apa yang saya dengar selama konferensi pengembang Android di Israel:

Hanya ada soket TCP yang menunggu dalam mode terima di server Google cloud. Koneksi TCP telah dimulai oleh aplikasi Google Play. Itu sebabnya Google Play harus diinstal pada perangkat untuk membuat Google Cloud Messaging (GCM) (sebelumnya Android Cloud to Device Messaging Service - C2DM ) berfungsi.

Ketika soket klien TCP ini menerima beberapa pesan, pesan tersebut berisi informasi seperti nama paket aplikasi yang harus dialamatkan, dan tentu saja - data itu sendiri. Data ini diurai dan dikemas menjadi maksud yang disiarkan dan akhirnya diterima oleh aplikasi.

Soket TCP tetap terbuka meskipun kondisi radio perangkat berubah menjadi mode "idle". Aplikasi tidak harus berjalan untuk menerima maksud.

Informasi lebih lanjut di http://developer.android.com/google/gcm/gcm.html

Tal Kanel
sumber
1
Tapi saya pikir ini berfungsi pada emulator juga. Hal yang muncul di benak saya adalah bahwa perangkat menjaga server diperbarui dengan jalurnya saat ini (IP). Ketika server google perlu mengirim pemberitahuan, dibutuhkan jalur saat ini dan meneruskan pesan ke jalur itu. Apakah saya benar sampai batas tertentu?
Khawar Raza
2
@ Khawar Raza: ketika IP perangkat berubah karena suatu alasan, perangkat terputus dari server. ketika itu terjadi - koneksi baru dibuat sebagai gantinya, berdasarkan pada perangkat IP baru.
Tal Kanel
1
@ Khawar Raza: emulator bekerja bahkan tanpa google play. Saya kira itu memulai soket ini dibangun secara internal, bukan google play
Tal Kanel
2
Saya melihat. Itu akan sangat menarik sebenarnya, saya ingin tahu apakah itu benar.
you786
2
Jadi ini masih polling, tapi sisi baiknya adalah polling dipusatkan oleh Google Play.
Accollativo
143

Android menyimpan satu koneksi aktif ke server Google, tetapi tidak menggunakan banyak daya atau data, karena tidak ada lalu lintas yang dikirim sampai ada sesuatu yang mengirim pesan Google Cloud Messaging (GCM) ke aplikasi di ponsel Anda. Hanya ada satu koneksi di ponsel, yang digunakan oleh semua aplikasi: menginstal aplikasi baru yang menggunakan GCM tidak menambah beban tambahan.

Langkah pertama dalam GCM adalah bahwa server pihak ketiga (seperti server email) mengirimkan permintaan ke server GCM Google. Server ini kemudian mengirimkan pesan ke perangkat Anda, melalui koneksi terbuka itu. Sistem Android melihat pesan untuk menentukan aplikasi mana yang digunakan, dan memulai aplikasi itu. Aplikasi harus sudah terdaftar di Android untuk menggunakan GCM, dan harus memiliki izin yang relevan. Saat aplikasi dimulai, itu mungkin membuat pemberitahuan langsung dengan data dari pesan. Ukuran pesan GCM sangat terbatas, sehingga aplikasi mungkin malah membuka koneksi normal ke server pihak ketiga untuk mendapatkan informasi lebih lanjut (misalnya, mengunduh tajuk email baru).

Keuntungan menggunakan pemberitahuan push adalah aplikasi tidak harus berjalan secara berkala untuk memeriksa data baru, menghemat daya dan data. Keuntungan memiliki mekanisme terpusat seperti GCM adalah bahwa perangkat hanya membutuhkan satu koneksi jaringan terbuka dan sistem Android GCM adalah satu-satunya hal yang perlu tetap berjalan, daripada setiap aplikasi harus tetap berjalan di latar belakang untuk menjaga jaringannya sendiri koneksi ke server sendiri.

Mengambil ini dari: Sumber Juga lihat di sini .

Aniket Thakur
sumber
1
Hanya komentar tentang koneksi GCM. Koneksi tunggal itu adalah koneksi Polling.
wmac
1
Bagian penting bagi saya adalah bahwa server pihak ketiga misalnya server e-mail benar-benar mengirim pesan notifikasi ke server Google GCM. Ini adalah layanan yang disediakan Google secara gratis dan pihak ketiga tersebut harus mengimplementasikan saluran komunikasi dengan server Google menggunakan protokol GCN mereka. Ngomong-ngomong, protokol ini hanya berupa respons HTTP yang diformat JSON. Lihat developers.google.com/cloud-messaging untuk informasi rinci.
Kyselejsyreček
10

Anda dapat menerapkan pemberitahuan push di Android sendiri dengan koneksi tcp polling panjang. Tapi itu akan melibatkan mempertahankan soket ekstra => menguras baterai. Atau Anda dapat membuka koneksi secara berkala menggunakan Manajer Alarm.

Google mungkin membuka satu soket untuk semua notifikasi push C2DM, karenanya lebih hemat baterai.

Shreesh
sumber
jadi itu mengkonfirmasi klien melakukan pemungutan suara di sepanjang koneksi tcp kan? apakah Anda tahu seberapa sering polling untuk data? apakah setiap 5 detik misalnya. atau apakah itu cepat seperti detak jantung?
j2emanue
3

Pada 10 April 2018, Google telah mencabut GCM. Server GCM dan API klien tidak digunakan lagi dan akan dihapus segera setelah 11 April 2019. Migrasikan aplikasi GCM ke Firebase Cloud Messaging (FCM), yang mewarisi infrastruktur GCM yang andal dan dapat diukur, ditambah banyak fitur baru.

https://firebase.google.com/docs/cloud-messaging/

pengguna1767754
sumber
1

Ya kau benar. Google memiliki layanan (Layanan GTalk) dan layanan ini meminta server Google dalam beberapa periode waktu.

Yury
sumber
Saya tidak tahu. Saya baru saja membaca bagaimana C2DM bekerja. Sekarang sesuatu dapat berubah.
Yury
-3

Pada perangkat Android, ketika Anda mendapatkan pemberitahuan push, gambar aplikasi pengirim dan pesan muncul di bilah status. Tepat ketika klien mengetuk notifikasi, ia mendarat di aplikasi.

Robert Manus
sumber
itu adalah koneksi TCP yang sudah berjalan lama di latar belakang, ini tidak dijelaskan pada jawabannya, mohon tetap berpegang pada pertanyaan yang diajukan :)
Nishchal Gautam