小师妹学JVM之:JIT中的PrintCompilation

随着移动互联时代进入下半场,寻找流量红利的突破口成为每个互联网人思考的命题。互联网的运营一切都是为了增长,毫无疑问,增长是运营的使命。

为了引出本文的主题,小编都上升到使命的高度了。

言归正传,消息推送服务承载着解决增长难题的重任,对于移动应用来说,消息推送服务已经成为“标配”,据相关数据显示,App集成的开发服务中,消息推送占比最高,且渗透率逐年递增。

消息推送虽然并不陌生,但围绕推送到达率、推送策略、心跳建设、技术选型等,大家还存在很多疑问。根据用户调研,小编整理了关于消息推送服务的十问十答,为大家揭开消息推送的神秘面纱。

1、Android系统和iOS系统的消息推送有何区别?

Android和iOS都从属于移动消息推送,基本上可以分为自建通道和厂商通道。

在自建通道上,Android和iOS所采用的技术手段都差不多,实现方式上可能略有差别,

在厂商通道上,由Android开源的特性,Google提供了自己的FireBase,而国内FireBase的支持情况并不好,所以每个厂商定制的Rom中都有自己的一套PUSH模块,像华为、小米、OPPO、VIVO、魅族等,都提供自己的推送SDK,而iOS系统由于是非开源的封闭系统,所以在厂商这块就只能采用苹果提供APNS。

2、如何能做到长连接保持率的同时,还省电省流量呢?

长连接的保持率和省电省流量,看上去两者是相悖的两个方向,如果一直保持长连接在线,那么在Android系统上肯定要进行各种进程保活,缩小心跳时间等操作,势必会造成会造成流量和电量的消耗。

其实推送是某一时刻的行为,可能一天之内,也就推送几条消息,大部分时间,推送其实是不做事情的,所以可以在以下方面做一些努力:

在建立长连接的过程中,我们尽量减少所要传输的数据,在首次建立的时候,传接口需要的数据,其他时候建立连接,对数据做一个diff,做增量传输,对传输的数据进行最大化的压缩,或者采用protobuf、flatbuffers等二进制传输协议,缩减连接或者心跳的数据包大小。

根据设备网络环境,动态调整心跳间隔时间,每个心跳包尽可能的小,不传输与心跳无关的数据等。

如果集成厂商通道,充分利用厂商通道传输能力做离线数据的触达,以及平衡好自有通道和厂商通道在实际中的使用场景。

另外不建议做进程保活机制,以及反复使用wake-lock机制,增加对设备的电量、流量等消耗。

3、如何保证数据和用户隐私安全?

在数据安全上,可以采用SSL和TLS等安全传输层协议,也可以使用更为轻量的秘钥协商协议,可以参考ECDH和ECDSA原理,自己实现加解密协议,可以防止中间人攻击,也可以节省推送成本。

在隐私安全上,要做好自身的风控策略,对隐私信息进行分类处理,对于设备信息的采集需要经用户授权,隐私授权后才可以采集,并做好缓存策略,尽量减少采集次数,严格禁止涉及公民个人用户隐私信息的采集。

4、第三方推送到达率普遍是多少?有什么手段可以确保高到达率?

第三方推送的在线到达率普遍都在99%左右。

提高到达率方面,一是要保证长连接的稳定,可以采用合适心跳探测,保证客户端和服务端的稳定链接,进而提高推送到达率;另外,可以使用消息回执(ACK)机制,客户端要在收到消息后发送ACK,对于没有收到客户端ACK消息标记其状态为未读,对未读消息进程重发或者等待下次端上进行连接。

5、第三方推送服务和自建如何选择?

可以结合自身业务的需要,从成本控制和产生收益的角度做出选择。

推送能力的建设是需要持续投入的,主要涵盖研发、运维、基础设施等方面,对于中小型公司来说,推送的成本相对是比较高的,所以初创业务可以选择第三方的推送服务,以便能够把更多精力和财力投入在核心业务的研发和运营上,保证业务高速迭代。另外第三方推送在一定推送规模内基本都有免费的额度,所以在成本上也可以节省开销。

对于业务已经有一定规模,有自身的盈利能力,并且现有第三方推送在业务或者成本上已经满足不了自身要求的情况下,可以建立自己的推送能力,以满足不断变化的业务的需要,如果推送服务做的好,也是自身一个可观的赢利点。

总结来说,自建推送系统还是用第三方推送,要根据自身产品和业务的特点权衡选择。

6、如何做到进程保活?

进程保活,主要分为两类:

一类是提升进程优先级。Android系统进程优先级被划分为前台进程、可见进程、服务进程、后台进程、空进程。常用的保活手段有启动前台服务,灭屏启动Activity,不同Android版本启动前台服务需要适配,主要是利用系统漏洞确保不会被用户感知。

另一类是进程被杀后重启,可以通过native层去处理。5.0以下使用fork产生的子进程和父进程通过管道互相监听,当系统杀主进程时,子进程有足够的时间将主进程拉起,从而实现保活。5.0以后采用进程组概念,杀进程时,直接杀死该进程组的所有进程,耗时大概在100ms左右,所以可以在以下方面做出改进:

进程状态监听,要求及时且不消耗过多资源,例如可以利用文件锁。短时间内启动进程,耗时越少越好。

tips:随着Android系统限制越来越严苛,保活也涉及很多兼容性问题,没有可以100%的保活方案,另外也不建议做进程保活,会增加设备资源消耗,影响用户体验。

7、如何实现千人千面推送?

个性化推送依赖于具体的用户画像,包括不限于对用户的年龄、性别、兴趣、爱好、职业、习惯等数据进行分析,采用合理的推荐算法,对用户进行分群或者标签化处理,建立用户或者标签与设备的映射关系,根据标签实现不同用户群体的推送。

8、沉默或卸载的用户是否能进行推送?

沉默用户是可以进行推送的,主要手段是借助厂商通道的推送能力进行离线推送,另外也可以通过应用间的激活进行召回,唤醒推送能力进行推送。卸载用户是没有办法进行推送的。

9、用户通知权限的开启与关闭对推送的影响是?一般厂商会默认关闭吗?

目前推送的主流形态是以通知的形式到达用户的端,通过用户的点击打开通知需要展示的页面,进而形成一个消息从下发->到达->展示->点击的一个闭环,从而达到引流和运营效果。所以通知栏关闭,就意味着通知无法展示,闭环就会被打破。

厂商的通知栏开关一般情况下都是关闭的,需要在App启动的过程中,自行判断,如果通知栏关闭,需要引导用户去打开通知栏开关。

10、使用第三方API推送开发量大吗?有什么难点?

第三方推送一般都会有比较详尽的集成开发和使用文档,并且在产品设计上会尽力考虑降低用户的集成和使用成本,所以对开发者来说,使用推送的开发工作量其实是很小的,按照相关文档操作就可以了,没有什么难点。

b Blocking compiler (www.hongniuyLe.cn always set for client)  www.tongyayule.com * Generating a native wrapper % On stack replacement (where the compiled code is running) ! Method has exception handlers s Method declared as synchronized n Method declared as native made non entrant compilation was wrong/incomplete, no future callers will use this www.tianhuoyl.cn version made  www.tianshun178.cn zombie code is not in use and ready for GC

如果大家还有其他问题,欢迎随时与小编交流。

百度慧推限时免费,详情点击:https://www.baihuayllpt.cn cloud.baidu.com/product/spp.htm

你可能感兴趣的:(小师妹学JVM之:JIT中的PrintCompilation)