Android gerçek zamanlıya yakın push bildirimini destekliyor mu?


343

Geçenlerde iPhone uygulamalarının uygulamalara yönelik uygulama bildirimlerine neredeyse anında bildirim alma yeteneğini öğrendim .

Bu, push bildirimleri, her zaman iPhone'a veri bağlantısını sürekli tutan ve uygulamaya ikili kodlar gönderen, sunucu uygulamasından telefon uygulamasına gönderildikten 0,5 - 5 saniye arasında uyarıları inanılmaz derecede hızlı bir şekilde ileten ısmarlama bir protokol şeklinde sağlanır. Tepki Süresi. Bu, veri planının bir parçası olarak gelen çok küçük paketlerde gelen mesajlar olarak değil SMS yerine veri olarak gönderilir.

Android'i kullanarak benzer bir tesis olup olmadığını veya Android API'larını kullanarak buna yakın bir şey uygulamanın mümkün olup olmadığını bilmek istiyorum. Açıklığa kavuşturmak için aşağıdakine benzer bir tanım yapıyorum:

  • SMS mesajı değil, bazı veri odaklı çözüm
  • Mümkün olduğu kadar gerçek zamanlı
  • Ölçeklendirilebilir, yani bir mobil uygulamanın sunucu kısmı olarak, binlerce uygulama örneğini saniyeler içinde bildirebilirim

Ben app çekme tabanlı, HTTP istek / yanıt tarzı olabilir takdir, ama ideal ben sadece bildirim kontrol etmek için ağır yoklama istemiyorum; ayrıca veri planını boşaltan damla gibi.


3
Gmail ve gchat için bildirim genellikle bu eşiğin içindedir. Bunu kendi uygulamanızda çoğaltmanın bir yolu olmalıdır.
Dana the Sane

Evet, push mesajlaşmayı çok basit hale getiren bir android kütüphanesi var ... sadece uygulamanıza Jigy'nin Droid Bildirimleri kütüphanesini ekleyin ve oradan sadece 10 satır kod ... umarım bu yardımcı olur :)
Corey Harden

Gelişmiş güvenilirlik için kaputun altında MQTT kullanan gerçek zamanlı push bildirim ağ geçidi için Pushy'ye ( pushy.me ) bakın. Tam açıklama - Pushy'yi kurdum.
Elad Nava

Yanıtlar:


215

Firebase Cloud Messaging FCM SSS , GCM'nin yeni sürümüdür. Android, iOS ve Chrome'da güvenilir bir şekilde mesaj göndermek için GCM'nin temel altyapısını devralır. Ancak GCM'yi desteklemeye devam edecekler çünkü birçok geliştirici bugün bildirimleri işlemek için GCM SDK'larını kullanıyor ve istemci uygulaması güncellemesi zaman alıyor.

26 Haziran 2012 itibariyle, Google Cloud Messaging , cihazlarda çalışan uygulamalara mesaj göndermenin tercih edilen yoludur.

Daha önce (ve şimdi kullanımdan kaldırıldı) hizmete Cloud To Device Messaging adı verildi .


14
Google, bunu Java'daki Android uygulamanıza code.google.com/android/c2dm adresinden uygulamak için ayrıntılı belgeler sunar, ancak C2DM'nin sunucu tarafı yönüyle iletişim kurmak için örnek kodları yoktur. Burada bu yönü için bir öğretici yazdım: blog.boxedice.com/2010/10/07/...
DavidM

2
Android 2.2 kullanan kullanıcılara push bildirimleri sunmanın, ancak aynı uygulamayı push bildirimleri olmadan eski dağıtımlarda çalıştırılabilir hale getirmenin bir yolu var mı?
OneWorld

3
@OneWorld: evet, diğer Android geriye dönük uyumluluk tekniklerinde olduğu gibi, C2DM mevcut olmadığında alternatif strateji seçmek için yansımayı kullanın, daha fazla bilgi için bkz. Developer.android.com/resources/articles/…
Lie Ryan


