关于消息推送服务的十问十答

课程推荐:大数据开发工程师--学习猿地精品课程

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

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

言归正传,消息推送服务承载着解决增长难题的重任,对于移动应用来说,消息推送服务已经成为“标配”,据相关数据显示,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推送开发量大吗?有什么难点?

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

文章转载自:https://my.oschina.net/u/4461296/blog/4321601

Image placeholder
sun_zhang
未设置
  0人点赞

没有讨论,发表一下自己的看法吧

推荐文章
区块链十问十答

数据库与区块链有何联系和不同?数据库是集中化记录数据的方案它的增删减更新完全由数据库管理员来操作,而区块链是分布式智能共识达成后才可记录数据的一种方式,他的增删减更新由区块链的矿工和区块链上的用户共同

基于 Hyperf 实现 RabbitMQ + WebSocket 消息推送

#介绍 基于Hyperf+WebSocket+RabbitMQ实现的一个简单大屏幕的消息推送。 #思路 利用WebSocket协议让客户端和服务器端保持有状态的长链接,保存链接上来的客户端id。订阅发

Knative 实战:基于 Kafka 实现消息推送

导读:当前在Knative中已经提供了对Kafka事件源的支持,那么如何基于Kafka实现消息推送呢?本文作者将以阿里云Kafka产品为例,给大家解锁这一新的姿势。作者| 元毅 阿里云智能事业群高级开

阿里巴巴架构师:十问业务中台和我的答案

Photo@  ZachLucero文 |王思轩一切业务数据化,一切数据业务化。“中台”概念这几年非常火,特别是阿里、腾讯、百度、京东等互联网公司最近频繁的基于中台调整组织架构,把“中台”的热度又上升

硬核盘点,华为面向开发者的十大技术

随着社会的发展,科技的进步,5G落地、AI爆发、大数据持续突破、云计算已然成为新时代的水电煤。日益增多的新兴技术,为开发者带来机遇的同时也带来了不少挑战。尽管开发者们经常身处历史性事件的前沿,但由于

程序员常用的十款开发工具推荐

工欲善其事必先利其器。对于程序员来讲,好用的开发工具可以大大提高开发效率。本文将向大家推荐程序员常用的十款开发工具,希望能帮助大家更加优雅地写出代码。这些工具分别是Arthas、ChaosBlade、

最流行的十大开源云监控工具

Linux系统在企业中的应用程度已经非常广泛,人们听到过太多关于Docker和Kubernetes的消息,以至于忘记了监控和日志记录也是同样重要的任务。Docker持续发展,随之而来的是围绕它构建的服

我的十年程序生涯:建模启航

我是一个有魄力的人!我是一个有魄力的人!请大家记住这句话,只有记住这句话,你才能明白我这十年间的选择。十年前我还是象牙塔中数学系的一名普通的大三学生。六年前我包里揣着3000块钱来北漂。三年前我在一家

淘宝从几百到千万级并发的十四次架构演进之路!

作者:huashiou来源:https://segmentfault.com/a/11900000186261631.概述本文以淘宝为例,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时

精简代码,为网站减负的十大建议

课程推荐:web全栈开发就业班--拿到offer再缴学费--融职教育 网站快速加载,是提供良好用户体验的前提。然而,网站功能的不断增多,程序包的不断臃肿,导致网站访问时较大的下载量,最终影响了响应速度

值得推荐的十大React Hook 库

课程推荐:前端开发工程师--学习猿地精品课程 ReactHook来了,并在暴风雨中占领了React社区。自最初发布以来已经有一段时间了,这意味着有很多支持库。在搜索与React相关的内容时,很难不看到

适用于应用开发的十大优秀Java IDE

课程推荐:Java开发工程师--学习猿地精品课程 不知您是否已注意到,那些仅靠文本编辑器来编写编程的日子早已一去不复返了。如今已是IDE(集成开发环境)的时代,各种用于构建应用的开发者工具往往被归并到

