APP进程关闭后,服务端如何推送消息到客户端

https://cloud.tencent.com/developer/article/1198269
https://cloud.tencent.com/developer/article/1155926

作为服务端的研发人员,要做好一整套的系统,就必须要了解某些客户端的知识点,比如推送,严格来讲,这个领域并不完全属于客户端。

带着问题去学习,收获会比较多。

问题

  1. 推送的边界到底在哪,目前我能想到的是两条路径,第一是通过第三方推送渠道,然后推送给手机上专门负责接收该推送消息的模块,该模块接收到消息后,弹出到通知栏。这里面就有个问题,如何通过点击通知栏的消息就可以进入程序的。还有,如何启动进程已关闭的app,另一条路径是通过服务端与app建立长连接,通过这个长连接服务端给客户端推送消息,客户端收到消息后,把内容写到通知栏,这样也有问题,第一,是否有写通知栏的权限,第二,app如何保活。
  2. 日常说的推送,是否是仅仅只通过第三方通道推送到客户端,而不包括服务端通过TCP长连接推送给客户端,这两种之间的关系是什么

概念:

push种类:

在线push

当用户在线(APP在前台)时,收到的状态栏的消息提醒,称为在线push。这个功能与手机系统无关,是我们自己的APP开发的一种功能,该push与设置中是否打开“通知”无关。

比如QQ,微信等IM界面处于前台时,聊天消息和指令都会通过IM自建的网络长连接通道推送过来
在这里插入图片描述

离线/远程push

当APP离线(kill掉进程、切到后台、锁屏)时,收到的消息提醒,称为离线push。离线push是需要经过苹果的APNs服务器才可以推送到某台设备的某个APP上的,这是和本地push的本质区别。push与设置中是否打开“通知”有关。
在这里插入图片描述
普通离线远程push:收到推送后(有文字有声音),点开通知,进入APP后,才执行
静默push:收到推送(没有文字没有声音),不用点开通知,不用打开APP,就能执行,用户完全感觉不到。
所以静默push又被我们称作Background Remote Notification(后台远程推送)。静默推送是在IOS7之后推送的一种推送方式。它与其他推送的区别在于运行应用收到通知后再后台(background)状态下运行一段代码,可用于从服务器获取内容更新。

本地push

本地推送和远程推送功能是一样的,都是要提醒用户去做某些事情。但是和远程推送不同的就是本地推送是不需要联网的,而远程推送是必须要设备联网的,因为只有联网状态下,才能和苹果的APNs服务器建立长连接,从而推送消息。本地推送是有APP自己设定的,并且发送给安装此App的这台设备,属于1对1的对应关系。比较典型的就是闹钟类型的场景。该PUSH与设置中是否打开通知有关
在这里插入图片描述
本地push与服务端关系不大,先不学习。

在线push流程

在线push流程
在线push相对简单,因为是内部实现,具体流程如下所示

  1. 判断app是否在线:此处可以根据APP自身的后台策略如上一次与后台交互的时间等方法来判断APP是否在线和离线。认为在线,会发在线push,否则,发送离线push.
  2. 在线push有以下几个特点:
    不需要经过苹果APNs
    需要自己实现长连接
    代码在app内部实现

离线(远程)push流程

在这里插入图片描述

主要流程为:
1)服务器端将消息先发送到苹果的APNs;
2) 由苹果的APNs将消息推送到客户的设备端;
3)有IOS系统将接收到的消息传递给相应的App.
简而言之离线push是苹果系统的行为,与app状态无关,能够直接推送到指定手机的指定app

离线push名词解释

  1. APNs : Apple Push Notification service(苹果推送通知服务)
    APNs主要用于以下场景:当用户主动杀掉APP,或者APP进入后台超过约定时长时,APP会被kill,这样保障了前台APP的流畅性,也 延长了手机的使用时长,获得了较好的用户体验,但是这也意味着,服务器无法主动与用户交互(如推送实时消息等),所以苹果推出了APNs,允许设备和服务器分别与苹果的推送通知服务器保持长连接状态。
    IOS 8以后,APNs推送的字节是2k,IOS8以前是256字节;
    IOS 9以后APNs支持HTTP/2协议栈,优化长连接,具有标准的HTTP返回和管道复用技术;
    IOS 10以后,推送的字节是4k,APNs可根据推送消息的唯一标识符查询某条消息是否被用户阅读,可更新某一个推送消息,而不用发重读的多条消息

  2. payload
    什么是payload?对于每一条发送给APNs的推送消息,都包含一个payload,通常是组成了一个JSON的Dictionary,这其中必不可少的是apns属性,他对应的value也是一个Dictionary,包含一些但不限于以下内容:标题、副标题、内容、附件、category等,如

{
    "apns": {
        "alert": {
            "title": "this is my title",
            "subtitle": "this is my subtitle",
            "body": "this is my body",
            "badge": 66
        }
    }
}

扩展,jwt中的payload: 后续详细学习RFC7519

  1. decive token
    APNs uses device tokens to identify each unique app and device combination。It also uses them to authenticate the routing of remote notifications sent to a device。

离线push详细流程
在这里插入图片描述
1)应用程序注册消息推送
2)IOS跟APNs server 要device token。应用程序接受device token;
3) 应用程序将device token发送给PUSH服务端程序;
4)服务端程序向APNs发送消息;
5)APNs服务将消息发送给iPhone应用程序

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值