首页 > 代码库 > 彻底理解推送

彻底理解推送

一、概念

1、早期推送服务

   在移动互联网以前的手机,如果有事情发生要通知用户,则会弹出一个窗口,告诉用户正在发生的事,可能是未接电话提示、日历提醒或是一封彩信。推送功能最早是被用于Email中,而目前更多地被应用于App中。

2、推送

   一般地,当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数据,而要获取服务器上不定时更新的信息一般有两种方法:

   (1)客户端pull(拉)的方式,就是隔一段时间就去服务器获取一下信息,看是否有更新的信息出现,即用户主动发起请求,向服务器获取数据;

   (2)服务器使用push(推)的方式,当服务器有新信息了,就把新的信息push到客户端上,这样,客户端就能自动的接受到消息,也就是服务器主动发送数据给客户端。

比较两种方式的优缺点:

   两种方式都能实现获取服务器端更新信息的功能,但明显地,push方式比pull方式好,因为pull方式更费客户端网络流量,要主动从服务器端获取最新信息,更主要的是耗费电量,App上还要有程序服务不停地检测服务端的变化。Push使用的场景有两个特点:时间不确定性和时效性,如发送团购信息/发送电子消费账单等。  

   一般地,利用推送只是告诉手机端服务器发生了某些改变,当客户端收到通知以后,应该主动到服务器获取最新的数据,这样才是推送服务的完整实现。

   一般情况下,客户端与服务器之间通讯客户端是主动的,但这就存在一个问题就是一旦服务器数据有更新或者服务器要下发通知给客户端只能等客户端连接的时候才能实现。这种方式使消息失去了实时性。

3、通知和消息的区别

   (1)通知:发送后会在系统通知栏收到展现,同时响铃或震动提醒用户。

   一般地,实现Android的消息通知栏,必须要用到两个类:NotificationManager和Notification,其中NotificationManager的初始化是通过getSystemService方法,并且通过notify方法来向Android系统发送消息栏通知和显示。   

   (2)消息:发送后不会在系统通知栏展示,SDK将消息传给第三方应用后需要开发者自己使用代码展示。

   开发者在接收到消息数据后,可以将解析出来的数据,显示在自定义的界面上,也就是说,可以自定义通知界面、提醒方式,以Notification的方式让用户看到该消息内容。

二、推送使用场景

三、原理

1、推送方案实现原理

   (1)轮询方式(pull): 客户端应用程序需阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,如消息排队等,并且还要考虑轮询的效率,太慢会导致消息的延迟,太快,会大量消耗网络带宽和电池。

   (2)SMS方式(push): 在Android平台上,可以通过拦截SMS消息并解析消息内容来了解服务器的意图,并获取其显示内容进行处理(???),其好处是可以实现完全的实时操作,但成本太高,需要向移动公司缴纳相应的费用。

   (3)持久连接(push): 可以解决轮询问题带来的性能问题,但还是会消耗手机电池。

彻底理解推送