适用于应用开发的十大优秀Java IDE

课程推荐:Java开发工程师--学习猿地--送7个上线商业项目 不知您是否已注意到,那些仅靠文本编辑器来编写编程的日子早已一去不复返了。如今已是IDE(集成开发环境)的时代,各种用于构建应用的开发者工

细数云服务的11个威胁 云安全应该交给谁?

随着云计算发展到涵盖更多的企业应用程序、数据和流程,企业可能会选择将其安全性服务外包给供应商。一项行业调查显示,许多企业都需要注意安全问题,而不是将任务交给云提供商。云安全联盟对241名行业专家进行了

用于构建API和微服务的流行JavaScript框架

课程推荐:Java开发工程师--学习猿地精品课程 近年来,随着jQuery、JSON(JavaScript的对象表示法)、MongoDB、ES6Generators的广泛使用,JavaScript发展

万亿级消息背后: 小米消息队列的实践

目录业务背景架构与关键问题性能与资源优化平台化效率小米消息中间件的规划与愿景前文《消息队列价值思考》讲述了消息中间件在企业IT架构中的重要价值,本文将呈现这些价值在落地小米业务过程中的遇到的问题和实践

一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系

课程推荐《web全栈开发就业班--拿到offer再缴学费--融职教育》 1.1.Web服务器概念与基本原理 1.1.1.Web服务器的历史1989年,互联网之父Berners-Lee向其雇主CERN提

扩展 Laravel 的消息通知系统(支持多语言和内容更改)

LaravelNotification在5.3版本中被添加作为核心框架的扩展。它为我们提供了一种简单易懂,表现力强的API去发送通知,包括各种预置发送渠道还有Laravel社区提供的各种自定义渠道。

为了面试后不再回去等消息,我决定阅读源码

01、读源码的经历刚参加工作那会,没想过去读源码,更没想过去改框架的源码;总想着别人的框架应该是完美的、万能的,应该不需要改。另外即使我改了源码,怎么样让我的改动生效了?项目中引用的不还是没改的jar

网易云音乐的消息队列改造之路

十年文案老司机,不如网易评论区。网易云音乐自2013年上线后,业务保持了高速增长。云音乐除了提供好听的音乐外,还留下了我们在乐和人上的美好回忆。本文整理自网易云音乐消息队列负责人林德智在近期Apach

写数据库同时发mq消息事务一致性的一种解决方案

一、引子《事务注解(@Transactional)引起的数据覆盖故障》一文收到不少反馈。事务里不要有rpc,基本原则,sb封装的太好了,把很多人养傻了,function级别的事务,坑太大。网友一这个是

深入探究 RocketMQ 事务机制的实现流程,为什么它能做到发送消息零丢失?

1、解决消息丢失的第一个问题:订单系统推送消息领丢失既然我们已经明确了消息在基于MQ传输的过程中可能丢失的几个地方,那么我们接着就得一步一步考虑如何去解决各个环节丢失消息的问题,首先要解决的第一个问题

分布式场景下Kafka消息顺序性的思考

在业务中使用kafka发送消息异步消费的场景,并且需要实现在消费时实现顺序消费,利用kafka在partition内消息有序的特点,实现消息消费时的有序性。1、在发送消息时,通过指定partition

如果有人再问你怎么实现分布式延时消息,这篇文章丢给他

1.背景上篇文章介绍了RocketMQ整体架构和原理有兴趣的可以阅读一下,在这篇文章中的延时消息部分,我写道开源版的RocketMQ只提供了18个层级的消息队列延时,这个功能在开源版中显得特别鸡肋,但

访问 laradock 服务器内部 http 服务器

在laradock中创建了一个http服务器之后,在workspace容器中,通curl127.0.0.1:9588,可以返回helloworld。但是在本地,通过浏览器访问127.0.0.1:958