米推(MiPush)简述

小米推送是小米公司为应用开发者提供的免费推送服务。帮助应用保持与用户的联系,将信息实时送达到用户,让用户可以更快的获取信息。小米推送的最大特征是省电,简单,可靠,安全。

1)小米推送的背景和历史

我们使用IOS刷微博的时候,接收到了一条微信,这个时候,系统会有通知,告诉你收到一条微信,但是此时,微信并没有在后台启动,当你决定打开微信时,这时候微信才会在你的后台启动,但是当我们使用android刷微博的时候,这时候我们接收到了一条微信,这个时候,微信会自己启动,将消息推送给你这就是为什么IOS比Android省电的原因,安卓的应用,都会独立的启动,来推送自己的消息,但是IOS的推送是通过Push来统一实现的,为了解决这一问题,MIUI V5就创立了对齐唤醒机制,这就是小米推送的历史。
我们使用IOS刷微博的时候,接收到了一条微信,这个时候,系统会有通知,告诉你收到一条微信,但是此时,微信并没有在后台启动,当你决定打开微信时,这时候微信才会在你的后台启动,但是当我们使用android刷微博的时候,这时候我们接收到了一条微信,这个时候,微信会自己启动,将消息推送给你这就是为什么IOS比Android省电的原因,安卓的应用,都会独立的启动,来推送自己的消息,但是IOS的推送是通过Push来统一实现的,为了解决这一问题,MIUI V5就创立了对齐唤醒机制,这就是小米推送的历史。

MIUI 通过对唤醒机制的对齐,使得耗电量对于原声安卓有了质的提升。

2)小米推送概述

小米推送(MiPush)是小米公司向开发者提供的消息推送服务,通过在云端与客户端之间建立一条稳定、可靠的长连接,为开发者提供向客户端应用实时推送消息的服务。小米推送服务能有效地帮助开发者拉动用户活跃度,改善产品体验。

应用案例及场景

如何保证消息的实时性(以新闻类应用为例)

使用场景:在发生重大新闻事件时,新闻类应用希望将新闻信息以最快的速度传递给用户,同时也希望这条新闻是有“保鲜期”的,用户明天再联网不应该看到昨天的新闻推送。
因此,推送服务在这样的场景下需要保证消息的实时性,永远给用户最快最新的信息。

解决方法:小米推送采用长连接的方式,确保消息能实时推送到客户端,只要用户设备网络正常,消息就能快速送达。同时,开发者对于每条消息都可以单独设置有效期,消息有效期内未联网的用户上线后不会收到过期的消息,保证了用户收到的新闻推送永远是最新的信息。
今日头条此类新闻类应用正是通过这样方式使用小米推送,保证了新闻推送的实时性。

如何精准推送,避免打扰(以O2O类应用为例)

使用场景:O2O类应用为用户提供的信息很多情况下是本地化的信息,如果将A城的餐馆打折信息推给B城用户显然是打扰B城用户的无效信息。

因此需要推送服务提供精准推送的能力,让消息可以精准地触达目标用户。

解决方法:小米推送提供了标签的功能帮助开发者实现精准推送的目标。以上面的场景为例,开发者可以将A城的用户统一打上“A城”的标签,在需要推送A城的餐馆打折信息时,使用基于标签推送的功能,可以指定向拥有“A城”标签的用户进行推送。这样该城的用户就能及时收到这条消息,并且不会打扰其他区域的用户。

大众点评等拥有本地服务的O2O类应用都在以类似的方式使用小米推送。

3)小米推送服务作用

1.促进用户活跃,增强用户黏性
通过云和端之间建立的长连接,开发者可以实时地将消息推送到用户设备端。只要用户设备网络畅通,就能随时唤醒用户,保持与用户的沟通,大大提升用户活跃度和留存率。

2.节约推送成本
小米承诺提供永久免费的推送基础服务,开发者不需要投入大量时间、人力和服务器资源来开发和维护到客户端的长连接,免去了应用实现推送功能所增加的成本。

3.稳定安全的推送
依托强大的服务器集群,以及多年在手机即时通讯领域的技术积累,小米在消息推送服务这一领域有着丰富的经验和雄厚的实力。在保证推送消息的到达率及到达速度的同时,我们还设计了一套基于业界最高标准加密算法的安全措施,让应用消息的传输更加安全可靠。

