【51CTO.com原创稿件】推送功能已经成为APP里面必备的一个功能,利用推送,我们除了能够将热门信息推送给用户外,还能够将一些和用户本人相关的信息推送给用户,那么两种类型的推送都是怎么样的呢?要实现两种推送,我们应该怎么做?
看到上图是不是很有亲切感呢?打开很多APP的时候,我们都会发现这样一个有趣的事情,就是这些APP会推送各种各样的信息给我们,比如某条新闻热点,某个用户评论、收藏和分享了我的文章,甚至有些商城类APP还会推送发货、退货、优惠通知等等,下面我们就来聊聊关于推送的相关知识。
一个简单的人为消息推送轻架构
上图是一个用于生产环境的推送轻架构图,从图中我们能够看到,首先由我们的内容编辑工作者从管理后台选择要推送的新闻、视频等等内容,然后后端程序通过SDK或者HTTP API将这些推送的内容传递给推送服务端,推送服务端接收到这些即将推送的消息之后,经过一系列的处理,然后依次发送给APP里面的客户端,APP里面的客户端收到推送消息之后,将推送消息显示在我们的手机状态栏,从而得到我们最后看到的推送。
虽然推送程序是一个C/S程序,但是很大部分个人或者企业都是不会自己去开发推送的,而是借助市场上已经提供的现成推送框架来实现推送的功能,目前市场上的推送框架主要有:小米推送、百度推送、友盟推送等等。
消息生产者 & 消息消费者
上面聊了一种基于人为的推送,所有要推送的消息都是由我们人为选择的,并且普遍都是将其推送到所有的APP用户,但是对于一些特殊的推送,就只能够推送给某个用户了,比如发货通知、VIP到期通知、会员续费通知等等的推送,因为只针对某个用户,所以这时候我们只能够用程序的方式来代替人类完成推送,不过实现都是一样的,只不过要推送的内容由程序生成而已,那么怎么才能够做到推送给某个用户呢?
其实在我们的推送框架里面,对于每个APP都有一个推送的唯一标识,比如小米推送就是用regid来表示,有了这个唯一标识,我们可以在用户登录APP的时候,将这个唯一标识和我们的用户UID绑定起来,这样我们就能够将该UID产生的各种消息推送给他了。
一个轻型小巧的自动消息推送架构
上面简单聊了怎么将用户和推送标识符关联起来,下面我们来聊聊怎么实现一个非人为消息推送架构,将和用户相关的信息推送给他。
在上图中,我们采用了redis的订阅发布来实现消息的生产与消费,所谓redis订阅就是订阅某个通道的消息,然后当这个通道有消息之后,Redis服务端会将其发送过来,所谓redis发布消息就是将应用产生的各种消息保存到Redis服务端的某个通道里面,我们这里只是选择稍微简单的一种实现方式,当然你还可以使用前面介绍的MQ来实现。
推送存在的弊端
由于现在很多APP都有推送功能,导致我们的手机每天都会收到很多推送,所以很多用户会选择将一些不重要的APP推送功能权限关闭了,这样我们的推送就无法到达用户的APP了,推送的意义也就不存在了。
【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】