App消息推送的原理

文章目录

  • 1. 基本概念
  • 2. iOS和Android消息推送原理对比
    • 2.1 iOS
      • 2.1.1 基本原理
      • 2.1.2 优劣势
    • 2.2 Android
      • 2.2.1 基本原理
      • 2.2.2 优劣势
  • 3. Android消息推送原理
    • 3.1 操作系统有自身的消息推送功能(系统级别)
    • 3.2 三种基本的推送方式:Push、Pull 和 SMS
      • 3.2.1 轮询(Pull)方式
      • 3.2.2持久连接(Push)方式
      • 3.2.3 SMS(Push)方式
    • 3.3 七种主流的Android消息推送方式

1. 基本概念

  • 目的: 在用户未打开App时,App主动向用户推送服务器最新消息
    在这里插入图片描述

  • 基本原理: 服务器如何先找到设备、再找到app?
    每一个设备都有一个自己的设备号,而设备中的app又都有一个唯一的包名。所以服务器只需要找到设备号与包名就可以定位到某个设备的某个应用,而这设备号与包名会一起构成一个标识符,叫做device_token,因此问题就简化为把device_token与消息内容等信息交给服务器,服务器把内容发到唯一的device_token上。

  • 作用: 功能需要,如:资讯类产品的新闻推送、工具类产品的公告推送等等;活动运营需要,如:电商类产品的促销活动;召回用户 / 提高活跃度等等。

2. iOS和Android消息推送原理对比

iOS 的消息推送机制面世之时是一种全新的解决方案(堪称平台中的平台),应用本身不能有常驻的后台进程,系统的开销少,内存使用更少,电量也更少(把更多的运算和资源开销放在云端,非设备端)。而 Android 的特点,虽然开销大,优点是更稳定快速,但不明显。

(更多请参见以下文章:《移动端IM实践:谷歌消息推送服务(GCM)研究(来自微信)》、《Android端做消息推送有没有比较好的方案?》、《为何微信、QQ这样的IM工具不使用GCM服务推送消息?》,以及即时通讯网精选的《推送技术好文专辑》)

2.1 iOS

2.1.1 基本原理

iOS 系统的推送(APNS,即 Apple Push Notification Service)依托一个或几个系统常驻进程运作,是全局的(接管所有应用的消息推送),所以可看作是独立于应用之外,而且是设备和苹果服务器之间的通讯,而非应用的提供商服务器。
在这里插入图片描述
iOS的推送是通过苹果自己的APNs服务进行的,用户需要将device_token以及消息内容等推送信息交给APNs服务器,剩下的均由苹果自己来完成。iOS应用的推送大部分情况下都要依赖苹果生态提供的APNs(Apple Push Notification Service)服务。
在这里插入图片描述

  1. 首先,作为设备标识的device-token是由APNs颁发的,App开发者或者第三方推送平台(图中的Provider)做的工作是收集这个device-token,APNs的推送是要求基于APNs颁发的device-token来推送的。只有正确的device-token会被APNs接受,如果是一个错误的、或者无效的device-token(比如App已经卸载了),APNs就不会接受。
  2. 接着,开发者使用第三方推送平台(图中的Provider)在将推送内容与范围选定之后进行推送,第三方推送平台将信息提交给APNs,剩下的操作全部都由APNs来进行完成,整个过程第三方推送平台就不能控制了

    例如,腾讯 QQ 的服务器(Provider)会给苹果公司对应的服务器(APNs)发出通知,然后再中转传送到你的设备(Devices)之上。当你接收到通知,打开应用,才开始从腾讯服务器接收数据,跟你之前看到通知里内容一样,但却是经由两个不同的通道而来

2.1.2 优劣势

所以, iOS 的推送,可以不严谨的理解为:
1)苹果服务器朝手机后台挂的一个 IM 服务程序发送的消息;
2)系统根据该 IM 消息识别告诉哪个 Apps 具体发生了什么事;
3)系统分别通知这些 Apps ;
他们带给用户的好处是实实在在的:
1)安全:只有登录过的开发者可以通过苹果的服务器推送;
2)快速、稳定、可靠:苹果掌控推送服务器和 OS ;
3)更省电;
4)让整个系统的体验更统一和简单:不会出现杀后台这种脑残事。(不用大量 Apps / Apps 的服务为了推送挂后台)。也不会出现 Apps 被杀就收不到推送这种脑残事(早一点的新浪微博 Android 版仍然如此);
5)开发容易:当然,开发者还是要做些事情,比如维护个服务器什么的。但是复杂度无疑降低很多了。

2.2 Android

而 Android,就不同,更像是传统桌面电脑系统做法。每个需要后台推送的应用有各自的单独后台进程,才能和各自的服务器通讯,交换数据。另外其实 Android 也有类似 APNS 的 GCM(Google Cloud Message),属于开发者可选,非强制。

