考虑到接下来的一份工作可能会从事消息推送服务的开发,于是为了能够更快的熟悉业务,花了点时间研究小米的消息推送服务的接入。文章的主要内容都是来自小米推送服务介绍,以及会对部分内容进行梳理,主要用来学习推送服务接入的流程,如何推送消息,推送服务的大致原理,已经推送服务的架构是怎样的等等。
1. 小米推送简介
小米推送(MiPush)是小米公司向开发者提供的消息推送服务,通过在云端与客户端之间建立一条稳定、可靠的长连接,为开发者提供向客户端应用实时推送消息的服务,有效地帮助开发者触达用户,提升APP活跃度。
依托强大的服务器集群,以及多年在手机即时通讯领域的技术积累,小米在消息推送服务这一领域有着丰富的经验和雄厚的实力。在保证推送消息的到达率及到达速度的同时,我们还设计了一套基于业界最高标准加密算法的安全措施,让应用消息的传输更加安全可靠。
截止2019年底,小米推送累计接入应用30000+,覆盖设备数11亿,每天发送消息110亿条。
2.产品优势
2.1 MIUI上系统级通道
小米推送在MIUI上的长连接由系统维护,能够充分的保障通知栏消息在MIUI上的送达率。设备联网的情况下,有效推送的送达率能达到90%以上。2.2 定制化消息样式
支持长文字、大图等富文本通知栏消息样式,满足不同开发者的个性化推送需求。2.3 稳定、安全、快速、灵活
小米推送支持通知栏消息和透传消息两种消息类型,同时提供API接口和推送运营平台两种消息下发途径。。SDK覆盖Android、iOS客户端及服务端主流语言,只需半天时间集成,可以帮助开发者更好的结合自身业务逻辑,满足复杂业务场景需求。2.4 多平台支持
小米推送服务的客户端 SDK 基于标准的 Android SDK,支持所有的 Android2.2 及以上的系统。同时,我们也支持iOS版本的推送,目的是提供一整套有关推送消息的整合解决方案,让开发者真正地做到推送无忧。iOS推送是基于苹果的APNs服务之上封装的一层服务。降低开发者使用iOS推送的门槛。同时服务端的接口实现了跨平台,方便开发者跨平台使用小米推送。2.5 全面的数据统计
推送运营平台提供包括APP数据和消息数据等多维度的统计,帮助开发者更好的掌握应用数据,助力精细化运营。2.6 自助调查工具
小米推送为开发者提供了一套完备的调查工具,可以辅助开发者自助查询设备与消息的送达/在线情况,实时把控消息状态。
- iOS/Android全平台支持
支持两大系统的推送服务,iOS开发者还可以将存量用户无缝迁移到小米推送中 点击查看详情 - 稳定 安全 高效
每秒百万级推送速度,亿级同时在线,99.8%的消息300毫秒内到达。
3.推送消息类型
小米推送支持通知栏提醒和透传消息两种消息类型,同时提供运营平台及API两种推送消息下发方式。
3.1.1 通知栏消息
通知栏消息通过小米系统通道下发,不需要应用驻留后台。
客户端收到这类消息后,会直接在通知栏展现。用户点击弹出通知后,客户端SDK会将消息中携带的数据传递给应用,由应用决定下一步的动作。
3.1.2 透传消息
透传消息是指开发者可选择不通过任何预定义的方式展现,由应用直接接收推送消息。利用透传消息,开发者可自定义更多使用推送的方式和展现形式,从而能更为灵活地使用消息推送通道。
需要注意的是,在一些 Android 系统(如 MIUI)中,受到系统自启动管理设置的限制,应用不能在后台自启动。在这类系统中,如果在发送消息的时候对应的应用没有被启动,透传类消息将不能顺利送达。因此,对于对送达率要求很高的消息,建议尽量采用通知栏提醒的方式推送消息。
4.消息推送方式
小米推送支持标签(Topic)、RegID、别名(Alias)、Useraccount四种消息发送方式。
4.1 基于标签的推送
标签(Topic)可以认为是具有某些相同属性的用户集合, 在应用初始化时或运行过程中,开发者可结合自己的业务特征,给用户打上不同的标签(Topic)。
在推送消息时,开发者可以结合每条消息的内容和目标用户,选择所对应的标签,完成请求后,小米推送服务会向所有打上这一标签的用户发送该消息,从而满足精准推送的需求。
注:
• 标签不会主动失效,只有开发者主动调用退订标签(unsubscribe)或设备标识(RegID/alias/useraccount)失效才会取消
- 全部用户消息同样属于标签消息(设备注册时会注册一个默认标签用于发送全量消息);
- 每个设备可订阅标签的个数无上限;
- 标签可以和RegID与alias对应(具体方法请参见服务端文档);
- 标签消息在消息有效期结束之前,可以停止发送。停止后不能继续发送。只有标签消息可以停止,其余消息发送后不可停止。
4.2 基于 RegID的推送
RegID是小米推送为每个设备上的每个app注册推送服务时生成的唯一标识。
当开发者需要给一个或多个具体的设备推送消息时,可以使用基于 RegID的推送,将个性化的信息推送给指定的设备。这种方式适用于需要为每个用户订制个性化推送的场景。
注:
- RegID是在客户端向小米推送服务注册时,小米推送服务端根据设备标识、AppID以及当前时间戳生成,因此能够保证每个设备上每个app对应的regID都是不同的。
- RegID在应用卸载或清除本地数据后会重新生成;
- RegID在如下几种情况下会被判断失效:
1:App卸载重装或者清除数据后重新注册,这种情况下会生成一个新的RegID,而老的RegID会失效;
2: App调用了unregisterPush;
3: 在MIUI上,App卸载时,如果能成功上报,则RegID会被判定失效;
4:设备超过3个月没有和小米Push服务器建立长连接;
可以通过feedback接口从小米推送服务后台拉取失效RegID的列表,具体用法请参见《服务端SDK文档》;
5: iOS SDK从2.2.2版本之后新增支持客户端获取RegID的方法:getRegID,详细请参见《小米推送服务iOS客户端SDK使用指南》。
4.3 基于别名(alias)的推送
别名(alias)是小米推送提供的一种个性化设定, 开发者可以将用户在应用内的账号或其它用户唯一标识设定为用户设备 RegID 的别名,在推送中可以直接基于别名进行推送。
别名不仅方便开发者将推送与自有的账号系统进行关联,同时也避免了因需要保存设备 RegID 与自有帐号的对应关系而额外带来的开发和存储成本。
注:
alias与RegID(设备)一一对应,同一个alias不能对应多个RegID,alias对应的RegID以最后一次setalias对应的RegID为准;
alias失效的可能原因如下:
1: 主动调用unsetalias;
2:alias对应的RegID已经失效;alias只跟设备相关,所以请使用用户账号作为alias时,合理判断alias可能失效的情况。
4.4 基于useraccount的推送
useraccount主要适用于用户多点登陆的情况,与alias类似,同样可以作为应用自身的用户标识与RegID建立映射关系。
典型的场景就是用户的alias和user account都可以用来设置设备对应的用户账号,所不同的是,一个alias只能对应一台设备,如果有多台设备设置了同样的alias,则最后一个设置成功的生效,其它设备就会失效。而一个user account可对应20台以内的设备。因此如果应用是单点登录的,一个账号只会在一台设备上生效,用alias会比较合适。而如果产品需求是单账号多点登录同时接收消息,则用user account会更合适。
注:
useraccount最多可对应20台设备,并以最近注册的20台设备为准(如果第21台设备注册,则第一个注册的设备将会失效)。
4.5 其他个性化功能
4.5.1 定时推送
开发者可以根据业务需求自定义消息推送时间,可以选择立即推送或指定时间推送。定时消息功能可以指定未来30天内任意时间作为消息下发时间。定时消息在消息开始推送之前可以通过推送运营平台-消息记录-详情 中取消。
详细设置请参见《服务端Java SDK文档》中的timeToSend(long milliseconds)方法。4.5.2 自定义消息有效期
开发者可以根据自己的业务需求设置每条推送消息的有效期,推送的目标用户在消息有效期内网络在线就会收到消息。消息有效期最长14 天。如果应用没有单独设置一条消息的有效期,小米推送的默认有效期也是 14天。
详细设置请参见《服务端Java SDK文档》中的timeToLive(int milliseconds)方法。
- 4.5.3 自定义消息接收时间
小米推送支持为每个客户端设定可接收推送时间,开发者可以设置接收消息推送时间段,不在该时间段的推送消息会被缓存起来,到了合适的时段再向App推送被缓存的消息;应用内设置免打扰时段的功能即可以通过自定义消息接收时间实现。注:具体的设置方法请参见《Android客户端SDK文档 》中的setAcceptTime方法。
- 4.5.4 自定义声音、振动、呼吸灯
开发者可以自由控制推送消息到达时的提醒方式,同时可以自定义消息提醒的提示音。
注:自定义提示音只能调用客户端存储的资源,需要由开发者自己制定资源位置。
- 4.5.5 AB test多文案推送
多文案推送方式是小米推送提供的通知栏消息自动化文案优选工具,旨在帮助开发者提高通知消息点击。开发者可在同一个推送计划中添加2-5条文案。推送开始后的前15分钟会进行预发送,每条文案发送相同数量的设备,15分钟过后系统会自动选择当前点击率最高的消息作为最终文案,发送给剩余的设备。
说明:
- 4.5.6 个性化场景推送
- 根据网络环境推送
开发者可以根据设备所处的环境进行推送:可以选择仅推送给处于WiFi环境下的用户。典型场景举例:视频类app可以推给WiFi条件下的用户,提升点击率。 - 按照应用版本推送
开发者可以通过指定应用的版本号来进行推送,可以选择某些版本接收消息/不接受消息。注:版本号需要开发者自己指定。 - 按照机型推送
开发者可以通过指定手机的品牌与机型来进行推送,可以选择某些版本接收消息/不接受消息。
注:model需要开发者自己指定。详细请参考《服务端Java SDK文档》中的“附 录2:品牌表”。
- 根据网络环境推送
5. 使用推送
5.1 启用推送
登录小米推送官网,注册开发者账号并创建App,通过管理控制台启用推送服务,详细介绍请参见《小米推送服务启用指南》。
5.2 下载并集成客户端SDK
SDK下载地址:http://dev.xiaomi.com/mipush/downpage/
5.3 推送实现方式
5.3.1 API推送
通过小米推送提供的API接口,开发者可以自行构建并发送消息。包括个性化功能实现、获取统计数据、追踪消息状态、拉取失效数据等。小米推送官方提供了JAVA服务端SDK版本,如果无法满足需求,我们同样提供了http API,开发者可以在底层接口上自行进行封装,满足各种定制化的推送需求。
5.3.2 推送运营平台
推送运营平台是小米推送提供的管理和使用推送业务的一站式平台,通过运营平台开发者可以实现应用管理、消息下发、数据统计、使用人员管理等功能。
推送运营平台网页版推送工具可以帮助开发者通过运营平台快速实现消息下发。
支持通知栏消息和透传消息两种类型,同时支持多种推送方式和个性化推送。
6. 推送统计
小米推送支持推送数据实时统计功能,包括推送数据、APP数据、消息记录等维度,帮助开发者更好的监控和分析业务现状。
开发者可以根据业务需求,登录推送运营后台查看,或者通过API接口获取。
API接口请参见《服务端 JavaSDK文档》中的“获取统计数据”一节。