我最近了解到iPhone应用程序几乎可以立即收到应用程序通知的能力notifications to apps .
这是以推送通知的形式提供的,这是一种定制协议,可以始终保持与iPhone的数据连接,并将二进制数据包发送到应用程序,从服务器应用程序发送到手机应用程序的0.5到5秒之间,可以非常快速地弹出警报响应时间 . 这是作为数据而不是SMS发送的,这些数据包作为数据计划的一部分而非作为传入消息收费 .
我想知道,使用Android,是否有类似的工具,或者是否可以使用Android API实现与此相近的东西 . 为了澄清,我将类似定义为:
-
不是SMS消息,而是一些数据驱动的解决方案
-
尽可能实时
-
是可扩展的,即作为移动应用程序的服务器部分,我可以在几秒钟内通知数千个应用程序实例
我很欣赏应用程序可以是基于拉取的HTTP请求/响应样式,但理想情况下我不想仅仅为了检查通知而进行大量轮询;除此之外,它就像滴水排放数据计划一样 .
16 回答
他们的听众必须通过在代码中使用他们的库类来使用 . 你不必费心去推 . 您必须将消息发送到服务器服务器才会将消息推送到设备 . 他们使用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
谷歌正在贬低C2DM,但取而代之的是他们推出的GCM(谷歌 Cloud 消息传递),我不认为他们的任何配额及其免费!它确实需要Android 2.2! http://developer.android.com/guide/google/gcm/index.html
如果你可以依赖谷歌图书馆为你的目标市场,那么你可能想要 piggy back on GTalk 功能(在现有用户名上注册一个资源 - 拦截它们与广播接收器进来时的消息) .
如果没有,我希望you can't,那你就进入 bundling your own versions of XMPP . 这很痛苦,但如果XMPP作为独立库单独捆绑,可能会更容易 .
你也可以考虑PubSubHubub,但我不知道它的网络使用情况 . 我相信它是在XMPP的基础上构建的 .
我找不到我在哪里阅读,但我相信gmail利用开放的TCP连接来进行电子邮件推送 .
我一直在研究这个问题,jamesh推荐的PubSubHubBub不是一个选项 . PubSubHubBub用于服务器到服务器的通信
我得出结论,最简单的方法是使用Comet HTTP推送 . 这既是一个简单易懂的解决方案,但它也可以重复用于Web应用程序 .
有一个新的开源工作,使用Meteor彗星服务器作为后端,在Android上开发用于推送通知的Java库 . 你可以在the Deacon Project Blog查看 . 我们需要开发人员,所以请传播!
看看Xtify平台 . 看起来这就是他们正在做的事情,
https://github.com/Guti/Google-Cloud-Messaging--Titanium-/blob/master/src/com/google/android/gcm/GCMRegistrar.java
它是推动的好的和有效的解决方案 .
请试一试
Firebase Cloud 消息传递FCM FAQ是GCM的新版本 . 它继承了GCM的核心基础架构,可在Android,iOS和Chrome上可靠地传递消息 . 不过他们会的继续支持GCM,因为许多开发人员现在使用GCM SDK来处理通知,而客户端应用程序升级需要时间 .
截至2012年6月26日,Google Cloud Messaging是向设备上运行的应用程序发送消息的首选方式 .
以前(现在已弃用),该服务被称为Cloud To Device Messaging .
我最近开发了http://pushdroid.org它应该安装在手机上的单个应用程序,就像谷歌已经在2.2中实现它一样从1.5开始工作,并通过意图进行广播 .
由于
GTalk
已从SDK中消失,因此制作'standard'推送消息传递系统可能是个好主意 . 这样,只需要运行一个服务,只需要打开一个额外的tcp连接 . 应用程序应使用Intents
与此服务进行通信,并应首先请求发送和接收服务通知的权限 . 然后,该服务应通知用户新应用程序想要发送和接收消息 . 然后,用户将授予或拒绝许可,以便他保持控制权 . 然后,应用程序将向服务注册操作类别,以便服务知道如何传递推送的消息 .这是一个好主意吗?
为什么不选择XMPP实现 . 现在有很多公共服务器可用,包括gtalk,jabber,citadel等 . 对于Android,有一个SDK也可以命名为SMACK . 我们不能说推送通知但是使用XMPP可以保持客户端和服务器之间的连接打开,这将允许双向通信 . 意味着Android客户端和服务器都可以相互通信 . 目前这将满足Push in android的需求 . 我已经实现了一个示例代码,它真的很棒
XMPP是一个很好的解决方案 . 我已经将它用于推送启用的实时Android应用程序 . XMPP功能强大,高度可扩展,易于集成和使用 .
有大量免费的XMPP服务器(虽然不礼貌,你不应该滥用它们),并且有一些开源服务器可以在你自己的盒子上运行 . OpenFire是一个很好的选择 .
你想要的库不是Smack,如上所述,它是aSmack . 但请注意,这是一个构建环境 - 您必须构建库 .
这是我对XMPP解决方案的电池寿命影响所做的计算:
GCM的问题在于流程中涉及很多配置:
您必须为Android应用添加大量样板
您需要配置外部服务器以与GCM服务器通信
您必须编写测试
如果你喜欢简单的东西(比如我)你应该试试UrbanAirship . (IMHO)是在您的应用中使用GCM而不需要进行大量配置的最简单方法 . 它还为您提供了一个漂亮的GUI来测试您的GCM消息是否正确传递 .
您可以找到文档和入门指南here
您可以找到示例应用程序here
注意:我不会以任何方式与UrbanAirship联合
我最近开始使用MQTT http://mqtt.org for Android作为一种做你要求的方式(即不是短信而是数据驱动,几乎是即时消息传递,可扩展,不轮询等)
我有一篇博客文章,附有关于此的背景信息,以防它有用http://dalelane.co.uk/blog/?p=938
(注意:MQTT是一种IBM技术,我应该指出我在IBM工作 . )
谷歌最近(2016年5月18日)announced认为Firebase现在是移动开发者的统一平台,包括近乎实时的推送通知 . 它也是多平台的:
source