“iOS通知?哼哼,我们有后台任务”很多Android用户对iOS的通知推送不屑一顾。Android允许应用程序在后台执行任务,诸如QQ等应用程序可以与服务器实时通讯,iOS版QQ 的推送延迟也不会在Android上出现。并且,Android应用甚至拥有iOS无法想象的能力。名为Tasker的应用允许用户创建自动化脚本,比如到地铁入口处自动关闭3G网络,出了地铁再开启之类。那是否Android就不需要通知推送了呢?答案是需要。
原因如下:
1.通知推送可以以三种方式提醒用户(铃声、应用图标上的数字或一条文本信息),这涵盖了大部分后台程序的功能
据我观察,在Android系统上运行服务的软件主要有三种目的:
1)对用户毫无好处的流氓软件,代表软件CutTheRope,该游戏在后台运行服务,但是其任何功能都不需要后台服务的支持。唯一解释是该应用正在收集并上传用户数据。
2)通讯软件,以QQ和微博为代表。Android上的QQ收到信息后会发出铃声并显示一个通知图标。iOS的通知推送完全可以实现,只是有时会有延迟。
3)自动化软件。这些软件在后台执行任务,不与用户交互。代表为短信防火墙和Tasker。不考虑越狱的话,iOS软件无法实现这种功能。这种软件数量较少,使用起来也较复杂,多为高端用户(顺便说下短信防火墙曾经挡了支付宝的验证码短信)
可见,通知推送可以做到大部分“接收服务器通知并呈现给用户”软件要利用后台服务才能搞定的功能。
2.通知推送利用单一的通讯连接与服务器通信,省电省流量
如果你的Android手机同时挂着QQ、微博、微信,用电那是嗖嗖的快呀,而iPhone没有这个问题,挂的多顶多是通知多点惹人烦。运行后台服务连接服务器,不仅要占用CPU,并且维持3G网络也是很费电的。通知推送在3G连接持续可用时(比如正在用浏览器上网)保持与推送服务器的通信,在手机闲置时过一段时间才连接一次服务器(这就是QQ推送会延迟的原因),省电。推送服务器把多个消息打包,一起发送给手机,省流量。(如果经过优化,甚至可以仅启用 2G连接接受推送消息。Android后台服务不可能进行这样的优化)
3.软件提供商压力较小
假设我是一个软件提供商,有十万活跃用户,每天给每个用户发送10条消息。如果利用通知机制,我只需要发一百万条消息而已,甚至可以只用一个VPS就完成这点工作。而用Android的后台服务,需要接受10万用户的连接,压力与前者不在一个数量级。
4.编程简单,可以日后升级,尤其适合消息频率低的软件
又要引用那条微博:
@williamlong: 不知道是不是我的错觉还是其他什么原因,刚才我的iphone上忽然弹出一个窗口,说我已经很久没玩捕鱼达人了,然后系统就自动运行我手机上的捕鱼达人应用了。
先不说这种方法是否骚扰用户,他的确是拉来用户的有效方法。在iOS上这太容易实现了,只要在发布软件时请求推送权限就行了。我们看看如果在Android上实现这功能需要怎么做:
1)为软件编写系统服务或开机启动功能。一个高级用户很容易发现你在这么做,并把这功能屏蔽或直接卸载。另外,如果只是为了在半个月后弹出一条通知,这么大动干戈也太“重”了吧?
2)如果没有前瞻性,就需要靠软件升级。开发软件的时候如果没把前一条的功能写好,你准备发布一个增加了系统服务的版本并在更新说明中写上“增加了系统服务,以便弹出通知拉回那些很久不使用的用户”么?
3)安卓软件如果优化的不好,容易死机或者占用过多内存。后台服务也很难优化对网络的访问:使用长连接需要保持网络在线, 如果是过一段时间连接一次服务器,在后台应用较多时也难以省电,不同的应用对网络的访问此起彼伏,网络难以闲置。
以上的分析足以说明Android系统使用推送机制可以带来足够的好处。那么,是否我们很快就可以在下个版本的Android系统中见到推送机制呢?毕竟Google的技术如此强大,Android又是如此需要推送。
如果不考虑专利问题的话,Android和推送之间的最大隔阂其实是策略,或者说系统定位。
iOS严重依赖网络服务,一个不越狱,不绑定AppleID的iPhone几乎什么都做不了。推送机制应用于这样的系统顺理成章。原生的Android 系统是个完全自治的环境。他不需要任何辅助就可以自主运行。以CM为例,它里面没有Google账户,没有电子市场。用户需要单独刷入Google服务包才能使用Google服务。(相比之下,Nexus系列的固件其实是Google定制版的Android)通知推送这种依赖服务器的软件如何在这种系统下运行?
如果加上通知机制,如果默认为所有Android都使用Google的服务器,则Android本身变为一个依赖Google才能运行的系统,这显然违背 了Android一向“干净”的风格。如果仅在Google服务包中提供通知服务,无疑等于半抛弃了那些没有服务包的设备们,这也让Android设备的 分化更为严重。
如果Android上有了推送功能,更可能的是系统自带了推送功能代码,而服务器则需要手机厂商(或者用户)自定义。大多数厂商可以直接使用Google的推送服务,亚马逊肯定要用自己的推送服务器,大陆行货就请自求多福把。
软件提供商也面临着难题:他们要连接多个服务器(Google的和Amazon的,没准还有QQ的和阿里云的)以便为不同的用户群提供推送;还必须为那些手机不支持推送服务的用户做出兼容(捕鱼达人有没有广告推送问题不大,QQ这种实时性高的用后台服务更好些,微博从各个方面看利用推送都正合适,但难道要为没有推送的用户单独做一个版本?)。好消息是大部分的用户都会在软件提供商那里注册(这样提供商才知道用哪个服务器发起推送),便于追踪用户使用情况。
作为Android用户,真心希望这个优秀的功能可以应用于Android。另外,也真心希望Android有更多可以被其他系统借鉴的优秀设计。
网友评论