一文让你知道关于App推送那些事

推送相关介绍

在用户未打开App时,服务端向用户推送服务器最新的消息数据,称为推送。消息推送在移动开发中用到的场景非常多,比如典电商类app的商品促销活动,资讯类的app的新闻推送等等。在实际开发中,我们常常会根据产品设计的需要,进行推送功能的开发。然而在实现过程中,会面临很多问题,比如:怎么实现?是自己实现还是选择第三方的推送?如何选择第三方的推送?如何保证消息推送的数据安全?如何保证推送的到达率?其实这些痛点主要是在Android手机上,本文侧重点也在于Android手机上的推送。

part1:iOS推送和Android系统推送的对比

iOS推送服务通知是由自己专门的推送服务器APNs (Apple Push Notification service)来完成的,其过程是 APNs 接收到我们自己的应用服务器发出的被推送的消息,将这条消息推送到指定的 iOS 设备上,然后再由 iOS设备通知到应用程序,进而提示或展示。 iOS 远程推送的前提是,装有我们应用程序的 iOS 设备需要向 APNs 服务器注册。当我们需要推送消息时,我们的应用服务器将消息按照指定的格式进行打包,然后结合 iOS 设备的 devicetoken 一起发给 APNs 服务器。我们的应用会和 APNs 服务器维持一个基于 TCP 的长连接,APNs 服务器将新消息推送到iOS 设备上,然后在设备屏幕上显示出推送的消息。(注:所有的第三方推送都要通过苹果服务器APNs )。

而 Android每个需要后台推送的应用要有单独的后台进程,才能和各自的服务器通讯和交换数据。其实 Android 也有类似 APNS 的 GCM(Google Cloud Message)的服务,如果Android应用的推送采用这种模式的话,就和iOS推送一样了。GCM相关的程序应该是集成在所谓的Gapps中。可是由于国内的 Android 手机 GCM 处于基本不可用的状态,并且Android设备的严重碎片化,就导致了做Android推送时不得不考虑的上边的那些问题。

part2:推送的本质与原理

消息推送的本质是:App将服务器更新的信息推送给用户,即App获取服务器信息,再推送给用户App从服务器获取最新消息有两种基本方式(原理):Push和Pull

  • 主动获取方式(Pull):客户端隔固定时间主动向服务器获取信息,看是否有更新的信息;若有更新信息,则发送到客户端
  • 被动接受方式(Push):当服务器有更新信息时主动发送到客户端

对比:Push方式比Pull方式更优越。因为采用Pull方式时客户端需要不停地去监测服务器的变化,更费客户端的资源(CPU资源、网络流量、系统电量)

part3:Android中实现消息推送的几种解决方案

了解了推送的原理,下面说下在Android中实现消息推送的几种解决方案:

方案1、 使用GCM服务(Google Cloud Messaging)

简介:Google推出的云消息服务,即第二代的G2DM。

优点:Google提供的服务、原生、简单,无需实现和部署服务端。

缺点:该服务在国内不够稳定、需要用户绑定Google帐号,受限于Google。

方案2.轮询

简介:基于Pull方式,应用程序隔固定时间主动与服务器进行连接并查询是否有新的消息。

缺点:成本大,需要自己实现与服务器之间的通信,例如消息排队等;到达率不确定,考虑轮询的频率:太低可能导致消息的延迟;太高,更费客户端的资源(CPU资源、网络流量、系统电量)和服务器资源(网络带宽)

方案3.SMS(短信发送)

简介:通过拦截SMS消息并且解析消息内容来了解服务器的意图,并获取其显示内容进行处理。

优点:可实现完全的实时操作。

缺点:成本相对较高。因为目前来说,很难找到免费的短消息发送网关来实现这种方案,只能通过向运营商缴纳相应的短信费用。

