Anlık bildirim teknolojisi Android'de nasıl çalışır?


218

Google, push bildirim özelliklerini nasıl uyguladı? Arka planda veya farklı bir şekilde çalışan bir servis tarafından yapılan yoklama ile çalışıyor mu?


24
Bana gerçek bir soru gibi geliyor. Bunun cevabını merak ediyordum ve Google beni buraya getirdi. Bir kez daha başka bir kalite sorunu kapandı.
Tino Mclaren

1
Bunu da bilmek istiyorum ve bir soru yazmayı planlıyordum ama bu zaten var, bu yüzden kesinlikle iyi bir soru.
Igor Čordaš

Yanıtlar:


170

İsrail'deki bir Android geliştiricileri konferansında duyduklarımdan:

Bir bulut Google sunucusunda kabul modunda bekleyen bir TCP soketi vardır . TCP bağlantısı Google Play uygulaması tarafından başlatılmıştı. Google Cloud Messaging (GCM) (eski adıyla Android Cloud to Device Messaging Service - C2DM ) uygulamasını çalıştırmak için Google Play'in cihaza yüklenmesi gerekir .

Bu TCP istemci soketi bir ileti aldığında, iletide ele alınması gereken uygulamanın paket adı ve elbette verilerin kendisi gibi bilgiler bulunur. Bu veri ayrıştırılır ve bir içine doludur niyet yayın ve sonunda uygulama tarafından alınmasını.

TCP soketi, cihazın radyo durumu "boşta" moduna geçse bile açık kalır. Amaçları almak için uygulamaların çalışması gerekmez.

Daha fazla bilgi için http://developer.android.com/google/gcm/gcm.html


1
Ama bence emülatörde de çalışıyor. Aklıma gelen şey, cihazın sunucuyu mevcut yolu (IP) ile güncel tutmasıdır. Google sunucusunun bildirim göndermesi gerektiğinde, geçerli yolunu alır ve iletiyi bu yola iletir. Bir dereceye kadar haklı mıyım?
Khawar Raza

2
@Khawar Raza: cihazın IP'si herhangi bir nedenle değiştiğinde, cihazın sunucu ile bağlantısı kesilir. olduğunda - cihazın yeni IP'sine bağlı olarak yeni bağlantı astemblish.
Tal Kanel

1
@Khawar Raza: emülatör google oyunu olmadan bile çalışır. Sanırım bu soketi google play yerine dahili olarak başlattı
Tal Kanel

2
Anlıyorum. Aslında bu oldukça ilginç olurdu, bunun doğru olup olmadığını merak ediyorum.
you786

2
Bu yüzden hala oylama var, ama iyi tarafı, oylamanın Google Play tarafından merkezileştirilmesidir.
Accollativo

143

Android, Google sunucularına bir etkin bağlantı tutar, ancak çok fazla güç veya veri kullanmaz, çünkü bir şey telefonunuzdaki bir uygulamaya bir Google Cloud Messaging (GCM) mesajı gönderene kadar boyunca trafik gönderilmez. Telefonda tüm uygulamalar tarafından kullanılan tek bir bağlantı var: GCM kullanan yeni bir uygulama yüklemek fazladan yük eklemez.

GCM'deki ilk adım, üçüncü taraf bir sunucunun (e-posta sunucusu gibi) Google'ın GCM sunucusuna bir istek göndermesidir. Bu sunucu daha sonra mesajı bu açık bağlantı üzerinden cihazınıza gönderir. Android sistemi hangi uygulama için olduğunu belirlemek için mesaja bakar ve bu uygulamayı başlatır. Uygulamanın GCM'yi kullanmak için Android'e kayıtlı olması ve ilgili izne sahip olması gerekir. Uygulama başladığında, iletideki verilerle hemen bir bildirim oluşturabilir. GCM mesajlarının boyutu çok sınırlıdır, bu nedenle uygulama daha fazla bilgi almak için üçüncü taraf sunucuyla normal bir bağlantı açabilir (örneğin, yeni e-postaların başlıklarını indirme).

Anlık bildirimleri kullanmanın avantajı, uygulamaların yeni verileri kontrol etmek için düzenli aralıklarla çalışması gerekmemesi ve hem güç hem de veri tasarrufu sağlamasıdır. GCM gibi merkezi bir mekanizmaya sahip olmanın avantajı, cihazın yalnızca bir açık ağ bağlantısına ihtiyaç duyması ve Android GCM sisteminin, kendi ağını korumak için her uygulamanın arka planda çalışmaya devam etmesi yerine, çalışmaya devam etmesi gereken tek şey olmasıdır. kendi sunucusuna bağlantı.

Bunu şuradan aldı: Kaynak Ayrıca buraya bakın .


1
GCM bağlantısı hakkında sadece bir yorum. Bu tek bağlantı bir Yoklama bağlantısıdır.
wmac

1
Benim için önemli olan, üçüncü taraf bir sunucunun, örneğin bir e-posta sunucusunun gerçekten Google GCM sunucularına bir bildirim mesajı göndermesidir. Google'ın ücretsiz olarak sunduğu bir hizmettir ve bu tür üçüncü tarafların GCN protokollerini kullanarak Google sunucularıyla bir iletişim kanalı uygulaması gerekir. Bu arada, protokol hemen hemen sadece JSON biçimli bir HTTP yanıtıdır. Ayrıntılı bilgi için developers.google.com/cloud-messaging adresine bakın .
Kyselejsyreček

10

Uzun bir yoklama tcp bağlantısı ile android üzerinde push bildirimini kendiniz uygulayabilirsiniz. Ancak bu, ekstra bir soket => pil tüketimini sürdürmeyi içerir. Veya Alarm Yöneticisi'ni kullanarak düzenli aralıklarla bağlantı açabilirsiniz.

Google muhtemelen tüm C2DM push bildirimleri için bir yuva açar, bu nedenle pilden daha verimlidir.


bu yüzden istemci bir tcp bağlantısı boyunca yoklama doğruladı değil mi? veri için ne sıklıkla anket yaptığını biliyor musunuz? örneğin her 5 saniyede bir. yoksa kalp atışı gibi hızlı mı?
j2emanue

3

10 Nisan 2018 itibarıyla Google, GCM'yi kullanımdan kaldırmıştır. GCM sunucusu ve istemci API'ları kullanımdan kaldırıldı ve 11 Nisan 2019'dan kısa bir süre sonra kaldırılacak. GCM uygulamalarını, güvenilir ve ölçeklenebilir GCM altyapısını ve birçok yeni özelliği devralan Firebase Cloud Messaging'e (FCM) taşıyın.

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


1

Evet haklısın. Google'ın bir hizmeti vardı (GTalk Hizmeti) ve bu hizmet Google sunucularına belirli dönemlerde sordu.


Bilmiyorum. C2DM'nin nasıl çalıştığını okudum. Şimdi bir şeyler değişebilir.
Yury

-3

Android cihazlarda, push bildirimleri aldığınızda, gönderen uygulamanın görüntüsü ve bir mesaj durum çubuğunda görünür. Tam olarak müşteri bildirime dokunduğunda uygulamaya iner.


arka planda uzun süredir çalışan bir TCP bağlantısı, bu cevapta açıklanmadı, lütfen sorunun ne istediğine bağlı
kalın
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.