2.2.1 基本原理

Android平台在不使用GCM的情况下就需要将自己的服务器或是第三方推送服务提供商的服务器与设备建立一条长连接,通过长连接进行推送。
在这里插入图片描述
开发者通过第三方推送服务提供商将信息直接下发给需要的设备,第三方推送服务提供商与设备建立一条长连接通道,并且将消息路由到APP中(图中的设备1与设备2),对于像设备3这种无网络连接或是没有成功建立长连接通道的设备,会在设备3连网且推送消息没有过期的情况下自动收到由第三方推送服务提供商推送过来的消息,保证消息不会丢失。

但是不建议自己设置服务器实现推送功能。
一是因为成本太高(开发成本、维护成本),自己搭建的服务器无论是稳定性还是速度上都比不了第三方推送服务提供商的效果;
另一个是因为自己的数据量较小,使用第三方推送服务提供商可以用他们的维度进行推送,实现精准推送。

2.2.2 优劣势

Apps 挂后台一直是 Android 引以为豪的特性,挂后台等待推送就成为技术选择;
但是,没人真正为用户的电池负责。Apps 的开发者不会站在系统层面考虑的。他会假设其他 Apps 没有那么“不自觉”;
优点在于 ,因为整个技术方案非强制, Android 的 Apps 在接收到推送后的表现更为灵活。像 Line 的 Android 版本可以在推送通知的 Popup 上直接回复, iOS 就需要越狱才能做到了。

3. Android消息推送原理

3.1 操作系统有自身的消息推送功能(系统级别)

  • 系统级别:任何时候都可以推送给用户,且不会被系统杀死
  • Android的消息推送服务称为:C2DM(Cloud to Device Messaging)

3.2 三种基本的推送方式:Push、Pull 和 SMS

  • 本质: App将服务器更新的信息推送给用户,即App获取服务器信息,再推送给用户
  • App从服务器获取最新消息的基本方式(原理)有3种:Push、Pull 和 SMS
    在这里插入图片描述

3.2.1 轮询(Pull)方式

应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。

要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池

3.2.2持久连接(Push)方式

这个方案可以解决由轮询带来的性能问题,但是还是会消耗手机的电池。IOS平台的推送服务之所以工作的很好,是因为每一台手机仅仅保持一个与服务器之间的连接,事实上C2DM也是这么工作的。不过刚才也讲了,这个方案存在着很多的不足之处,就是我们很难在手机上实现一个可靠的服务,目前也无法与IOS平台的推送功能相比。

3.2.3 SMS(Push)方式

在Android平台上,可以通过拦截SMS消息并且解析消息内容来了解服务器的意图,并获取其显示内容进行处理。

优势: 可以实现完全的实时操作。
劣势:成本相对比较高,需要向移动公司缴纳相应的费用。我们目前很难找到免费的短消息发送网关来实现这种方案。

3.3 七种主流的Android消息推送方式

**Original Link:**https://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378971.html
在这里插入图片描述

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

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

相关文章

php实现app消息推送

如何用php实现APP消息推送 现在有很多的消息推送厂商,比如阿里云的消息推送,极光推送,融云的消息推送。他们的原理都是把sdk内置在app里面,达到消息推送的目的,通过一张图来了解一下,看不懂不要紧&#xf…

Android,ios,安卓app推送消息通知,java后台向手机推送app的通知教程

文章目录 一、业务介绍1.1 产品简介1.2 名词解释1.3 消息推送流程 二、应用创建三、客户端 SDK 集成3.1 Android3.2 iOS 四、服务端推送4.1 服务端消息下发流程(必读)4.2 开发者中心后台4.3 推送代码 五、参数说明 一、业务介绍 1.1 产品简介 个推是商…

App消息推送概述

消息推送介绍 消息推送(Push),是指从云端服务器到手机终端的消息推送通道,运营人员可以通过自己产品后台或者第三方推送通道对用户移动设备进行主动的消息推送。通过消息推送,目标用户可以在移动设备通知和状态栏看到…

PushDeer:一种无APP的通知推送解决方案

概述 去年六月,我曾写下一篇博客介绍如何 借助 ServerChan 实现个人微信通知推送,在那篇文章中介绍了 ServerChan 及其使用方法,总的来说,对于简单的通知需求,使用 ServerChan 是非常简单有效的。但是实际使用起来&…

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

推送相关介绍 在用户未打开App时,服务端向用户推送服务器最新的消息数据,称为推送。消息推送在移动开发中用到的场景非常多,比如典电商类app的商品促销活动,资讯类的app的新闻推送等等。在实际开发中,我们常常会根据产…

关于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从…