方案4、使用MQTT协议(更多信息见: http://mqtt.org/)

简介:轻量级的、基于代理的“发布/订阅”模式的消息传输协议。

优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域(参考: http://mqtt.org/software),且已有C++版的服务端组件rsmb。

缺点:不够成熟、实现较复杂、服务端组件rsmb不开源,部署硬件成本较高。

方案5、使用XMPP协议(Openfire + Spark + Smack)

简介:基于XML协议的通讯协议,前身是Jabber,目前已由IETF国际标准化组织完成了标准化工作。

优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。

缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。

方案6.使用第三方平台

简介:使用第三方的消息推送平台。现今主流的推送平台分为------

手机厂商类:如小米推送、华为推送...

第三方平台类:友盟推送、极光推送、个推...

BAT大厂的平台推送:阿里云移动推送、腾讯云移动推送、百度云推送。

下面会详细介绍。

part4:第三方消息推送平台详细介绍

1.主流的第三方推送平台分类

手机厂商类:小米推送、华为推送...

第三方平台类:友盟推送、极光推送、个推...

BAT大厂的平台推送:阿里云移动推送、腾讯移动推送、百度云推送

2. 对比其他推送方式的特点

  • 可以有效降低成本

上述的推送大多数是免费的,假如自己实现则消耗过多资源(开发成本和后台管理、统计成本)

  • 消息到达率高

如果一个手机里有多个App使用了同一家推送服务,那么这些App将共用一条消息通道,即使你家的App推送服务被杀死了,那么只要用户打开了其他集成该推送服务的App,你家的推送就能到达用户。

  • 安全性低

使用别人的服务器,数据还是有泄露的风险的。(但是有些推送服务支持私有服,需要¥)

  • 服务会被杀死

由于Android系统的机制,后台推送 Service 会被各种主动的或是被动的行为给杀死,而服务一旦被杀死,意味着就接收不到推送消息。(有些推送服务支持集成厂商通道,所以集成厂商通道可以提高(离线)推送到达率,但是也是需要¥)

part5:如何选择第三方平台推送服务?

了解了第三方推送的特点,我们应该如何选择呢?很有必要说清楚三个需要注意的原则。

1.手机厂商推送

请记住一个潜规则:操作系统是不会杀死属于自己品牌的推送服务。

手机厂商的推送服务在自家的手机上属于系统级别的服务,这意味着系统不会杀死自家的推送服务。比如说,Android原生系统是不会杀死C2DM消息推送服务,MIUI系统是不会杀死小米的推送服务。

3f795f828890406a8df0693272b59da8.png

 

(小米推送官网截图 - 集成应用)

从小米推送官网可以看到目前市场主流的app大都集成了小米推送。

2. 第三方平台类

请记住一个规则:推送系统会共享一条推送渠道。

这意味着假设你接入了友盟推送,而恰好今日头条也接入了友盟。有一天你的App被杀死了,但这时用户启动了今日头条,那么推送系统也就会通过共享的推送通道顺便把你推送消息送达到手机上(推送到达率得到提高),然后还可能把你的进程也唤醒(被“保活”了)。所以说,关于如何选择第三方平台类的推送,推送平台的规模效应就很重要了。

那如何得知他们的规模和市场份额呢?主要看两点:

  • 问内部的朋友。

  • 看推送平台的合作客户里有哪些大的app - 参考对应官网的合作案例。06cd9864c2304389af0f60e74b0537bb.png

 

(个推官网截图 - 集成应用)

3. BAT大厂的推送

一句话:BAT大厂的推送其实并没有什么优势。

有人可能会觉得用了腾讯移动推送,就能占上微信的光保证你的App永远不会被杀死,那是幻想了。至于阿里云的移动推送,也看不出市场上有多少主流应用使用了它,但我却在其它平台看出淘宝使用了其它的第三方推送(比如友盟推送,小米推送)。

除了上边三个原则,我们在选择推送平台时还需要考虑的因素有:

用户群体属性(设备):什么样的用户群体,使用什么样的设备居多。进而可以考虑手机厂商。

到达率:如是否要集成小米华为推送,或者选择第三方平台时是否要集成厂商通道,第三方平台的规模...

实现成本:人力成本,时间成本,资金成本...

所以,我们需要根据自己的情况来进行消息推送平台的选择。

part6:推送消息类别的选择

1. 推送消息的类别

通常第三方推送平台都支持两种推送消息类型:通知栏消息和透传消息。

通知栏消息:该类消息在被送达用户的设备后,直接以系统通知栏的形式展示给用户不会继续被传递到App。

透传消息:该类消息在被送达用户的设备后,还会继续传递到App,通过回调App的某个BroadcastReceiver的形式将消息传递到App内部。然后由App决定如何处理和显示这个消息。

所以透传消息不一定会以系统通知栏的形式进行推送,由程序猿自定义。

2.消息类别的区别与特点

二者的区别在于:透传消息在整个消息传递过程中比通知栏消息多了一步——传递到App

通知栏消息的优点:送达率高

因为透传消息在整个消息传递过程中比通知栏消息多了一步-传递到App,因此透传消息就增加一些被系统限制的概率,给系统杀死的概率就高一些,所以说,通知栏消息比透传消息应该能提供更好的送达率。

透传消息的优点:

  • 对消息操作程度高 & 自定义程度高。
  • 提供了对消息数据的更灵活的操纵能力。
  • App如果仅仅通过通知栏消息,是无法接触到消息数据本身的。
  • 可自定义通知提醒的样式(包括提示样式、提示形式如声音等等)

总结

上边不仅对推送和推送的实现方案以及第三方推送进行了全面细致的介绍,也对选择第三方推送时需要考虑的因素和要注意的事项进行了说明。虽然并没有对安全和如何提高消息到达率问题进行单独介绍,却有所提及的穿插在其它内容里了。希望各位看完能有所收获。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1381931.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

关于ISO27701隐私信息安全管理体系介绍

01 什么是ISO27701 ISO27701是对ISO27001信息安全管理和ISO27002安全控制的隐私扩展,全称《安全技术—扩展ISO27001和ISO27002的隐私信息管理—要求与指南》,是ISO标准委员会以ISO 27001为基准,以ISO27552为蓝本,建立发布的隐私…

双向循环链表、dancing links

目录 双向循环链表 力扣 426. 将二叉搜索树转化为排序的双向链表 十字交叉双向循环链表(dancing links) 精确覆盖问题 dancing links X算法(V1递归版) POJ 3740 Easy Finding 数独 X算法优化 X算法(V2非递归…

jpg照片太大怎么压缩变小?jpg如何缩小图片大小kb?

我们平时在接收过多的jpg格式图片的时候,越大的图片虽然越清晰,但是接收和储存起来就非常不方便,那么有没有什么办法可以将jpg图片压缩呢?其实现在可以通过在线图片处理工具来完成jpg压缩(https://www.yasuotu.com/jpg…

html宽度一变小图形就上去,如何把图片大小变小?

我们在布局图片列表时,通常我们要控制图片的高度和宽度这样来达到图片统一。我们在HTML布局时候直接在图片img标签加宽度和高度属性即可控制图片高和宽。 一、html img图片标签高度宽度设置 我们可以直接在图片标签设置宽度width和高度height,这里需要注…

ChatGPT等人工智能编写文章的内容今后将成为常态

BuzzFeed股价上涨200%可能标志着“转向人工智能”媒体趋势的开始。 周四,一份内部备忘录被华尔街日报透露BuzzFeed正计划使用ChatGPT聊天机器人-风格文本合成技术来自OpenAI,用于创建个性化盘问和将来可能的其他内容。消息传出后,BuzzFeed的…

照片怎么转换大小?怎么把图片尺寸变小?

平时在使用QQ截图之后,发现图片尺寸过大不方便上传,该怎么解决图片大小转换问题呢?本文将介绍一款图片改大小(https://www.yasuotu.com/size)工具,可以在线处理图片尺寸,打开浏览器即可调整图片…

照片大小kb怎么调整变小?

伴随着工作和生活的需要,图片的应用遍及我们生活和工作的方方面面,随之我们的电子设备上面累积的图片文件也越来越多。因为图片使用的场景不同,所以对图片的大小也有不同的要求,那就要求我们学会调整照片大小的方法,会…

如何压缩照片大小-照片无损压缩办法

图片大家都不陌生,于生活于工作我们都能接触到,但并不是原图片什么样,我们都可以直接进行使用的。很多图片的质量虽然特别的高清,但是它的体积也像特别大,这时候无论我们是传输给他人,还是上传到各个社交媒…

C#,数值计算——抛物线插值与Brent方法(Parabolic Interpolation and Brent‘s Method)的计算方法与源程序

using System; namespace Legalsoft.Truffer { /// <summary> /// 抛物线插值与Brent方法 /// Parabolic Interpolation and Brents Method /// </summary> public class Brent : Bracketmethod { public double xmin { get; set…

【Linux操作系统】深入理解Linux系统编程中的open函数

在Linux系统编程中&#xff0c;open函数是一个非常重要的系统调用函数&#xff0c;它用于打开或创建一个文件&#xff0c;并返回一个文件描述符。本文将详细介绍open函数的用法&#xff0c;并给出具体的代码示例。 文章目录 1. 函数原型2. 函数参数2.1 flags参数2.2 mode参数 …

34. 应用监控【监控端点配置】

当一个 Spring Boot 项目运行时&#xff0c;开发者需要对 Spring Boot 项目进行实时监控来获取项目的运行情况&#xff0c;在项目出错时能够实现自动报警等。 Spring Boot 提供了actuator 来帮助开发者获取应用程序的实时运行数据。开发者可以选择使用 HTTP 端点或JMX来管理和监…

数据监控平台

数据监控平台 监控平台需要实时监控业务指标数据&#xff0c;系统特点&#xff1a;高并发&#xff0c;大数据&#xff0c;低延迟。主要使用的技术&#xff1a; HBase存储海量数据&#xff0c;ScriptEngine引擎&#xff0c;MySQL分表&#xff0c;Redis集群。 高并发&#xf…

应用监控系统

做这个系统其实当时的想法是开放给开发&#xff0c;然后开发自己做一些自己需要的监控&#xff0c;以便最早发现问题&#xff0c;但是做完发现跟nagios\zabbix重复的相当严重&#xff0c;其实应该在nagios\zabbix上继续开发一下应该会更好&#xff0c;先贴出来吧&#xff01; 一…

大众点评Cat实时应用监控平台服务端部署

关于cat服务端部署的相关文档地址如下&#xff1a; https://github.com/dianping/cat/wiki/readme_server 话不多说&#xff0c;接下来就按照官方文档流程走一遍&#xff0c;我这里是使用的Windows系统进行部署。 第一步确认环境&#xff1a; 我这边使用的是如下环境&#xff…

Skywalking 快速搭建应用监控

今天我们就着重讲一讲如何基于 Skywalking 来快速搭建一套应用性能监控平台 一、Skywaling 介绍 Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的开源项目&#xff0c; 2017年12月SkyWalking成为Apache国内首个个人孵化项目&#xff0c; 2019年4月17日SkyWalking从…

SprngBoot Admin (应用监控)

1 简介 SpringBoot应用可以通过Actuator来暴露应用运行过程中的各项指标&#xff0c;Spring Boot Admin通过这些指标来监控SpringBoot应用&#xff0c;然后通过图形化界面呈现出来。Spring Boot Admin不仅可以监控单体应用&#xff0c;还可以和Spring Cloud的注册中心相结合来…

行业分析| anyRTC智慧视频监控的应用

智慧视频监控是安全防范系统的重要组成部分&#xff0c;不仅可以达到一般视频监控系统的远程控制监控、视频回看&#xff0c;满足治安管理、城市管理、交通管理、应急指挥等需求&#xff0c;还具备防盗报警系统的预警信息作用&#xff0c;在预防、发现、控制、打击违法犯罪&…

十四、应用监控(2)

本章概要 监控信息可视化邮件报警 14.2 监控信息可视化 Spring Boot 中提供了监管信息管理段&#xff0c;用来实现监控信息的可视化&#xff0c;这样可以方便开发者快速查看系统运行情况&#xff0c;而不用一个一个地调用接口。 创建 Spring Boot Web 工程&#xff0c;添加以…

Prometheus应用监控

1.主流机器与应用Prometheus,skywalking监控体系分享介绍 应用监控介绍 目前市面上开源应用的APM系统主要有CAT、Zipkin、Pinpoint、SkyWalking。目前市面上机器监控软件有zabbix&#xff0c;Prometheus(也能监控应用&#xff0c;及其他中间件产品)。 Zipkin是Twitter开源的…

系统与应用监控的思路和方法

0、前言 在实际的性能分析中&#xff0c;一个很常见的现象是&#xff0c;明明发生了性能瓶颈&#xff0c;但当你登录到服务器中想要排查的时候&#xff0c;却发现瓶颈已经消失了。或者说&#xff0c;性能问题总是时不时地发生&#xff0c;但却很难找出发生规律&#xff0c;也很…