Android离线推送怎么做
几种常见的解决方案实现原理
1、轮询(Pull)方式:客户端定时向服务器发送询问消息,一旦服务器有变化则立即同步消息。但这种方式对服务器的压力太大,且比较费客户端的流量,就是不断地向服务器发送请求,但是这样开发很简单。
2、SMS(Push)方式:通过拦截SMS消息并且解析消息内容来了解服务器的命令,但这种方式一般用户在经济上很难承受。服务器的消息,通过发送短信的方式,一般很少采用这种方式,成本高。
3、持久连接(Push)方式:客户端和服务器之间建立长久连接,这样就可以实现消息的及时行和实时性。但是这种方式开发难度大,开发周期较长。这是最长使用的方式,目前主流的消息推送都是通过这种方式做的。
iOS 的推送iOS 在系统级别有一个推送服务程序使用 5223 端口。使用这个端口的协议源于 Jabber 后来发展为 XMPP ,被用于 Gtalk 等 IM 软件中。所以, iOS 的推送,可以不严谨的理解为:苹果服务器朝手机后台挂的一个 iOS 的推送
iOS 在系统级别有一个推送服务程序使用 5223 端口。使用这个端口的协议源于 Jabber 后来发展为 XMPP ,被用于 Gtalk 等 IM 软件中。所以, iOS 的推送,可以不严谨的理解为:
苹果服务器朝手机后台挂的一个 IM 服务程序发送的消息。
然后,系统根据该 IM 消息识别告诉哪个 Apps 具体发生了什么事。
然后,系统分别通知这些 Apps 。应该说,苹果这种方式在技术上没有什么创新。但是,整个架构是很了不起的。 因为:
1 使用久经考验的协议,技术风险小。
2 苹果勇于承担责任:
他需要维护一个代价不小的服务器集群,而且要为服务器的 down 机负责。
选择低风险的技术方案 Bug 更少,减轻了用户的痛苦,这是构架师的功劳。
苹果承担责任,尽可能的减少了不可控的意外,保证了用户体验。
这,只能说是公司决策者的功劳。
(从侧面说明有个懂技术的 VP 是多重要。。。而 Scott 走人了。。)
他们带给用户的好处也是实实在在的。
1 安全。
只有登录过的开发者可以通过苹果的服务器推送。
2 快速,稳定,可靠。
苹果掌控推送服务器和 OS 。
3 更省电。
4 让整个系统的体验更统一和简单。
不会出现杀后台这种脑残事。(不用大量 Apps / Apps 的服务为了推送挂后台)。
也不会出现 Apps 被杀就收不到推送这种脑残事(早一点的新浪微博 Android 版仍然如此)。
5 开发容易。
当然,开发者还是要做些事情,比如维护个服务器什么的: http://wwwifanrcom/3979。但是复杂度无疑降低很多了。
Android 的推送
Apps 挂后台一直是 Android 引以为豪的特性(虽然我真的不知道是好处多还是坏处多。。)。。。大家挂后台等待推送就成为技术选择。
当然, Google 事后也提供类似苹果的推送方式了。倒也谈不上抄袭,毕竟苹果的整个技术实现也没有什么特别创新之处。
用户的电池?
Apps 的开发者不会站在系统层面考虑的。他会假设其他 Apps 没有那么“不自觉”。而 Google 不强制的结果就是:没人真正为用户的电池负责。
但是, Google 的方案也并非全是悲剧:
也因为整个技术方案非强制, Android 的 Apps 在接收到推送后的表现更为灵活。
像 Line 的 Android 版本可以在推送通知的 Popup 上直接回复, iOS 就需要越狱才能做到了。
最后的话
强制和封闭,有时候并非坏事。他意味着做出这个决定的人,要为此负责。
所以,如果说苹果的推送方案有何创新?
我以为是超越技术,不惜让公司承担更多风险和责任的解决方案。(类似的还有 BB 的专用网络, Kindle 的全球 3G )
个人相信,担负起这些“额外”的责任,是值得的。。。
都可以推送。系统默认的推送能解决大多数需求,自定义推送通知栏,主要是推送。不同手机通知栏背景颜色不一样,就要动态改变通知文字的颜色,不然会出现文字显示不出来现象。
Android自带的推送GCM可以帮助开发人员给他们的Android应用程序发送数据。它是一个轻量级的消息,告诉Android应用程序有新的数据要从服务器获取,或者它可能是一个消息,其中包含了4KB的payload data(像即时通讯这类应用程序可以直接使用该payload消息)。
推送消息应该悬着一家专业的平台,例如:极光。极光数据服务基于极光所拥有的大数据的基础之上,研究领域覆盖国内各主要产业,面向企业提供营销、客户洞察、金融风控、地理商业与行业研究服务。帮助企业360度分析客户,筛选目标客户群,提供客流、选址分析与黑灰名单和疑似客户识别等服务,为企业带来行业解决方案。
极光推送可以轻松实现android消息推送。具有操作步骤如下:
1、到极光官网注册账号:https://wwwjpushcn/
2、创建应用,按照要求填写你的应用名称,包名提交
3、下载案例,一般情况测试是能收到信息的
4、集成到自己的项目中,按照官网的集成http://docsjpushcn/pages/viewpageactionpageId=557214
5、集成时将注意的要点,官网上也有说,但是我再强调一下要注意两个权限的包名填写,有可能直接用案例上的拷贝到自己的manifest中时没有替换掉包名,切记,要替换成自己的项目的包名。
极光推送已经覆盖了近10亿Android、IOS终端,30多万款APP应用,服务总用户数超过30亿,每天消息推送量达5亿多条,已成为移动应用数据平台。极光分享帮助应用具备国内主流社交平台分享功能,提供新浪微博、QQ、微信等第三方社会化分享服务,提高产品推广效率,帮助产品提高用户体验,获得更多用户。
1推送方式基础知识:
在移动互联网时代以前的手机,如果有事情发生需要通知用户,则会有一个窗口弹出,将告诉用户正在发生什么事情。可能是未接电话的提示,日历的提醒,或是一封新的彩信。推送功能最早是被用于Email中,用来提示我们新的信息。由于时代的发展和移动互联网的热潮,推送功能更加地普及,已经不再仅仅用在推送邮件了,更多地用在我们的APP中了。
当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数据,比如《地震应急通》就需要及时获取服务器上最新的地震信息。要获取服务器上不定时更新的信息,一般来说有两种方法:第一种是客户端使用Pull(拉)的方式,就是隔一段时间就去服务器上获取一下信息,看是否有更新的信息出现。第二种就是 服务器使用Push(推送)的方式,当服务器端有新信息了,则把最新的信息Push到客户端上。这样,客户端就能自动的接收到消息。
虽然Pull和Push两种方式都能实现获取服务器端更新信息的功能,但是明显来说Push方式比Pull方式更优越。因为Pull方式更费客户端的网络流量,更主要的是费电量,还需要我们的程序不停地去监测服务端的变化。
在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息。我们只需要在Android或IPhone的通知栏处向下一拉,就展开了Notification Panel,可以集中一览各种各样通知消息。目前IOS平台上已经有了比较简单的和完美的推送通知解决方案,我会在以后详细介绍IPhone中的解决方案,可是Android平台上实现起来却相对比较麻烦。
最近利用几天的时间对Android的推送通知服务进行初步的研究,也希望能和大家共同探讨一下。
2 几种常见的解决方案实现原理:
1)轮询(Pull)方式:应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。而且你还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池。
2)SMS(Push)方式:在Android平台上,你可以通过拦截SMS消息并且解析消息内容来了解服务器的意图,并获取其显示内容进行处理。这是一个不错的想法,我就见过采用这个方案的应用程序。这个方案的好处是,可以实现完全的实时操作。但是问题是这个方案的成本相对比较高,我们需要向移动公司缴纳相应的费用。我们目前很难找到免费的短消息发送网关来实现这种方案。
3)持久连接(Push)方式:这个方案可以解决由轮询带来的性能问题,但是还是会消耗手机的电池。IOS平台的推送服务之所以工作的很好,是因为每一台手机仅仅保持一个与服务器之间的连接,事实上C2DM也是这么工作的。不过刚才也讲了,这个方案存在着很多的不足之处,就是我们很难在手机上实现一个可靠的服务,目前也无法与IOS平台的推送功能相比。
Android操作系统允许在低内存情况下杀死系统服务,所以我们的推送通知服务很有可能就被操作系统Kill掉了。 轮询(Pull)方式和SMS(Push)方式这两个方案也存在明显的不足。至于持久连接(Push)方案也有不足,不过我们可以通过良好的设计来弥补,以便于让该方案可以有效的工作。毕竟,我们要知道GMail,GTalk以及GoogleVoice都可以实现实时更新的。
3第一种解决方案:C2DM云端推送功能。
在Android手机平台上,Google提供了C2DM(Cloudto Device Messaging)服务,起初我就是准备采用这个服务来实现自己手机上的推送功能,并将其带入自己的项目中。
0条评论