Android是否支持近实时推送通知?

j p*_*mel 335 android push-notification

我最近了解到iPhone应用程序能够接收几乎即时通知应用程序的应用程序 通知.

这是以推送通知的形式提供的,这是一种定制的协议,它始终保持与iPhone的数据连接,并将二进制数据包发送到应用程序,从服务器应用程序发送到手机应用程序0.5到5秒之间,可以非常快速地弹出警报响应时间.这是作为数据而不是SMS发送的,这些数据包作为数据计划的一部分而非作为传入消息收费.

我想知道,使用Android,是否有类似的工具,或者是否可以使用Android API实现与此类似的东西.为了澄清,我将类似定义为:

  • 不是SMS消息,而是一些数据驱动的解决方案
  • 尽可能实时
  • 可扩展,即作为移动应用程序的服务器部分,我可以在几秒钟内通知数千个应用程序实例

我很欣赏这个应用程序可能是基于拉取的,HTTP请求/响应风格,但理想情况下我不想仅仅为了检查通知而进行大量轮询; 除此之外,它就像滴水排放数据计划.

j p*_*mel 211

Firebase Cloud Messaging FCM FAQ是GCM的新版本.它继承了GCM的核心基础架构,可在Android,iOS和Chrome上可靠地传递消息.然而,他们将继续支持GCM,因为许多开发人员现在使用GCM SDK来处理通知,而客户端应用程序升级需要时间.

截至2012年6月26日,Google Cloud Messaging是向设备上运行的应用程序发送邮件的首选方式.

