Android端推送消息之极光推送

Android端推送消息之极光推送_第1张图片

推送方式

轮询

--实现方式: 周期性主动获取网络中的数据;

--缺点: 费电, 费流量;

SMS

--实现方式: 服务器端向手机端发送短信, 手机监听短信广播, 将拦截的短信信息进行显示;

--优点: 省电, 省流量, 在没有网络的偏远地点也能接收到推送消息;

--缺点: 费钱, 一毛钱一条;

长连接

--实现方式: 手机端与服务器端建立一条长时间的数据流连接, 手机客户端一直等待服务器端的数据;

--优点: 有一条长连接, 有数据的时候才发送数据, 没有时不消耗流量, 比较省流量;

--缺点: 由于要保存一条长连接, 比较费电; 在网络不稳定的情况下, 推送容易失败;

短连接与长连接

--短连接:例如普通的web请求,在三次握手之后建立连接,发送数据包并得到服务器返回的结果之后,通过客户端和服务端的四次握手进行关闭断开。适用于网页浏览等数据刷新频度较低的场景。

--长连接:区别于短连接,由于三次握手链接及四次握手断开,在请求频繁的情况下,链接请求和断开请求的开销较大,影响效率。采用长连接方式,执行三次握手链接后,不断开链接,保持客户端和服务端通信,直到服务器超时自动断开链接,或者客户端主动断开链接。适用于客户端和服务端通信频繁的场景,例如聊天室,实时游戏等。

连接断开

外界原因

断电,服务器宕机等

NAT超时

IP v4 的 IP 量有限,运营商分配给手机终端的 IP 是运营商内网的 IP,手机要连接 Internet,就需要通过运营商的网关做一个网络地址转换(Network Address Translation,NAT)。简单的说运营商的网关需要维护一个外网 IP、端口到内网 IP、端口的对应关系,以确保内网的手机可以跟 Internet 的服务器通讯。

大部分移动无线网络运营商都在链路一段时间没有数据通讯时,会淘汰 NAT 表中的对应项,造成链路中断。

长连接心跳间隔必须要小于NAT超时时间(aging-time),如果超过aging-time不做心跳,TCP长连接链路就会中断,Server就无法发送Push给手机,只能等到客户端下次心跳失败后,重建连接才能取到消息。

其他原因

心跳与轮询

主机在检查与从机之间的连接(判断与从机之间的连接是否断开)时,一般有心跳与轮询这两种方式。这两个方式都需要主机定时逐个查询从机的状态,但它们的策略有所不同。

在轮询方式中,主机逐个查询的方式是主动向从机发送一条查询信息,然后根据从机的应答情况来判断从机的状态。比方说,主机要求从机返回一个状态码来代表当前从机所处的状态,但如果从机没有应答,就认为与从机之间的连接已经断开。

在心跳方式中,主机逐个查询的方式是直接从一种状态信息表中查询,此状态信息表上记录了所有从机的状态信息,而此状态信息表是由各个从机自己主动去更新的。如果有从机长期没有去更新此表,就认为与该从机之间的连接已经断开。

可以看出,相对于轮询,心跳方式避免了主机等待各个从机应答的过程,从而减轻了主机的压力,在遇到从机数量庞大的情况,往往采用心跳方式。

实现方案

C2DM

全称 Cloudto Device Messaging, Google 提供的 推送解决方案;

--运行方式: 提供一个轻量级机制, 允许服务器通知应用程序, 主动与客户端进行数据交互, 处理消息排队, 并向运行于目标设备的应用程序分发消息;

--优点: Google 提供的原生框架, 无需在应用中添加第三方代码 和 部署服务器端;

--缺点: 1.该推送依赖 Google 服务器, 需要绑定 Google 帐号, 目前在中国 Google 被屏蔽, 无法使用; 2. 许多手机厂商去掉了软件中的该模块;

--运行机制图:

Android端推送消息之极光推送_第2张图片