4)小米推送服务的工作原理

如上图所示,通过小米推送服务,应用可以从服务器向它的用户发送推送消息。推送服务负责把这些消息排队和转发给目的手机上的目的应用。如果目的手机在线上,则推送服务会把这些消息直接下发给目的手机,否则会把它们存为离线消息保存一段时间,等到手机上线再下发给它。

典型例子

1 对1 的单点推送

小米推送服务支持 手机应用服务器向它的某一个用户或者某几个用户发送消息。应用服务器有2 种方式指定该用户或者用户列表:

1) 通过让客户端调用客户端sdk 的setAlias()来设定一个客户端与服务器之间约定的别名(alias)。服务器就可以用服务器端sdk 的sendToAlias()方法向该别名对应的客户端发送消息。通常可以把别名设置为是手机应用的用户在系统里的账号名。

2) 当客户端调用客户端sdk 的initialize(),等推送初始化成功之后,客户端sdk 的回调接口MiPushClientCallback 会被调用,其中一个返回结果是regID,注册ID。服务器可以调用服务器端sdk 的send()方法向该regID 对应的客户端发送消息。这种方法能给应用服务器更大的灵活性,性能和安全性也更高。但是,要求客户端把注册ID上传给应用服务器,开发复杂度更高。

基于订阅 /发布模式的广播推送

小米推送服务支持 手机应用服务器向它的某个用户群体发送消息。通过让客户端调用客户端sdk 的 subscribe(topic),某个手机上的用户可以指示服务器他对一个特定的 topic 主题做订阅,即加入以主题为标示的用户群体。以后应用服务器就可以调用服务器端 sdk的broadcast(topic)来向该用户群体发布消息了。

5)小米推送服务的工作流程和安全机制

上图描述了小米推送服务的工作流程和端到端如何保证数据安全。

1) 在使用推送服务之前, 开发人员必须通过 1~3 步在小米开发者网站http://developer.xiaomi.com/注册自己的应用。如果注册成功则获得相应的 appid,app key和app secret.利用这些信息应用服务器就可以给自己的应用推送消息了。

2) 第4~6 步描述了推送通道的激活过程。这个过程由小米推送服务的 SDK 实现,对上层应用服务器和应用客户端都是透明的。大致流程是:小米手机会通过 https 安全 地激活本手机到云端的推送服务。成功激活之 后,手机就从推送服务获得了 servicetoken(一个周期性被刷新的密钥)。该 servicetoken 在随后的通信过程中用于 加密和签名。所以整个推送通道上的消息的传输是安全的。

3) 第7~10 步,是由手机应用调用客户端 sdk 的 initialize()发起的。目的是让云端的推送服务能够识别在某个手机上的某个应用(通过 regID)。整个通信过程如前所述是 加密的。

4) 第11 步,是手机应用客户端通知自己的应用服务器 regID 用于以后发送通知。如果应用采用基于别名的消息发送方式,则可以跳过本步骤。这是因为客户端调用 客户端sdk 的 setAlias()让小米推送服务知道了如何把别名映射到对应的机器。

5) 第12~19 步,是手机应用服务器如何单发一条消息,该消息又是如何基于 ACK 可靠传输给用户某个手机上的应用。过程如前 2)所述是安全的。如果应用采用订阅 /发 布模式,流程基本类似。

6) 第20 步,用户可以随时到管理后台去查看过去消息发送和到达等情况的统计信息。

6)小米推送功能简析与特点6.1.推送的消息类型小米推送支持通知栏提醒和透传消息两种消息类型。

6.1.1.通知栏提醒客户端收到这类消息后,将直接在通知栏弹出一条通知。用户点击弹出通知后,客户端SDK会将消息中携带的数据传递给应用,由应用决定下一步的动作。通知栏内的展示如图1 所示,展示的内容包括标题、摘要、应用的大图标、小图标和时间。其中标题、摘要、大图标和小图标可由开发者自定义 3。同时,针对每条消息,开发者也可以单独定义是否响铃、是否振动、是否点亮呼吸灯,并且可以选择响铃的声音

图2 MIUI和原生Android上消息的展示