以前(现在已弃用),该服务称为Cloud To Device Messaging.

  • Google在http://code.google.com/android/c2dm/上提供了使用Java在Android应用中实现此功能的详细文档,但缺少用于与C2DM服务器端方面通信的示例代码.我在这里写了一个关于这个方面的教程:http://blog.boxedice.com/2010/10/07/android-push-notifications-tutorial/ (14认同)
  • C2DM已于2012年6月26日正式弃用,请使用[Google Cloud Messaging for Android](http://developer.android.com/guide/google/gcm/index.html (6认同)
  • @OneWorld:是的,就像任何其他Android向后兼容技术一样,当C2DM不可用时,使用反射选择备用策略,有关详细信息,请参阅:http://developer.android.com/resources/articles/backward-compatibility.html (3认同)
  • 有没有办法向Android 2.2用户提供推送通知,但是在没有推送通知的情况下,可以在旧版本上运行相同的应用程序吗? (2认同)

fle*_*esh 46

XMPP是一个很好的解决方案.我已将它用于推送启用的实时Android应用程序.XMPP功能强大,高度可扩展,易于集成和使用.

有大量免费的XMPP服务器(虽然不礼貌,你不应该滥用它们),并且有一些开源服务器可以在你自己的盒子上运行.OpenFire是一个很好的选择.

你想要的库不是Smack,如上所述,它是aSmack.但请注意,这是一个构建环境 - 您必须构建库.

这是我对XMPP解决方案的电池寿命影响所做的计算:

Android客户端必须通过定期唤醒以将心跳发送到XMPP服务器来维护持久性TCP连接.
这显然在功率使用方面造成了成本.下面提供了对此费用的估算:

  • 使用1400mAh电池(Nexus One和HTC Desire提供)
  • 连接到3G网络的空闲设备使用大约5mA
  • 唤醒,心跳,睡眠周期每5分钟发生一次,需要3秒钟才能完成并使用300mA
  • 因此,每小时电池使用成本是:
    • 36秒300mA = 3mAh发送心跳
    • 空闲时3600秒5mA = 5mAh
    • 4:95 + 3 = 7:95mAh合计
  • 1400mAh电池在闲置时持续约11.6天,在运行应用程序时持续7.3天,这意味着电池寿命减少约37%.
  • 然而,由于设备很少完全闲置,电池寿命减少37%代表了绝对最糟糕的情况.

  • 然而,在实践中,当应用程序执行此操作时,手机将持续3个小时,因为当手机唤醒或显示开启或网络状态更改时,数百个意图运行. (2认同)

dal*_*ane 32

我最近开始使用MQTT http://mqtt.org for Android作为一种方式来做你想要的事情(即不是短信而是数据驱动,几乎是即时消息传递,可扩展,不是轮询等)

我有一篇博客文章,附有关于此的背景信息,以防它有用http://dalelane.co.uk/blog/?p=938

(注意:MQTT是一种IBM技术,我应该指出我在IBM工作.)

  • 它通过打开TCP/IP连接并使其保持打开来实现.它不会轮询,但它必须偶尔向连接发送一个小的ping消息以保持它活着. (3认同)

小智 13

看看Xtify平台吧.看起来这就是他们正在做的事情,


Wil*_* L. 12

谷歌正在贬低C2DM,但取而代之的是他们推出的GCM(谷歌云消息传递),我不认为他们的任何配额及其免费!它确实需要Android 2.2+!http://developer.android.com/guide/google/gcm/index.html


jam*_*esh 8

如果您可以依赖Google库作为目标市场,那么您可能希望重新使用GTalk功能(在现有用户名上注册资源 - 在广播接收器进入时拦截消息).

如果没有,我希望你不能,那么你将捆绑自己的XMPP版本.这很痛苦,但如果XMPP作为独立库单独捆绑,可能会更容易.

您也可以考虑PubSubHubub,但我不知道它的网络使用情况.我相信它是在XMPP的基础上构建的.


Mor*_*son 8

我一直在研究这个问题,jamesh推荐的PubSubHubBub不是一个选项.PubSubHubBub用于服务器到服务器的通信

"我在NAT后面.我可以订购一个集线器吗?集线器无法连接到我."

/匿名

不,PSHB是服务器到服务器协议.如果你是NAT背后,你真的不是一个服务器.虽然我们已经开始考虑可选的PSHB扩展的想法,为这些客户端执行挂起("长轮询")和/或消息框轮询,但它不在核心规范中.核心规范仅限服务器到服务器.

/ Brad Fitzpatrick,旧金山,加利福尼亚州

来源:http://moderator.appspot.com/#15/e=43e1a&t=426ac&f=b0c2d(不可能直接链接)

我得出结论,最简单的方法是使用Comet HTTP推送.这既是一个简单易懂的解决方案,但它也可以重复用于Web应用程序.


mtb*_*ave 8

有一个新的开源工作,使用Meteor彗星服务器作为后端,在Android上开发用于推送通知的Java库.您可以在Deacon项目博客上查看.我们需要开发人员,所以请传播!


Wil*_*ill 6

我找不到我在哪里阅读它,但我相信gmail利用开放的TCP连接来进行电子邮件推送.


MrS*_*ake 6

由于GTalk是从SDK消失了,这可能是一个好主意,以"标准"的消息推送系统.这样,只需要运行一个服务,只需要打开一个额外的tcp连接.应用程序应使用此服务进行通信,Intents并应首先请求发送和接收服务通知的权限.然后,该服务应通知用户新应用程序想要发送和接收消息.然后,用户将授予或拒绝许可,以便他保持控制权.然后,应用程序将向服务注册操作+类别,以便服务知道如何传递推送的消息.

这是一个好主意吗?


小智 6

为什么不选择XMPP.现在有很多公共服务器可用,包括gtalk,jabber,citadel等.对于Android,有一个SDK也可以命名为SMACK.我们不能说推送通知但是使用XMPP可以保持客户端和服务器之间的连接打开,这将允许双向通信.意味着Android客户端和服务器都可以相互通信.目前这将满足Push in android的需求.我已经实现了一个示例代码,它真的很棒


小智 6

我最近开发了http://pushdroid.org它应该安装在手机上的单个应用程序,就像谷歌已经在2.2中实现它一样从1.5开始工作并且是通过意图进行广播.


Fre*_*ier 6

谷歌最近(18May2016)宣布,火力地堡现在它是移动开发者,包括近实时推送notifications.It统一平台也多平台:

该公司现在为所有Firebase用户提供免费和无限制的通知,支持iOS,Android和Web.

资源