适用于国内状况的类GCM推送系统开发技术的研究

(整期优先)网络出版时间:2018-12-22
/ 2

适用于国内状况的类GCM推送系统开发技术的研究

王殿轩1范晓鹏2

青岛黄海学院山东青岛266427

摘要:智能机的发展使人们对手机的依赖越来越大。但与此同时,电池技术却没有任何的提升,无法做到在有限的空间内提升电池容量。基于以上的原因,开发一个适用于所有安卓软件的信息推送平台,统一推送安卓软件向手机或者其他设备发出的信息。以此来减少安卓软件的后台唤醒需求,从而从根本处解决安卓手机耗电快的问题。

关键词:手机待机;安卓系统;后台唤醒;统一推送

一、项目研究背景

随着科技发展,手机的性能飞速提升,但是电池的技术却没有进步。自从1912年锂金属电池最早由GilbertN.Lewis提出并研究。20世纪70年代时,M.S.Whittingham提出并开始研究锂离子电池。到现在为止锂电池还是那个锂电池,他的本质与性能并没有进行多大的变化。这样导致了一个问题,手机的性能很强劲,但却没有足够的电量进行支撑。现在电池是一个巨大的短板,他涉及到材料化学的进步,材料化学没有进步,这个电池就不能进步,我们不能通过改变电池性能来提高手机的工作时间就只好通过节流的方式来减少手机电量的流失。这就涉及到手机的内部的运行了。目前的主流手机有谷歌的Android苹果的IOS。相对于安卓,苹果的优点是封闭性,它有一套严格的审批和软件管理机制。不允许大部分的软件进行后台的常驻。只允许个别的即时通讯软件进行后台常驻。这样就有效的减少了不必要的软件进行耗电,与此同时它也有自己的推送机制,可以防止漏掉消息。苹果的推送系统与苹果的服务器相互配合,软件安装时手机会把token分享给软件,该软件的服务器根据这个token发消息给苹果,苹果根据token发给设备。设备和苹果的连接由系统挂在流量上的tcp长连接实现,装再多软件也只是多挂一个连接就可以推送。

安卓和苹果相比较,苹果软件需要推送通知就将推送发到ApplePushNotificationService再发给APNs再进一步转发给用户。所以iOS的推送不需要后台。安卓软件需要推送通知然后将推送发到GoogleMessageService或MiPush等推送服务器再由服务器转发给用户。但Android的问题往往出在第二步,因为要不那个app没有内置MiPush、GMS等服务的接收器SDK;要不那个软件支持GMS,但是GMS的推送的网站在国内不可用;要不那个app支持MiPush但你的系统是AOSP而不是MIUI等等。第二步一出问题,那就变成软件推送通知➡️保留后台,后台服务里有msfservice或notificationservice用来接收推送通知的服务器➡️通知推送到用户手中。

二、项目研究内容

谷歌被大陆屏蔽,国内的安卓失去了谷歌服务,手机内的软件为了保证信息能够进行及时的推送所以会一直进行自启,保证自己在后台的运行,以此来及时进行消息的提醒。但是每个软件后面都有一个推送服务在运行。每个软件的服务都需要占用电量。同时每个的后台运行都会占用CPU的运算,CPU的后台计算量增加导致手机的发热和耗电增加。开发一个适用于所有安卓软件的信息推送平台,解决目前国内的安卓手机软件信息推送需要常驻后台的问题,建立一个基于国内安卓系统UI底层的系统来统一手机中APP的推送,这样就不需要在让APP软件在后台运行就可以收到APP的信息推送,以这样的方式从根源上解决安卓手机耗电的问题。

三、项目研究现状

国外没有对Google进行屏蔽封锁,所以国外的安卓手机可以使用Google套件并使用Google的GCM(GoogleCloudMessaging)推送

这样软件需要推送通知➡️将推送发到GoogleMessageService或MiPush等推送服务器➡️服务器转发给用户,这样就不需要软件常驻后台来进行推送。

国内由于对Google进行了屏蔽,所以不能使用GCM(GoogleCloudMessaging)进行推送,所以才有了国内各种软件为了自己的信息推送进行后台常驻。占用大量的资源,从而导致手机的卡顿和费电。国内也有一些类似的软件比如小米的MIpush,华为的NCPush(NotificationCenter+Push)等。但是这样的推送局限性很大,只限于自己特定的手机,而且这样的推送机制更增加了国内安卓的碎片化。

