1.前言
- 作为一个非原生App的开发者,对于手机系统的推送机制了解是是非有限的,只有了解清楚这些机制,后期的开发才会少踩很多坑,本文将对推送机制逻辑进行一个简单的梳理与记录
2.推送流程
- 推送流程1.0:后台服务器 -> 推送服务器(第三方) -> 手机App
- 推送流程2.0:后台服务器 -> uni-cloud -> 推送服务器(第三方) -> 手机App
3.推送服务器
- 为什么后台不直接推送消息给手机App,而是要转交给第三方推送服务器呢?这里举两个例子:
- 1.假设有一条消息需要同时推送给10000个人,那么这条消息就有10000个状态,推送成功的人将不再推送,而推送失败的人将会一直持续推送,直到成功为准,所以需要写一套专门的算法来处理这套逻辑
- 2.消息需要推送给具体的某台手机,那么每个人就需要为每台手机分配一个独一无二的标识,根据这个标识定位到目标手机,然后才能进行推送,而给每台手机分配一个独一无二的标识,也需要一套算法
- 3.手机App想要实时接受消息,必须开启一个专门的进程实时在线,这个内嵌在App内部的进程也需要进行开发
- 就像淘宝卖家不会自己组建一个物流团队一样,一般的软件开发者也没必要去开发这套逻辑,第三方软件推送服务商提供专门的推送服务,无论研发能力,产品功能与稳定性都远超自己开发,需要推送时直接选择他们即可
3.App的运行状态
- App在线状态:第三方推送服务商的消息能正常推送
- App离线状态:第三方推送服务商无法推送,此时再想必须依靠系统底层的能力,手机厂商像小米,华为等都完成了系统级别的推送支持,但是他们各自为阵,需要每个厂家进行适配,所谓适配,就是每个厂家都开通开发者账号进行注册
- App现状1:为了省电,手机系统会对通常后台程序进行清理查杀,很少有App能常驻后台
- App现状2:现在的手机系统严格控制App自启动,链式启动,App无法像之前一样通过流氓手机强制驻留后台,所以App现状就是,只有App前台展示期间,或者刚退回桌面的前几分钟是在线状态,其余时间都是离线状态
4.安卓App如何保持在线状态
- 调整App省电策略:以MIUI为例,长按App图标 => "应用信息" => "省电策略" => "无限制"
- 允许自启动:以MIUI为例,长按App图标 => "应用信息" => "自启动" => "开启"
- 原生安卓系统:手持pda搭载原生安卓系统,不会杀后台
5.消息类别
- 消息类别分为通知消息和透传消息
- 通知消息:由系统接管,在通知栏弹出消息,点击后启动App,支持在线与离线
- 透传消息:消息直达App,只支持在线,App可接收后自动创建本地通知