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

时间:2009-08-07 05:42:03

标签: android push-notification

我最近了解到iPhone应用几乎瞬间接收 notifications to apps notifications to apps的能力。

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

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

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

我很欣赏应用程序可以是基于拉取的HTTP请求/响应方式,但理想情况下我不想仅仅为了检查通知而进行大量轮询;除此之外,就像滴水耗尽数据计划一样。

16 个答案:

答案 0 :(得分:211)

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

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

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

答案 1 :(得分:46)

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

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

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

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

  

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

     
      
  • 使用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%代表绝对最坏的情况   在实践中,鉴于设备很少完全闲置。
  •   

答案 2 :(得分:32)

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

我有一篇博文,其中包含有关这方面的背景信息,以防它有用http://dalelane.co.uk/blog/?p=938

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

答案 3 :(得分:13)

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

答案 4 :(得分:12)

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

答案 5 :(得分:8)

如果您可以依赖Google库作为目标市场,那么您可能希望捎带GTalk 功能(在现有用户名上注册资源 - 将消息拦截为他们带着BroadcastReceiver进来。

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

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

答案 6 :(得分:8)

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

  
    

“我在NAT后面。我可以订阅集线器吗?集线器无法连接到我。”

         

/匿名

  
     

不,PSHB是服务器到服务器   协议。如果你是NAT背后,你就是   不是真正的服务器。虽然我们已经   为可选的PSHB提出了各种想法   做悬挂的延伸(“长   轮询“)和/或消息框轮询   对于这样的客户,它不在核心   规范。核心规范是   服务器到服务器。

     

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

     

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

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

答案 7 :(得分:8)

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

答案 8 :(得分:6)

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

答案 9 :(得分:6)

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

这是一个好主意吗?

答案 10 :(得分:6)

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

答案 11 :(得分:6)

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

答案 12 :(得分:6)

Google最近(2016年5月18日)announced Firebase现在是移动开发者的统一平台,包括近实时推送通知。它也是多平台:

  

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

source

答案 13 :(得分:4)

GCM的问题在于该过程涉及很多配置:

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

如果你喜欢简单的事情(比如我),你应该试试UrbanAirship。 (IMHO)是在您的应用中使用GCM而不需要进行大量配置的最简单方法。它还为您提供了一个漂亮的GUI来测试您的GCM消息是否正确传送。

  • 您可以找到文档和入门指南here
  • 您可以找到示例应用here

注意:我不会以任何方式与UrbanAirship合作

答案 14 :(得分:2)

答案 15 :(得分:2)

他们的听众必须通过在代码中使用他们的库类来使用。你不必费心去推。您必须将消息发送到服务器服务器才会将消息推送到设备。他们使用OAuth。关于协议,有两种使用CCS和XMPP的方法。 CCS只使用XMPP作为经过身份验证的传输层,因此您可以使用大多数XMPP库来管理连接。要向设备发送通知,您可以在Android应用程序中编写代码以发送以及您的服务器代码。发送消息只能由您的代码完成。在GCM案例中,Google Server会照顾休息。您可以在此链接查看详细信息

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

另外,出于安全问题

google cloud messaging security https://groups.google.com/forum/#!topic/android-gcm/M-EevBitbhQ

如果您的应用未运行,那么设备也可以接收通知,因为您必须为广播侦听器编写代码。在后台,它将监听服务器,每当有任何消息包存在时,它将收到消息作为通知。 Android有你需要的服务,不要打扰它。您只需使用库类使用这些资源,这样可以使您的工作更轻松,如果您的应用程序未运行,则让它们写入,然后它也会收到通知。显然,会有一些听众试图接收应用程序。检查"收到消息"此链接中的部分

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

它也会接受用户的请求。对于GCM,它会做。请检查"发送消息"

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