6.1.2.透传消息为了满足不同应用对消息展示效果个性化的需求,小米推送支持以透传的方式来发送消息。这种方式把消息直接推送给应用客户端,由客户端自定义如何呈现或者选择不呈现。使用透传消息,开发者可自定义更多使用推送的方式和展现形式,更灵活地使用消息推送通道。需要注意的是,在一些Android系统(如MIUI)中,受到系统自启动管理设置的限制,应用不能在后台自启动。在这类系统中,如果在发送消息的时候对应的应用没有被启动,透传类消息将不能顺利送达。因此,对于对送达率要求很高的消息,建议尽量采用通知栏提醒的方式推送消息5。

6.2.推送对象的选取

6.2.1.基于标签的推送这种方式允许应用基于不同的用户类型,分别进行个性化的定向消息推送。在应用初始化时或运行过程中,开发者可结合自己的业务特征,给用户打上不同的标签(topic)。在推送消息时,开发者可以结合每条消息的内容和目标用户,选择所对应的标签,完成请求后,小米推送服务会向所有打上这一标签的用户发送该消息,从而满足应用精准推送的需求。

6.2.2.基于RegID或别名的推送当开发者需要给一个或多个具体的设备推送消息时,可以使用基于Reg ID(或为设备设定的别名)的推送,将个性化的信息推送给指定的设备。这种方式适用于需要为每个用户订制个性化推送的场景。

6.3.别名的含义与功能RegID是一个设备在小米推送服务中的唯一标识。考虑到在实际推送的场景中,对开发者来说更自然的方式是:以应用自有的用户唯一标识为对象来推送,因此我们提供了设置别名(Alias)的功能:应用可以将用户在应用内的账号或其它用户唯一标识设定为用户设备RegID的别名,在推送中可以直接基于别名进行推送。小米推送提供别名的功能不仅方便开发者将推送与自有的账号系统进行关联,同时也避免了因需要保存设备RegID 与自有帐号的对应关系而额外带来的开发和存储成本。

6.4.其他个性化设置· 消息有效期设置
开发者可以根据自己的业务需求设置每条推送消息的有效期,推送的目标用户在消息有效期内上线就会收到消息。消息的最长有效期是14天。如果应用没有单独设置一条消息的有效期,小米推送的默认有效期也是14天。· 静默期设置
小米推送可以为每个客户端设定接收推送的静默期,用户在静默期内将不会收到推送的消息。此时发出的消息会被保留在服务端,当用户具备接收条件且消息尚处于有效期内时,用户将会收到被保留的消息。应用内设置免打扰时段的功能就可以使用静默期设置的功能来实现。· 通知分类设置
开发者如果需要应用的多条通知在通知栏内并存,可以使用通知分类来实现这个展示要求。
通知分类是用来控制多条通知在通知栏内的替换关系。同类通知之间新的将替换旧的,不同类通知之间并存而不替换。最多可以有5类通知并存。因此,如果希望多条通知在通知栏内并存,开发者可以在发起推送时将这几条通知设置为不同的分类。

7)统计

在小米开发者站内,开发者可以在应用的消息推送服务下查看推送的数据统计,也可以直接使用小米推送提供的数据API,与自身现有的统计系统结合。小米推送提供的统计主要分为推送数据统计和用户数据统计两大类。
7.1.推送数据统计推送数据统计里包含实时数据和历史数据两类。统计指标:
· 已推送总量:是单发和群发的目标设备数之和
· 单发消息数:指按reg id或按别名推送的目标设备数
· 群发消息数:指按标签推送的目标设备数
· 送达消息数:指已收到消息的设备数
· 通知点击数:指通知栏内应用通知的点击数 6

7.2.用户数据统计用户数据统计也是包含实时数据和历史数据两类,用户数据需应用开发者主动启用才进行统计展示。统计定义
· 当前在线用户数:指当前保持着推送长连接的设备数
· 最高在线:指当日同时在线最高时的在线设备数
· 新增用户:指当日首次建立推送长连接的设备数
· 日活跃用户:指当日曾经在线过的设备数

8)服务性能
为了保证服务质量,我们对小米推送服务的服务器性能做了较为完善的压力测试。在实验室环境下,通过压力测试,我们得出如下几项主要性能数据:
同时在线:目前能支撑6000万长连接同时在线,并可随时根据业务需求水平扩展。
吞吐量:消息的最大吞吐量为每分钟600万条,也可通过增加服务器随时扩展。
及时性:99.8%以上的消息可以在300ms内发送完成。消息的平均送达延迟为118.74ms,最大消息延时为531ms。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值