基于XMPP的AndroidPN

--XMPP 简介: 全称 Extensible Messaging and Presence Protocol (可扩展通讯和表示协议), 基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测, 该协议允许因特网用户向因特网上的其他任何人发送即时消息;

--AndroidPN: 基于 XMPP 协议开发的 Java 开源 Android 推送通知实现, 包含了完整的客户端 和 服务器端;

--项目主页: http://sourceforge.net/projects/androidpn/ ;

--原理图Android端推送消息之极光推送_第3张图片

极光推送

 功能概述

极光推送基本功能:主动即时的向用户发起交互, 可以发送聊天消息;

--作用: 通过向精准的目标用户推送有价值的消息, 可以提供用户忠诚度, 提高留存率;

1. 推送方式

推送方式简介:

--通知: 推送文本内容, 展示在通知栏中;

--自定义消息: 推送自定义消息, 给用户自行处理;

--富媒体: 推送 HTML 页面内容;

2. 推送目标

推送目标简介:

--广播推送: 向所有用户发送广播消息;

--标签推送: 根据用户设置的标签分组, 向某一组推送消息;

--别名推送: 客户端绑定用户别名, 向单个用户推送信息;

3. 用户分群

用户分群简介: 可以根据 JPush 提供的多条件组合, 对用户进行群组划分, 实现实时筛选推送;

4. 推送历史

推送历史简介: 通过 WEB 或者 API 发出的推送, 都可以在推送历史记录中查询到, 并可以实时显示推送结果;

推送框架

推送框架:

--推送数据源: 自己开发的服务器端 或者 使用 极光推送官网的 WEB 后台;

--JPush API: 部署在服务器端, 开发者的服务器端发起推送时, 将数据传到 JPush API 中, 然后再向下传递;

--建立长链接: 集成 JPush 的 SDK 客户端启动后会建立一个到 JPush Cloud 的长链接, 提供 App 永远在线的能力;

--原理图:

Android端推送消息之极光推送_第4张图片

极光推送原理

1. 客户端原理

IP地址 分配原理:

--IP 地址有限: IPv4 的 IP 地址数量有限, 运营商要动态地为 手机分配 IP 地址, 这些 IP 地址都是运营商的内网 IP;

--网络地址转换 (NAT): 全称 Network Address Translation, 网关维护一个外网 IP 地址, 与 内网 IP 地址对应;

--外网 IP 不固定: 由于运营商持有的外网 IP 数量有限, 需要动态的分配给接入运营商的用户, 因此在手机一段时间没有数据传输时会将该手机分配的外网 IP 地址收回, 分配给其它用户;

--解决方案: Android 手机端想要保持长链接, 首先外网 IP 地址不能变, 不能让运营商收回 这个 IP 地址;

Android 手机端实现方案:

--心跳: 为了长时间保持外网 IP, 需要客户端定期发送心跳给运营商, 以便刷新 NAT 列表;

--Timer 定时方法: 该类计划循环执行定时任务, 但是使用该类会使 CPU 保持唤醒状态, 比较费电;

--AlarmManager 定时方法: 该类封装了 Android 手机的 RTC 硬件时钟模块, 可以在 CPU 休眠时正常运行, 定时任务执行时再唤醒 CPU, 这样做到了电量节省;

2. 服务器原理

C10K 问题: 单台服务器解决 同时保持一万长链接的性能问题;

 Android SDK 简介

Android SDK 本质: JPush SDK 集成到 Android APP 中后,作为一个 Service 在 Android 端长期运行, 始终与 服务器端 保持者长链接, 相当与永远在线;

1. 多平台支持

多平台支持:

--手机芯片类型: 一般的手机是 ARM 芯片, 但是有些手机是 MIPS 芯片 或者 x86 芯片

--so 库支持: 每个 CPU 芯片类型对应的 so 库, 都需要特殊编译, 无法跨平台调用, 如 ARM 平台的 so 库在 x86 平台就无法运行;

