首页 文章

Android是否支持近实时推送通知? [关闭]

提问于
浏览
324

我最近了解到iPhone应用程序几乎可以立即收到应用程序通知的能力notifications to apps .

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

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

  • 不是SMS消息,而是一些数据驱动的解决方案

  • 尽可能实时

  • 是可扩展的,即作为移动应用程序的服务器部分,我可以在几秒钟内通知数千个应用程序实例

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

16 回答

  • 2

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

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

    此外,还有安全问题

    谷歌 Cloud 消息安全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

  • 13

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

  • 6

    如果你可以依赖谷歌图书馆为你的目标市场,那么你可能想要 piggy back on GTalk 功能(在现有用户名上注册一个资源 - 拦截它们与广播接收器进来时的消息) .

    如果没有,我希望you can't,那你就进入 bundling your own versions of XMPP . 这很痛苦,但如果XMPP作为独立库单独捆绑,可能会更容易 .

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

  • 12

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

  • 8

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

    “我在NAT后面 . 我可以订购一个集线器吗?集线器无法连接到我 . ” /匿名否,PSHB是服务器到服务器协议 . 如果你是NAT背后的人,你真的不是服务器 . 虽然我们已经开始为可选的PSHB扩展提出想法,为这些客户端执行挂起(“长轮询”)和/或消息框轮询,但它不在核心规范中 . 核心规范只是服务器到服务器 . / Brad Fitzpatrick,旧金山,加州资料来源:http://moderator.appspot.com/#15/e=43e1a&t=426ac&f=b0c2d(不可能直接链接)

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

  • 46

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

  • 6

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

  • 209
  • 2

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

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

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

  • 8

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

  • 6

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

    这是一个好主意吗?

  • 8

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

  • 30

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

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

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

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

    Android客户端必须通过定期唤醒以将心跳发送到XMPP服务器来维护持久性TCP连接 . 这显然在功率使用方面造成了成本 . 此成本的估算如下:使用1400mAh电池(Nexus One和HTC Desire中提供)连接到3G网络的空闲设备使用大约5mA唤醒,心跳,睡眠周期每5分钟发生一次,需要三秒钟才能完成并使用300mA因此每小时电池使用成本为:36秒300mA = 3mAh发送心跳3600秒5mA = 5mAh空闲4:95 3 = 7:95mAh组合1400mAh电池持续约11.6天在运行应用程序时闲置和7.3天,这意味着电池寿命减少约37% . 然而,由于设备很少完全闲置,因此电池寿命减少37%代表了绝对最糟糕的情况 .

  • 6

    GCM的问题在于流程中涉及很多配置:

    • 您必须为Android应用添加大量样板

    • 您需要配置外部服务器以与GCM服务器通信

    • 您必须编写测试

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

    • 您可以找到文档和入门指南here

    • 您可以找到示例应用程序here

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

  • 4

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

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

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

  • 6

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

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

    source

相关问题