PUSH消息推送的实现原理_腾讯新闻
编辑导语:如今,push已经成为了我们手机信息流的一种推广方式,那么push消息推送是如何实现的呢?作者总结了几种消息推送的类型以及实现原理,一起来看看。
一、消息推送的类型
1. 短信推送
指通过运营商将文本或数字消息传递至用户手机或其他电信终端。它凭借着优秀的发送率和到达率,一度成为最受欢迎的营销工具之一。
一般企业不太会直接对接移动、联通、电信来实现短信发送,而是通过中间的服务商将各地区的运营商资源整合后提供统一、便捷的短信服务,这类服务商叫短信服务商,也可叫短信SP。
目前,支持个人短信服务的厂商有阿里云、腾讯云,其他厂商都是需要认证为企业用户才能使用短信服务平台。短信供应商根据发送量进行收费,发送越多单价越便宜。
2. 邮件推送
EDM(Email Direct Marketing),即电子邮件营销。企业可以通过EDM建立同目标顾客的沟通渠道,向其直接传达相关信息,用来促进销售。邮件推送具有精准送达、个性化定制、内容格式丰富的特点。亚马逊就曾凭借优秀的电子邮件营销出圈。
3. 微信消息推送
4. 通知栏推送
通知栏推送,也被称为PUSH推送,即在手机终端锁屏状态下通知栏展示或在操作前台顶端弹出的消息通知。用户可以在移动设备锁定屏幕和通知栏看到push消息通知,通知栏点击可唤起APP并去往相应页面。
5. 应用内推送
应用内推送常见的形式有弹窗、顶部悬浮通知、收件箱等,可由应用自行控制样式和内容格式。不足的是只能在用户在线时查看,触达有限。
二、移动推送的三种实现方式
在本篇文章中主要介绍通知栏推送的实现方法。在了解具体的推送原理之前,我们先来了解下移动推送的三种实现方式。
1. 轮询方式(PULL)
客户端和服务器定期地建立连接,通过消息队列等方式来查询是否有新的消息,需要控制连接和查询的频率,频率不能过慢或过快,过慢会导致部分消息更新不及时,过快会消耗更多的资源(流量、电量等),对用户体验有较大伤害。
2. 短信推送方式(SMS PUSH)
通过短信发送推送消息,并在客户端植入短信拦截模块(主要针对 Android 平台),可以实现对短信进行拦截并提取其中的内容转发给 App 应用处理,这个方案借助于运营商的短消息,能够保证最好的实时性和到达率,但此方案对于成本要求较高,开发者需要为每一条 SMS 支付费用。
3. 长连接方式(PUSH)
客户端主动和服务器建立 TCP 长连接之后, 客户端定期向服务器发送心跳包用于保持连接, 有消息的时候, 服务器直接通过这个已经建立好的 TCP 连接通知客户端。
尽管长连接也会造成一定的开销,对于轮询和 SMS 方案的硬伤来说,目前已经是最优的方式,而且通过良好的设计,可以将损耗降至最低。不过,随着客户端数量和消息并发量的上升,对于消息服务器的性能和稳定性要求提出了非常大的考验。因此,就难度而言,此方式代价最高。
基于上面的介绍,我们可以知道长连接方式是移动推送中目前最优的方案,它也是当前主流的推送方式,基于该推送方式逐步发展出系统级、应用级一系列的推送解决方案。
三、系统级推送解决方案
1. iOS 平台(APNs)
iOS 在系统层面与苹果 APNs(Apple Push Notification service)服务器建立连接,不论App是在线状态还是离线状态,消息推送至iOS的APNS服务器,APNS再根据设备标识推送至指定设备,用户即可接收到消息。
大致链路为:业务系统(发起推送)——第三方消息推送服务商或自建消息推送系统的服务器(推送逻辑控制、推送下发)——苹果APNS服务器——指定用户设备。
整个过程很清晰,并且所有 APP 都共用同一个系统级的连接,减少了系统开销,虽然 APNs 能无障碍的访问,但实际使用过程中,也会存在延时和丢消息的情况。
2. Android 平台
Android 的 C2DM(Android Cloud to Device Messaging)采取与 iOS 类似的机制,都是由系统层面来支持消息推送,但是由于 Google 的服务在国内不能稳定的访问,此方案对于中国用户来说基本是无法使用的。
除了 Google 官方提供的方案,中国众多的手机厂商在其定制的系统中也内置了推送功能,如小米、华为等。不过在建立推送服务之前,需要申请开发者账号并绑定App,在开放平台开通厂商通道推送的权限。这类厂商机型支持在线离线状态的消息推送。
消息推送大致链路为:业务系统(发起推送)——第三方消息推送服务商或自建消息推送系统的服务器(推送逻辑控制、推送下发)——厂商服务器——指定用户设备。
四、应用级推送解决方案
1. 第三方推送服务
鉴于 Android 平台 C2DM 推送的不可用性,国内涌现出大量的第三方推送服务提供商。目前应用最为广泛的第三方推送服务提供商包括个推、极光、友盟、小米、华为、BAT 等,绝大部分 APP 都会优先考虑采用第三方推送服务。
2. 自建推送服务
第三方服务在开发成本和消息到达率上表现都不错,但所有信息会经过第三方服务器,对于信息敏感类 APP 而言,有必要考虑自建一套消息推送服务,能最大化保证安全,但自建推送服务需要对 App 客户端海量长连接的维护管理且面临保证 Push Service 常驻的难题等。
五、PUSH推送实现方法总结
综合以上分析,推送实现方式可以简单概括为:
PUSH消息在消息系统创建好后进入发送阶段,服务端根据用户终端信息进行路由,调用苹果自身的推送通知服务(APNs)或根据根据不同的安卓厂商去调用对应的SDK,最后下达到用户设备。
当然,如果是通过之前说过的个推、极光等推送服务商,那么内部的服务端就无需做这些繁琐的开发工作。他们不仅集成了APNS、小米、华为等大部分厂商通道,还可覆盖微信公众号、微信小程序、短信、邮件、支付宝生活号、钉钉 、企业微信、5G消息、飞书等,同时在补发策略、数据监控等层面也有较为成熟的方案。
话又说回来,对于产品经理来说,上述内容只需要了解就可以了,我们更关注的还是如何利用推送提升业务转化和用户体验。至于你问我那为什么还要写,当你从0搭建一个app时,就能感同身受了。
本文由 @公众号阿宅的产品笔记 原创发布于人人都是产品经理。未经许可,禁止转载。
题图来自Unsplash,基于CC0协议。
通过短信发送推送消息,并在客户端植入短信拦截模块(主要针对 Android 平台),可以实现对短信进行拦截并提取其中的内容转发给 App 应用处理,这个方案借助于运营商的短消息,能够保证最好的实时性和到达率,但此方案对于成本要求较高,开发者需要为每一条 SMS 支付费用。客户端和服务器定期地建立连接,通过消息队列等方式来查询是否有新的消息,需要控制连接和查询的频率,频率不能过慢或过快,过慢会导致部分消息更新不及时,过快会消耗更多的资源(流量、电量等),对用户体验有较大伤害。
在实现
消息
推送
之前先提及几个于
推送
相关概念,如下图1-1:
1、Provider:就是为指定IOS设备应用程序提供
Push
的服务器,(如果IOS设备的应用程序是客户端的话,那么Provider可以理解为服务端[
消息
的发起者]);
2、APNS:Apple
Push
Notification Service[苹果
消息
推送
服务器];
3、iPhone:用来接收APNS下发下来的
消息
;
4、Client App:IOS设备上的应用程序,用来接收iphone传递APNS下发的
消息
到制定的一个客户端 app[
消息
的最终响应者];
上图可以分为三个阶段:
阶段一:Provider[服
文章目录前言一、来自小组的争议二、开启调查三、调查结果总结
第三方
移动
推送
对接,刚开始是移动端发起的。在开会讨论这个对接时,心里突然很迷茫,为什么要做
第三方
移动
推送
对接?我们自己为什么不能做移动
推送
?
话说,项目里目前所使用的
推送
就是自己做的。但是在App离线情况下,
消息
就收不到了。想起来了,这是最最重要的问题,是为了在离线的情况下,App还能收到通知和
消息
。如果不是因为这个,这个对接可以不做。
因为手机端的app层不出穷太多了,为了给手机省电,用户会主动把运行在前端的app给咔嚓掉…虽然咔嚓掉,但是
在实现
消息
推送
之前先提及几个于
推送
相关概念,如下图1-1:
1、Provider:就是为指定IOS设备应用程序提供
Push
的服务器,(如果IOS设备的应用程序是客户端的话,那么Provider可以理解为服务端[
消息
的发起者]);
2、APNS:Apple
Push
Notification Service[苹果
消息
推送
服务器];
3、iPhone:用来接收APNS下发下来的
消息
;
4、Client App:IOS设备上的应用程序,用来接收iphone传递APNS下发的
消息
到制定的一个客户端app[
消息
的最终响应者];
上图可以分为三个阶段:
阶段一:Provider[服务端
文章目录1. 基本概念2. iOS和Android
消息
推送
原理对比2.1 iOS2.2 Android3. Android
消息
推送
原理3.1 操作系统有自身的
消息
推送
功能(系统级别)3.2 三种基本的
推送
方式:
Push
、Pull 和 SMS3.3 七种主流的Android
消息
推送
方式
1. 基本概念
目的: 在用户未打开App时,App主动向用户
推送
服务器最新
消息
基本原理: 服务器如何先找到...
通常在web前端通知客户的时候,一种方式是通过Http/Https轮询来实现,另外一种方式是通过WebSocket 这种轻量Tcp连接来实现,我们这边介绍的就是
消息
推送
。
Http+WebSocket 原理解析
方案的实现
前端实现webSocket 的方式如下两种方式仅供参考:
第一种一种是使用sockjs。
第二种是使用h5的标准。使用Html5标准自然更方便简单,所以记录的是配合h5的使用方法。
index.html
<!DOCTYPE html>
推送
通知,是现在的应用必不可少的功能。那么在 iOS 中,我们是如何实现远程
推送
的呢?iOS 的远程
推送
原理又是什么呢?在做 iOS 远程
推送
时,我们会遇到各种各样的问题。那么首先让我们准备一些做
推送
需要的东西。我们需要一个付费的苹果开发者账号(免费的不可以做远程
推送
),有了开发者账号,我们可以去苹果开发者网站,配置自己所需要的
推送
的相关证书。然后下载证书,供我们后面使用,详细的证书配置过程,我们下面再说。
首先我们要说说iOS
推送
通知的基本原理:
苹果的
推送
服务通知是由自己专门的
推送
服务器APNs (Apple
Push
Notification service)来完成的,其过程是 APN
App
消息
推送
的
实现原理
涉及到客户端和服务器之间的交互。以下是一般的实现流程:
1. 客户端注册设备:当用户安装并打开App时,客户端会向
推送
服务器注册设备,获取一个唯一的设备标识(Device Token)。
2. 设备与
推送
服务器建立连接:客户端会与
推送
服务器建立长连接,以便实时接收
推送
消息
。
3. 服务器发送
推送
消息
:当有需要发送
消息
给用户的时候,服务器会将
消息
发送到
推送
服务器。
4.
推送
服务器发送
消息
到设备:
推送
服务器根据设备标识将
消息
发送到对应的设备。
5. 设备接收
消息
并展示:设备接收到
推送
消息
后,会根据
消息
内容进行展示,例如在通知栏显示通知、弹出提示框等。
需要注意的是,
推送
服务器一般使用了一些特殊的技术来实现
消息
的传递,如苹果的APNs(Apple
Push
Notification service)和谷歌的FCM(Firebase Cloud Messaging)。这些技术能够保证
消息
的可靠传递,并且支持各种设备平台。
总结起来,App
消息
推送
的
实现原理
主要包括设备注册、长连接建立、
消息
发送和设备接收等步骤。这样可以实现实时、可靠地将
消息
推送
给App用户。