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

我最近了解了iPhone应用程序接收近乎瞬时通知应用程序 应用程序通知的能力。

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

我想知道,如果,使用Android,有一个类似的设施,或者是否有可能实现接近这个使用Android api的东西。为了澄清,我将相似定义为:

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

我欣赏的应用程序可以拉基于,HTTP请求/响应风格,但理想情况下,我不想轮询那么严重,只是为了检查通知;除此之外,它就像滴漏数据计划。

185286 次浏览

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

如果你可以依赖于谷歌库为你的目标市场,那么你可能想要在GTalk上存钱功能(在现有的用户名上注册资源-当它们与BroadcastReceiver一起进来时拦截它)。

如果不是,并且我期望你不能,那么你进入捆绑您自己的XMPP版本。这是一个痛苦的过程,但是如果XMPP单独捆绑成一个独立的库,就会容易一些。

你也可以考虑PubSubHubub,但我不知道它的网络用法。我相信它是构建在XMPP之上的。

我最近开始玩MQTT http://mqtt.org的Android作为一种方式做你所要求的(即不是短信,而是数据驱动,几乎即时消息传递,可伸缩,而不是轮询等)。

我有一篇关于这方面背景信息的博客文章,以防它有帮助http://dalelane.co.uk/blog/?p=938

(注意:MQTT是IBM的技术,我应该指出我为IBM工作。)

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

“我在NAT后面。我可以订阅Hub吗?”这个中心无法连接到我。”

/匿名

否,PSHB是服务器到服务器 协议。如果你在NAT后面,你就是 不是真正的服务器。虽然我们已经 讨论可选PSHB的想法 延长做悬挂得到(“长 Polling ")和/或消息框轮询 对于这样的客户,它不在核心 核心规范是 服务器到服务器。< / p >

布拉德·菲茨帕特里克,旧金山,加州

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

我得出的结论是,最简单的方法是使用Comet HTTP push。这是一个简单且易于理解的解决方案,但它也可以用于web应用程序。

看看Xtify平台。看起来他们就是这么做的,

由于GTalk已经从SDK中消失,所以创建一个“标准”推送消息系统可能是个好主意。这样,只需要运行一个服务,只需要打开一个额外的tcp连接。应用程序应该使用Intents与该服务对话,并且应该首先请求从该服务发送和接收通知的权限。然后,服务应该通知用户有新的应用程序想要发送和接收消息。然后,用户将授予或拒绝许可,因此他保持控制。然后,应用程序将向服务注册一个action +类别,这样服务就知道如何交付推送的消息。

这到底是不是一个好主意?

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

有一个新的开源项目正在开发一个Java库,用于Android上的推送通知,使用Meteor comet服务器作为后端。你可以在执事计划博客上查看它。我们需要开发人员,所以请传播这个消息!

Firebase Cloud Messaging FCM常见问题解答是GCM的新版本。它继承了GCM的核心基础设施,可以在Android、iOS和Chrome上可靠地传递消息。但是他们会继续支持GCM,因为现在很多开发者都在使用GCM sdk来处理通知,而客户端应用的升级需要时间。

截至2012年6月26日,谷歌云消息是向设备上运行的应用程序发送消息的首选方式。

以前(现在已弃用),该服务被称为云到设备的消息传递

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

XMPP是一个很好的解决方案。我在一个支持推送的、实时的Android应用程序中使用过它。XMPP功能强大,高度可扩展,易于集成和使用。

有很多免费的XMPP服务器(尽管出于礼貌,您不应该滥用它们),还有一些开源服务器可以在您自己的机器上运行。OpenFire是一个很好的选择。

你想要的库不是上面提到的,而是aSmack。但是请注意,这是一个构建环境—您必须构建库。

以下是我对XMPP解决方案对电池寿命的影响进行的计算:

Android客户端必须定期唤醒,保持一个持久的TCP连接 向XMPP服务器发送一个心跳 这显然增加了电力使用方面的成本。这项费用的估计是 以下:< / p >

  • 使用1400mAh电池(Nexus One和HTC Desire提供的电池)
  • 一个连接到3G网络的空闲设备大约使用5mA
  • 唤醒、心跳、睡眠周期每5分钟发生一次,耗时3秒 完成,使用300mA
  • 因此每小时电池使用成本为:
    • 36秒300mA = 3mAh发送心跳
    • 3600秒5mA = 5mAh空闲
    • 4:95 + 3 = 7:95mAh
    • 李< / ul > < / >
    • 一块1400mAh电池待机时间约为11.6天,待机时间约为7.3天 运行应用程序,这意味着大约减少了37%的开销 李电池寿命。< / > 然而,电池寿命减少37%绝对是最糟糕的情况 在实践中,假定设备很少完全空闲。

谷歌正在贬低C2DM,但他们引入了GCM(谷歌云消息),我认为他们没有任何配额,而且是免费的!不过它确实需要Android 2.2+ !http://developer.android.com/guide/google/gcm/index.html

GCM的问题是在这个过程中涉及到很多配置:

  • 你必须在Android应用中添加大量样板文件
  • 需要配置外部服务器与GCM服务器通信
  • 您必须编写测试

如果你喜欢简单的东西(像我一样),你应该尝试UrbanAirship。这是(恕我直言)在应用程序中使用GCM的最简单方法,无需进行大量配置。它还提供了一个漂亮的GUI来测试是否正确地传递了GCM消息。

  • 你可以找到文档和入门指南在这里
  • 你可以找到一个示例应用程序在这里

注:我没有附属城市飞艇在任何方式

它们有自己的监听器,你需要在代码中使用它们的库类。你不必费心去推。您必须将消息发送到服务器,服务器将把消息推送到设备。他们使用OAuth。关于协议,有两种方法使用CCS和XMPP。CCS只是使用XMPP作为经过身份验证的传输层,因此您可以使用大多数XMPP库来管理连接。发送通知到设备,你可以写代码在android应用程序发送以及你的服务器代码。消息发送将仅由您的代码完成。其余将由谷歌服务器在GCM情况下照顾。你可以在这个链接查看详细信息

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

还有安全问题

谷歌云消息安全https://groups.google.com/forum/ !主题/ android-gcm / M-EevBitbhQ

如果你的应用程序没有运行,那么设备也可以收到通知,因为你必须为广播侦听器编写代码。在后台,它将监听服务器,无论何时任何消息包将在那里,它将接收消息作为通知。Android有你需要的服务,不用担心。你只需要使用这些资源,使用库类,使你的工作更容易,让他们写,如果你的应用程序没有运行,然后它也会收到通知。显然,会有一些侦听器,使应用程序接收。选中此链接中的“接收消息”部分

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

它还将接受用户的请求。对于GCM,这就可以了。请勾选“发送信息”

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

谷歌最近(2016年5月18日)宣布重火力点现在是手机开发者的统一平台,包括接近实时的推送通知。它也是多平台的:

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

< a href = " http://techcrunch.com/2016/05/18/google-turns-firebase-into-its-unified-platform-for-mobile-developers/ " > < / >来源