APP的推送是咋回事

标签: 体验,设计 给产品经理讲技术 | 发表时间:2015-12-13 06:28 | 作者:kent.zhu
出处:http://www.ikent.me/blog

本文转载自「给产品经理讲技术」公号,已经过原作者授权转载。

相信大家对推送这项技术并不陌生。如果没听说过,那么作为一个充满好奇心的孩子,你一定想过这个问题:睡觉前我明明关闭了淘宝、网易新闻等app,为什么第二天他们又自动出现在我手机的通知栏上呢?这其实就是推送系统干的好事:在你睡觉的时候,服务器悄悄的向你的手机推送了一个消息,然后唤醒了你已经关闭的app。事实上,无论你愿意与否,现在大多数‘有节操’的app,都已经内置了推送系统,并时刻准备着登上你的通知栏的‘头条’。

传统的app架构里,通常是app主动向服务器请求数据,服务器被动的提供数据。以新闻客户端app为例:app被用户打开的时候,会通过网络(无论3g、4g还是wifi)连接到服务器上,向服务器请求最新的新闻。服务器收到请求,从自己的数据库里查询最新的新闻,返回给app。app收到服务器返回的数据,经过一系列的解析处理操作,最终把最新的新闻呈现给用户。一次通信就完成了。然而如果此时服务器上又有了新的新闻,无论多么重要,在用户没有主动刷新的情况下,是没有办法让用户看到的。推送就是为了解决这样的困境的,它给了服务器一个展示自我的机会,主动连接上所有的app,告诉他们我有新的新闻了,你们再来请求一次吧,于是收到推送的app(即时此时已经被用户关闭了)又去服务器请求最新的新闻,这样用户就能看到最新的新闻了。

从技术上来讲,实现一个推送系统需要服务器端和终端的配合。一种方法是轮询,也就是不停的向服务器发起请求。这其实很好理解,作为app,我既然不知道什么时候会发生新的新闻,那我一遍一遍的问好了,而且我知道这样一定会成功的。显而易见,这种方法app端费时费力不说,电量流量也扛不住啊,服务器要处理如此量大的请求,必然也是非常头疼的。另一种方法是服务器和app建立一个长时间连接的通道,通过这个通道,不仅app可以向服务器请求数据,服务器也可以向app发送数据,看起来非常完美,但是如果app被用户关闭的话,通道就断掉了。好在android系统给app提供了一个这样的环境,app可以启动一个后台服务来维持这个通道,即使app被关掉了,服务依然可以运行,通道依然还在工作(ios后面会讲)。回到前面的例子,你在睡觉前关掉了淘宝,但是并没有关闭淘宝的后台服务,淘宝依然可以接收服务器推送来的指令,把自己的唤醒。

那么如何维持这样的一条长时间连接的通道呢?就好比两个人打电话,一开始聊的热情有来有往,后来慢慢沉默下来了,几分钟之后,电话的另一头没有任何动静,如何知道那边的人还在呢?很简单,只需要另一头的人每隔几分钟说一个字就行。同样的道理,app会每隔一段时间向服务器报告自己还活着,就像心跳一样,服务器收到后,就知道这个通道是可以继续使用的了。然而天下没有免费的午餐,发送心跳是有代价的,一般手机锁屏之后,为了省电CPU是出于休眠状态的,然而发送心跳就会唤醒CPU,必然会增加电量的消耗。这还只是一个长连接通道的情况,如果手机里装了2、30个带有推送的app呢?先别急着抱怨,聪明的android工程师和ios工程师早就想到了这一点,他们分别设计了GCM和apns来解决多个app有多个长连接通道的问题。以apns为例,ios开通了一条系统级别的长连接通道,通道的一端是手机的所有app,另一端是苹果的服务器。app的服务器如果有新的消息需要推送的话,先把消息发送到苹果的服务器上,再利用苹果的服务器通过长连接通道发送到用户手机,然后通知具体的app。这样就做到了即使手机安装了100个app,也只需要向一条通道里发送心跳。

回到Android,系统提供的GCM只能在Android2.2以上才能使用,3.0以下必须要安装Googleplay并登陆了Google账号才能支持。而国内发行的手机大多是阉割掉了google 服务的。因此,对于Android系统来说,各家app只能各显神通,开发自己的专用长连接通道了。然而这时候他们遇到了app的天敌:管家和卫士们。前文说了,app想要及时收到服务器推送的消息,关键在于自己与服务器的长连接通道不被关闭,也就是自己的后台服务可以一直在后台运行,而管家和卫士们的一键清理功能就是专治这种“毒瘤”的。道高一尺魔高一丈,app在与管家和斗士们的长期斗争中,总结了一系列躲避被清理掉的方法,什么定时自启能力、什么相互唤醒、什么前台进程等等,当然这就是另一个话题了,我们后面会讲到。

总结起来,app和后台的连接方式有两种。一种叫pull,也叫轮询,就是定期的不断向后台请求,缺点是耗电,费流量,不环保。对于一名有追求的程序员,他应该会比较恶心这种方式的,你千万不要对他说,我不管你怎么实现,我就要这种效果这种傻逼话了,凡事应该找到最优路径。另一种叫push,app和后台一直维持了一条通信通道,两端不定期的就会偷摸的约会,告诉对方“I‘m Here”,也能顺带把信息互相携带了。缺点是要维持一条长连接通道,这条通道容易被其他程序杀死,要多想复活办法。

原文链接, 点击查看

相关日志

相关 [app 推送] 推荐:

APP的推送是咋回事