2. 电量与流量说明

流量消耗: JPush 的协议是自定义的, 协议的数据量经过了精简, 流量消耗非常少;

电量消耗: JPush 心跳保持连接时可以在 CPU 不唤醒的情况下执行, 减少了不必要的代码运行, 电量非常节省;

3. 相关库说明

JPush 依赖库:

--.so 依赖库内容: JPush 需要一个 so 动态库, 该库是 C 语言编写, 在 Linux 下进行交叉编译而来, 可以在 ARM 芯片的手机上运行;

--jar 依赖库内容: 对 Java 代码的封装;

集成教程

登录 · 天智AgileTeam

1.推送名词解释

https://go48pg.yuque.com/go48pg/pa41sm/xzqqgm?#%20%E3%80%8A%E6%8E%A8%E9%80%81%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A%E8%AF%B4%E6%98%8E%E3%80%8B

2.对接指南

https://go48pg.yuque.com/go48pg/pa41sm/dmq2dw?#%20%C2%A0%E3%80%8A%E6%9E%81%E5%85%89%E6%8E%A8%E9%80%81%E9%9B%86%E6%88%90%E6%8C%87%E5%8D%97%E3%80%8B

3.客户端集成插件

极光文档

排错文档

  1. 使用排查工具

https://go48pg.yuque.com/go48pg/pa41sm/dx53wi?#%20%E3%80%8A%E6%8E%92%E6%9F%A5%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E%EF%BC%88%E6%B6%88%E6%81%AF%E6%9F%A5%E8%AF%A2%EF%BC%89%E3%80%8B

  1. 若查询通知已经抵达设备但是没有看到展示

https://go48pg.yuque.com/go48pg/pa41sm/qy4fle?#%20%E3%80%8A%E9%80%9A%E7%9F%A5%E5%B1%95%E7%A4%BA%E7%9B%B8%E5%85%B3%E9%97%AE%E9%A2%98%E3%80%8B

  1. 若以上两步仍未解决,请提供:appkey、msgid 和 regid 至客服

https://go48pg.yuque.com/go48pg/pa41sm/ruxieh?#%20%E3%80%8ARid&msgid&Appkey%E8%8E%B7%E5%8F%96%E5%8A%9E%E6%B3%95%E3%80%8B

4S

Safe(安全),Stable(稳定),Save(省电省流量省成本),Slim(体积小);

Safe

推送安全标准

--透明传输: 只负责点对点的传输的质量, 不关心中间的传输介质 与 传输业务逻辑 协议等;

--加密方案: 信息需要加密, 另外推送的 ID 系统需要独立与后台已有的 ID 系统;

Stable

服务器稳定: 长链接方案对服务器开销要求很高, 服务器端开发难度很大;

--在线峰值: 同时在线连接数到达100万的稳定性;

--并发时延: 高并发时的消息平均延迟, 一分钟处理 100万 条数据;

--服务器稳定: 稳定性时延占总时间的 99.9%, 有备份和负载均衡的机制;

客户端稳定: 中国网络状况复杂, 手机长时间联网比较难, 稳定性比较难, 开发时要考虑每个省的每个运营商, 每款手机的机型

--联网时间: 每日联网时间 23.5 小时以上;

--消息到达率: 消息收到后 9 小时内客户端的消息到达率;

Save

节省评判:

--电量节省: 注意 CPU 休眠率, 服务短待机时间百分比评判;

--流量节省: 处理协议 和 冗余数据包, 使用空载待机月流量评判;

--成本节省: 单服务器同时承载连接数, 同时承载连接数越多, 成本越低, 个推单服务器连接 300 万(业内顶尖水平);

Slim

集成 SDK 大小: 客户端推送的 SDK 的大小尽量小, 一般要小于 300K;

你可能感兴趣的:(微信小程序,网络,服务器,前端,阿里云)