即时消息技术剖析与实战
袁武林
微博研发中心技术专家
24187 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 25 讲
即时消息技术剖析与实战
15
15
1.0x
00:00/00:00
登录|注册

16 | APNs:聊一聊第三方系统级消息通道的事

不支持累计+1操作
无法保障离线消息的存储
无法保证消息到达率和不发生延迟
可以悄无声息地唤醒App进行更新操作
没有文字弹窗、声音或角标
远程系统推送类型
JSON格式的字符串
包括消息内容和推送相关的方式等数据信息
提升消息的到达率
支持通过运营商的信令通道进行消息下推
角标累加问题
离线消息的支持差
可靠性低
静默推送
Payload
用户点击通知唤醒App进行交互活动
APNs推送消息到接收方用户的iOS设备端
Provider发送消息到APNs
固定不变,除非iOS系统升级或APNs禁用
作为当前连接设备的唯一标识进行系统消息的推送
用于区分识别不同iOS设备同一个App的唯一标识
保证消息在App关闭或网络功能被限制的情况下发送到接收人的设备
与设备的公共长连接
推必达产品
复杂和混乱的推送接入
SDK支持
提供类似APNs的功能
缺陷
消息类型
消息推送流程
DeviceToken
系统级下发通道
生态混乱
功能不完善
可靠性低
重要性
提升消息到达率的重要途径
统一推送联盟
厂商通道
APNs
静默推送支持的“唤醒App在后台运行”功能的应用场景
业界现状和进展
普适性很强的技术
作为自建长连接推送通道的补充
系统推送通道
即时消息场景
Android系统
iOS系统
思考题
总结
应用场景
第三方系统级消息通道
APNs

该思维导图由 AI 生成,仅供参考

你好,我是袁武林。
前面几节课里,我讲到在即时消息场景下,我们会依赖服务端推送技术来提升消息到达的实时性,以及通过各种手段来保证消息收发通道的可用性,从而让消息能尽量实时、稳定地给到接收人。
但在实际情况中,出于各种原因,App 与服务端的长连接会经常断开。比如,用户彻底关闭了 App,或者 App 切换到后台一段时间后,手机操作系统为了节省资源,会杀掉进程或者禁止进程的网络功能。在这些情况下,消息接收方就没有办法通过 App 和 IM 服务端的长连接来进行消息接收了。
那有没有办法,能让消息在 App 被关闭或者网络功能被限制的情况下,也能发送到接收人的设备呢?答案是:有。
现在手机常用的 iOS 和 Android 系统,都提供了标准的系统级下发通道,这个通道是系统提供商维护的与设备的公共长连接,可以保证在 App 关闭的情况下,也能通过手机的通知栏来下发消息给对应的接收人设备。而且,当用户点击这些通知时,还能重新唤醒我们的 App,不仅能提升消息的到达率,还增加了用户的活跃度。

第三方系统下发通道

常见的第三方系统下发通道,有 iOS 端的 APNs,以及 Android 端的 GCM 和厂商系统通道。
iOS 端的 APNs(Apple Push Notification service,苹果推送通知服务),是独立于应用之外,依托系统常驻进程来维护和苹果服务器的公共长连接,负责全局的系统推送服务。
在 Android 端上,有 Google 的 GCM(Google Cloud Message,Google 云消息传递)。但 GCM 由于某些技术原因(如 NAT 超时太长、暴露的 5228 端口连通性差等)和某些非技术原因(需要和 Google 服务器建立连接),Android 端的 GCM 在国内被大部分手机厂商定制化后直接去掉,并替换成了各自的系统通道。目前国内 Android 的系统级下发通道基本都是厂商通道,目前已知的有 5 家:小米、华为、vivo、OPPO、魅族。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