四、项目研究模块

后台软件唤醒控制模块:安卓手机软件为了及时的后台推送会进行大量的唤醒这个在上文已经提到,而既然我们要做的是让他们统一进行消息推送,所以就没必要让他们都在后台进行运行。因而我们需要控制他们的后台唤醒,减少软件的运行,进而来省电。由于安卓软件厂商众多,良莠不齐不能通过协商让他们按照我们的意思来进行软件后台的运行,所以我们可以直接在手机端对软件进行限制。用一套智能的方法来分析这个软件是否是我们真正要打开的还是被别的软件或者操作无故唤醒的。这个甄别方法我们准备借鉴“黑域”的运行原理。简单来说黑域就是通过监听系统Log来分析应用是否是用户意识形态上的被关闭(返回键退出应用),如果判断是,那么如果黑域监听到了试图再次非法启动的进程,它会立马Kill这个进程。黑域倾入性低,不会像xposed那样去侵入你的系统(zygote),它仅仅是在使用的时候刷入一个shell脚本。这个brevent.sh脚本会在用户文件系统增加一个app_porcess32文件的软链接同时复制一个so库(libbrevent.so),这样黑域就拥有了读取系统Log,强制休眠,kill其他应用的权限,这也是为什么每次重启都需要重新通过adb刷这个脚本进去的原因,毕竟非root。在启动黑域之后,会启动一个IntentService来加载这个so库,这个so库会加载另一个so库(libread.so),用来监听以及回调Java层的事件回调函数。并且在用户空间通过app_porecess32的软链接fork了一个新进程(服务端),这个进程跑的纯Java代码代码就是黑域的服务端,用来分析系统Log,以及一些客户端的配置响应。客户端与服务端进程通过Socket进行通信。其中最重要的就是分析系统事件,他一共只对六个事件感兴趣:AM_FOCUSED_ACTIVITY,AM_NEW_INTENT,AM_PAUSE_ACTIVITY,AM_PROC_START,NOTIFICATION_CANCEL_ALL,POWER_SCREEN_STATE。举个列子,如果收到AM_PROC_START事件,表示某个组件已经启动完毕。服务端立马通过Log中的componentName+uid去判断这个组件是否已经被标识为不可启动,如果是的话,会立马调用ams去kill掉。这样就合理的解决了后台的唤醒问题。

统一推送模块:其实安卓系统自带有GoogleCloudMessagingforAndroid谷歌推出的云推送服务可以像iOS一样免后台推送。因为国内谷歌用不了,并且谷歌不向国内开发谷歌框架授权。即使刷上谷歌框架,也需要科学上网才能使用GCM,然而国内大部分应用不提供GCM支持,又进了一个恶性循环,因此谷歌推送服务GCM在中国大陆基本上是不能使用的。所以通常情况下应用要挂后台才能推送。但也有例外目前我所知道的国内最流行的推送系统是小米做的类似于GCM的MiPush,通过小米自有的接口和SDK在MIUI系统中支持主流国产软件的免后台推送。我们可以借鉴并且整合他们的推送方式,来建立一个推送的协议和联盟,让这些推送整合在一起进行统一的底层UI的开发。减轻开发的负担和国内安卓系统的碎片化。

综上所述,该系统是一个趋势,符合人们对智能手机耗电过大的观点。现在智能机所面对的一个问题就是大电池与轻薄不可共存,在这个情况下个各智能产品厂商也想尽一切办法来解决这个问题,然后为了省电长续航,从而限制软件的后台运行,就会造成消息接受不到,从而影响生活。如果该系统如果被研发和推广,就可以解决这个两难的问题。

参考文献:

[1]李文江;陈诗琴.基于AndroidGCM服务的图书馆信息推送系统设计。2013,11(25)

[2]孙伟;胡霞.Android推送技术综合分析。2013,10(30)

[3]戚海伟.信息推送平台的设计与实现。2013,03(01)

[4]万爽,基于Android平台的即时位置信息推送系统设计与实现。2016,07(04)

[5]王澎涛,基于HTML5的跨移动终端平台信息推送系统的设计与实现。2014,12(28)