6
C2DM, 26 Haziran 2012 tarihinden itibaren resmen kullanımdan kaldırıldı, [Android için Google Cloud Messaging] kullanın ( bunun yerine developer.android.com/guide/google/gcm/index.html
Mithun Sreedharan

47

XMPP iyi bir çözümdür. Push özellikli, gerçek zamanlı, Android uygulaması için kullandım. XMPP güçlü, oldukça genişletilebilir ve entegre edilmesi ve kullanımı kolaydır.

Bir sürü ücretsiz XMPP sunucusu var (nezaket dışında onları kötüye kullanmamalısınız) ve kendi kutularınızdan birinde çalıştırabileceğiniz açık kaynaklı sunucular var. OpenFire mükemmel bir seçimdir.

İstediğiniz kütüphane yukarıda belirtildiği gibi Smack değil , aSmack . Ancak, bu bir oluşturma ortamıdır - kütüphaneyi oluşturmanız gerekir.

Bu, bir XMPP çözümünün pil ömrü üzerindeki etkisi için yaptığım bir hesaplama:

Android istemcisi, XMPP sunucusuna bir kalp atışı göndermek için düzenli olarak uyanarak kalıcı bir TCP bağlantısı kurmalıdır.
Bu, güç kullanımı açısından açıkça bir maliyet oluşturmaktadır. Bu maliyetin tahmini aşağıda verilmiştir:

  • 1400mAh pil kullanma (Nexus One ve HTC Desire cihazında verildiği gibi)
  • 3G şebekesine bağlı boş bir cihaz yaklaşık 5mA kullanır
  • Uyandırma, kalp atışı, uyku döngüsü her 5 dakikada bir gerçekleşir, tamamlanması üç saniye sürer ve 300mA kullanır
  • Bu nedenle saat başına pil kullanım maliyeti:
    • 36 saniye 300mA = 3mAh kalp atışı gönderiyor
    • 3600 saniye 5mA = 5mAh rölantide
    • 4:95 + 3 = 7: 95mAh kombine
  • 1400mAh pil, boşta yaklaşık 11.6 gün ve uygulamayı çalıştırırken 7.3 gün sürer; bu, pil ömründe yaklaşık% 37'lik bir azalmayı temsil eder.
  • Bununla birlikte, pil ömründe% 37'lik bir azalma, cihazların nadiren tamamen boşta olduğu göz önüne alındığında, uygulamada mutlak en kötü durumu temsil eder.

2
Ancak uygulamada, telefonun uyanır veya ekran açıldığında veya ağ durumu değiştiğinde yüzlerce amaç çalıştığından, uygulamalar bunu yaptığında telefon 3 saat sürecektir.
Monstieur

33

Yakın zamanda Android için MQTT http://mqtt.org ile istediğini yapmanın bir yolu olarak oynamaya başladım (yani SMS değil, veri odaklı, neredeyse anında mesaj teslimi, ölçeklenebilir, yoklama vb.)

Yararlı olması durumunda bununla ilgili arka plan bilgileri içeren bir blog yayınım var http://dalelane.co.uk/blog/?p=938

(Not: MQTT bir IBM teknolojisidir ve IBM için çalıştığımı belirtmeliyim.)


Mqtt bunu nasıl yapıyor? Bir yerlerde bir yoklama olmalı mı? Elma bile yoklamalı ama sanırım bir seferde sadece bir bağlantı yapıyorlar, bu yüzden pili o kadar çok
tüketmiyorlar

3
Bunu bir TCP / IP bağlantısı açıp açık bırakarak yapar. Anket yapmaz, ancak bazen hayatta kalması için bağlantıya küçük bir ping mesajı göndermesi gerekir.
dalelane

MQTT, push mesajınızı Google üzerinden göndermek sizi rahatsız ediyorsa kesinlikle gitmenin yoludur. Ayrıca, müşterilerimizle veri alışverişi için bulut hizmetlerinin kullanımını yasaklayan bir gizlilik anlaşmamız var.
VH-NZZ

14

Xtify platformuna bir göz atın . Görünüşe göre yaptıkları bu,



8

Hedef pazarınız için orada bulunan Google kitaplıklarına güvenebiliyorsanız, GTalk işlevine geri dönmek isteyebilirsiniz (mevcut kullanıcı adına bir kaynak kaydetme - bir BroadcastReceiver ile gelen iletileri kesmek).

Değilse, ben ve bekliyoruz bunu yapamazsınız o zaman içine konum XMPP kendi versiyonlarını donatılacak . Bu bir acıdır, ancak XMPP bağımsız bir kütüphane olarak ayrı ayrı paketlenirse daha kolay olabilir.

PubSubHubub'ı da düşünebilirsiniz , ancak ağın kullanımı hakkında hiçbir fikrim yok. XMPP'nin üstüne inşa edildiğine inanıyorum.


Makale, gtalk kütüphaneleri cihazda olduğu sürece piggy back işlevselliğinin her zaman kullanılabilir olacağını gösteriyor. Bunun nasıl yapılacağına dair örnekler içeren bazı kaynaklarınız var mı?
Janusz

GTalk, 1.0'dan (iirc) beri SDK'dan kaldırıldı.
MrSnowflake

8

Bu içine bakarak ve jamesh tarafından önerilen PubSubHubBub bir seçenek değil. PubSubHubBub sunucudan sunucuya iletişim için tasarlanmıştır

"Bir NAT'ın arkasındayım. Bir Hub'a abone olabilir miyim? Hub bana bağlanamıyor."

/Anonim

Hayır, PSHB bir sunucudan sunucuya protokolüdür. NAT'ın arkasındaysanız, gerçekte bir sunucu değilsiniz. İsteğe bağlı PSHB uzantılarının bu tür istemciler için asılı alma ("uzun yoklama") ve / veya mesaj kutusu yoklaması yapması için fikirleri tekmelemiş olsak da, çekirdek spesifikasyonda değil. Temel özellik yalnızca sunucudan sunucuya.

/ Brad Fitzpatrick, San Francisco, CA

Kaynak: http://moderator.appspot.com/#15/e=43e1a&t=426ac&f=b0c2d (doğrudan bağlantı mümkün değil)

En basit yöntemin Comet HTTP push kullanmak olduğu sonucuna vardım. Bu hem basit hem de iyi anlaşılmış bir çözümdür, ancak web uygulamaları için de tekrar kullanılabilir.


8

Meteor kuyruklu yıldız sunucusunu arka uç olarak kullanarak Android'de push bildirimleri için bir Java kitaplığı geliştirmek için yeni bir açık kaynaklı çaba var. Bunu Deacon Project Blogundan kontrol edebilirsiniz . Geliştiricilere ihtiyacımız var, bu yüzden lütfen kelimeyi yayınlayın!


7

Google yakın zamanda (18May2016) açıklandı olduğunu Firebase şimdi gerçek zamanlı push notifications.It yakın dahil, mobil geliştiriciler için bir platform birleşik oluyor aynı zamanda çoklu platform:

Şirket artık tüm Firebase kullanıcılarına iOS, Android ve Web desteği ile ücretsiz ve sınırsız bildirim sunuyor.

kaynak


6

Nerede okuduğumu bulamıyorum, ancak gmail'in e-posta gönderme işlemi için açık bir TCP bağlantısı kullandığına inanıyorum.


Bunu destekliyor gibi görünen bir Android uygulaması geliştiricisi tarafından joelapenna.com/blog/2009/07/android-foursquare-and-push adresinde bir blog yazısı var .
dalelane

Bunlar bana benziyor, onlar da yoklıyor. Mobil cihaz sunucuyla bağlantı kurar ve sunucuya güncellemeleri beklediğini bildirir. Gerçek itme mobil cihazlar için çok zor olan sunucu tarafından başlatılır ve çoğu zaman ağ sağlayıcı desteği (sms / wap push) içerir ...
MrSnowflake

1
"C2DM, üçüncü taraf geliştiricilerin Google uygulamalarıyla aynı hizmeti kullanmasına izin veriyor." Bulut Cihazdan Android Mesajlaşma
colithium

6

GTalkSDK'dan gittiği gibi , 'standart' bir push mesajlaşma sistemi yapmak iyi bir fikir olabilir. Bu şekilde, yalnızca bir hizmetin çalışması gerekir, yalnızca bir ek tcp bağlantısının açık olması gerekir. Uygulamalar bu hizmetle aşağıdakileri kullanarak konuşmalı Intentsve önce hizmetten bildirim göndermek ve almak için izin istemelidir. Servis daha sonra yeni bir uygulamanın mesaj göndermek ve almak istediğini kullanıcıya bildirmelidir. Kullanıcı daha sonra izin verir veya reddeder, bu yüzden kontrolde kalır. Uygulama daha sonra hizmete bir eylem + kategorisi kaydeder, böylece hizmet iletilen iletinin nasıl teslim edileceğini bilir.

İyi bir fikir olur mu değil mi?


6

Neden XMPP uygulaması ile gitmiyorsunuz. şu anda gtalk, jabber, citadel vb. dahil olmak üzere birçok kamu sunucusu var. Android için SMACK olarak adlandırılan bir SDK da mevcuttur. Bu bir push bildirimi diyemeyiz, ancak XMPP'yi kullanarak istemci ve sunucu arasında iki yönlü iletişime izin verecek bir bağlantıyı açık tutabilirsiniz. Android istemcisi ve sunucusunun birbiriyle iletişim kurabileceği anlamına gelir. Şu anda bu Android Push ihtiyacını karşılayacak. Örnek bir kod uyguladım ve gerçekten harika çalışıyor


Örnek kodunuza bir bağlantı sağlamak ister misiniz? Pil ömrü ile ilgili herhangi bir test yaptınız mı?
Alex

Pil ömrünü test ettim - her altı dakikada bir göndermeniz gereken kalp atışı, en kötü durumda pil ömrünü% 30 azaltır (yani, cihaz yalnızca bir kalp atışı göndermek için uyanır). En iyi durumda (kullanıcı cihazı tarama, aramalar vb. İçin kullanıyor), pil ömrü üzerindeki etkisi önemsizdir.
et

6

Son zamanlarda http://pushdroid.org 'u geliştirdim , tıpkı google'ın 1.5'te çalıştığı ve niyet yoluyla yayınladığı 2.2'de uyguladığı gibi telefona yüklenmesi gereken tek bir uygulama.


4

GCM ile ilgili sorun, süreçte çok fazla yapılandırma olması:

  • Android uygulamanıza çok sayıda kazan plakası eklemelisiniz
  • GCM sunucusuyla iletişim kurmak için harici bir sunucu yapılandırmanız gerekir
  • Test yazmanız gerekecek

Eğer basit şeyleri (benim gibi) seviyorsanız UrbanAirship'i denemelisiniz . Çok fazla yapılandırma yapmadan uygulamanızda GCM'yi kullanmanın en kolay yolu (IMHO). Ayrıca, GCM mesajlarınızın doğru bir şekilde teslim edildiğini test etmek için size güzel bir GUI sunar.

Not: Hiçbir şekilde UrbanAirship'e bağlı değilim



2

Kodunuzdaki kütüphane sınıflarını kullanarak sizin tarafınızdan kullanılması gereken dinleyicileri vardır. İtme konusunda endişelenmenize gerek yok. Mesajın sunucuya gönderilmesi gerekir, mesajı cihaza iletir. OAuth kullanıyorlar. Protokoller ile ilgili olarak, CCS ve XMPP kullanan iki yöntem vardır. CCS, XMPP'yi yalnızca kimliği doğrulanmış bir aktarım katmanı olarak kullanır, böylece bağlantıyı yönetmek için çoğu XMPP kitaplığını kullanabilirsiniz. Cihaza bildirim göndermek için sunucu uygulamasının yanı sıra göndermek için android uygulamasında kod yazabilirsiniz. mesaj gönderme sadece kodunuz tarafından yapılacaktır. Geri kalanı GCM durumunda Google Server tarafından halledilecektir. Ayrıntıları bu bağlantıdan kontrol edebilirsiniz

http://developer.android.com/google/gcm/server.html

Ayrıca, güvenlik sorunları için

google bulut mesajlaşma güvenliği https://groups.google.com/forum/#!topic/android-gcm/M-EevBitbhQ

Uygulamanızın çalışmadığı durumlarda, yayın dinleyicileri için kod yazmak zorunda olduğunuz için cihazlar da bildirim alabilir. Arka planda sunucuyu dinleyecek ve herhangi bir mesaj paketi ne zaman orada olacaksa mesajı bildirim olarak alacaktır. Android, bu konuda rahatsız etmemeniz gereken bir hizmet sunuyor. Bu kaynakları yalnızca çalışmanızı kolaylaştıran kütüphane sınıfını kullanarak kullanmanız ve uygulamanız çalışmıyorsa yazmalarına izin vermeniz ve bildirim almanız gerekir. Açıkçası, uygulamayı almak için yapmak bazı dinleyici olurdu. Bu bağlantıda "mesajı Almak" bölümüne bakın

http://developer.android.com/google/gcm/client.html

Kullanıcılardan gelen istekleri de kabul edecektir. GCM için yapacak. Lütfen "Mesaj gönder" i işaretleyin

http://developer.android.com/google/gcm/client.html

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.