APNs是iOS系统提供的系统级下发通道,能够在App关闭或网络功能受限的情况下,通过系统通知栏将消息推送给用户设备。然而,APNs存在一些缺陷,如可靠性低、无法保证消息的到达率和延迟。对于Android端来说,各个手机厂商各自维护的厂商通道提供系统推送服务,但整体上看,Android端的推送接入比较复杂和混乱。为解决这种混乱状况,工信部主导成立了安卓统一推送联盟,推出了“推必达”产品,支持通过运营商的信令通道来进行消息下推,提升消息的到达率。文章还介绍了静默推送的特点以及系统推送的业界现状和进展。总的来说,系统推送作为一种常用的触达用户的方式,对于即时消息场景来说是提升消息到达率的一条非常重要的途径,但仍存在可靠性低、功能不完善、生态混乱等问题。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《即时消息技术剖析与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(18)

  • 最新
  • 精选
  • GeekAmI
    “一般情况下,我们的 IM 服务端可以在每次启动 App 时,都去请求 APNs 服务器进行注册,来获取 DeviceToken。” 老师,这句话不太理解,到底是App去APNs获取DeviceToken,还是IM服务端获取呢?

    作者回复: app去APNs获取devicetoken,如果发生了变化再由app上报给im服务器进行记录。

    2019-11-11
    5
  • 老师,Apple除了静默推送,还有更可靠的Voip 推送哦

    作者回复: 👍

    2019-11-21
    2
  • clip
    “DeviceToken 是 APNs 用于区分识别不同 iOS 设备同一个 App 的唯一标识” 是“不同 iOS 设备不同 App”吗?

    作者回复: devicetoken只是识别设备的哈,每台设备的devicetoken都不一样。

    2019-10-03
    4
    2
  • 谢炳辉
    怎么理解 因此在没有 WiFi 和移动网络的场景下,我们只要有手机信号就能推送 不是有信号就有网络了吗

    作者回复: 这里说的是某些场景下手机没有网络信号,只有通信信号,也就是能打电话能收短信但是上不了网。

    2019-11-15
    1
  • GeekAmI
    静默推送是不是可以这样搞? 静默推送->唤起app->重新建立长连接通道->服务端通道长连接通道下达消息。

    作者回复: app在后台被静默推送唤醒后只有30s的后台运行时间,所以建立长连后可能也会很快再被掐断。可以考虑用来进行一些多媒体消息的后台预拉取。

    2019-11-11
    1
  • 小可
    app后台自动升级(如果设置自动更新升级)

    作者回复: 嗯,这个应该是可行的。

    2019-10-02
    1
  • 白泗小林
    apns 的消息去重一般怎么做的?

    作者回复: APNs本身并不保证消息不重不丢,所以实际上很难控制,应用层面能做的只是尽量避免业务层面重复发送给APNs导致重复下推的问题。

    2019-10-31
  • Michael
    每台iPhone设备的的deviceToken都不一样,IM服务器给APNs推送消息数据需要带上deviceToken,但是IM Server是如何获取到设备的deviceToken的呢?

    作者回复: 课程中有讲到哈:一般情况下,我们的 IM 服务端可以在每次启动 App 时,都去请求 APNs 服务器进行注册,来获取 DeviceToken。正常情况下,客户端每次获取到的 DeviceToken 都不会变,速度也比较快。客户端在首次获取到 DeviceToken 之后,会先缓存到本地,如果下次获取到 DeviceToken 后,它没有发生变化,那么就不需要我们再调用 IM 服务端进行更新了。这也算是个小技巧。

    2019-10-20
    2
  • Michael
    思考题:可以唤起app,重新建立长连接。

    作者回复: 嗯,这个是比较常见的用法。

    2019-10-04
  • 刘丹
    请问如果发送方使用小米的推送服务,那么非小米手机怎样接收到消息呢?竞争品牌可能不允许在手机里安装小米的拉取软件。

    作者回复: 一般这些推送服务是已sdk的方式集成到你自己的app里,推送不是独立存在的一个app。另外,这个得看下小米的推送服务是否有集成接收方手机的厂商sdk,如果有,那应该是没问题的,如果没有,估计厂商很难让第三方推送服务的长连接运行。

    2019-10-02
收起评论
显示
设置
留言
18
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部