- - 幻风阁|kent.zhu'sBlog
本文转载自「给产品经理讲技术」公号,已经过原作者授权转载. 相信大家对推送这项技术并不陌生. 如果没听说过,那么作为一个充满好奇心的孩子,你一定想过这个问题:睡觉前我明明关闭了淘宝、网易新闻等app,为什么第二天他们又自动出现在我手机的通知栏上呢. 这其实就是推送系统干的好事:在你睡觉的时候,服务器悄悄的向你的手机推送了一个消息,然后唤醒了你已经关闭的app.

APP开发者请停止滥用推送通知服务

- - CocoaChina移动观察
目前,不少移动应用开发者正滥用推送通知服务. 尽管大众普遍认为向用户推送一些无关紧要的信息并不是一种有效的推荐方式,但应用开发者还没有找到更好的方式来推送自己的app. 虽然持续不断的推送通知可以让应用给用户留下深刻印象,诱使他们去更新最新版本的app,但不少信息对用户并没有太大意义. 开发者想告诉用户他们可能忘记的一些东西,但友好的、有用的推送要好过无休止的垃圾信息提示.

手机用户怒吼:App们,别再乱推送了!

- - 互联网的那点事
坐在地铁上,身边“嗡嗡”声不断,你就知道又有人收到信息推送(Push) 了. 应用开发者正在滥用这种服务,已经影响了用户的正常生活. 让我们大吼一声:App们,别再推送了. 没完没了地推送,并不是增加App使用量的有效手段,但开发者仍不由自主地使用推送这种营销渠道. 更重要的是,如果不是真的很常用某款应用,过了刚刚下载的新鲜劲儿,从静静躺在手机里的那一刻起,它们似乎也没什么别的方式体现存在感了.

6分钟带你全面了解App消息推送策略

- - IT瘾-tuicool
在一个移动操作系统中,APP可以实现一个叫做消息推送(push)的功能. push是能够起到提醒或者唤醒用户的作用的,也是app运营渠道之一,运用得当可以帮助产品运营人员更高效地实现运营目标,相反盲目运用也会让APP变得让人讨厌. 今天我们聊聊聊APP消息推送那些策略. 有不少小伙伴私信问我如何写文章的,其实很简单,我写文也不是逻辑非常明确,也不是非常符合所谓金字塔原则的(其实用麦肯锡那一套写出的文章真的会很严谨,但是呢,我就是很随意),我会在写作之前列出文章的核心框架,然后在框架下填补内容即可,今天我就把这篇文章写文的框架先分享给大家吧.

浏览器新技术,让网站像 App 一样推送通知

- - 爱范儿 · Beats of Bits
NBA 2014-15 赛季开始,第一天,火箭队以 108 比 90 大胜湖人. 看不了直播,早点知道结果也能让心里踏实些. 熬夜看球没什么,怕就怕自己期待的比赛在上班时间开始. 不得不专注工作,但又想第一时间知道比赛结果. 这时,消息推送就显得非常重要. 安心地查询工作相关的资料,认认真真码字、码代码.

利用消息推送提高APP留存率的四个步骤

- - 互联网分析沙龙 - 干货
如何提高用户留存率,是app运营人员苦思冥想的重点难题之一,蝉大师发现许多的开发者团队,APP运营团队,在为自己每天的‘新增用户’数量而深感自豪时,却苦恼的发现,这所有的新增用户中,只有很小一部分坚持到了90天. 有这样一位开发者,第一天,他的新增用户留存率是21%,但这一数字在第90天后,下降到1.89%.

工信部:将统一安卓消息推送标准 约束流氓App

- - IT瘾-iresearch
导语:安卓统一的消息推送标准目前已取得阶段性成果,未来将由终端厂商提供系统级推送服务,确保App的推送消息接收. 工信部旗下泰尔终端实验室6月1日发布消息称,安卓统一的消息推送标准目前已取得阶段性成果,未来将由终端厂商提供系统级推送服务(类似APNS的唯一推送通道),确保App的推送消息接收. 消息推送是App运营的重要一环,为了优化消息推送成功率,降低电量和流量消耗,系统级的推送服务显得尤为重要.

App 和 iCloud

- 笑炊 - 爱范儿 · Beats of Bits
iCloud 的技术细节还在 NDA 的保护下. 但是大家的好奇心不能等到 NDA 失效再满足. 本文基于对 iCloud 的猜测写成,靠谱与否,等待时间检验. 打开浏览器,嗯,今天用 Safari , Chrome , IE 或者 Firefox. 输入 Twiter.com ,啊,不对,是 Twitter.com.

App Internet 革命

- Cary - Mr. Jamie 看網路與創投
Apple 公布最新一季的財報,3 個月賣出了破紀錄的 3,500 萬台 iDevices (iPhone, iPad & iPods). Google 公布最新數字,全球有 1.9 億支 Android 已經被啟用. 大家很興奮「智慧型手機」、「行動裝置」革命終於來到,我卻隱隱感覺到另一件更重大的事情正在發生,我們所熟知的「網路」,即將經歷另一次大幅度的轉變.

浅析App Engine

- - 搜索研发部官方博客
在国内外,云计算正在大步的走向商业化的道路,也得到了越来越多公司的重视. 其中平台即服务(Platform-as-a-Service  PaaS)已经称为业界探讨云计算的热点方式之一,采用PaaS模式来构建应用运行平台App Engine是一种重要的实现方式. 本文主要是对App Engine的背景、特点、需求等进行分析整理,并据此对业界主要的App Engine进行了调研分析.