百度云推送应用场景

移动开发
开发者向应用的特定终端或特定用户推送消息。 特定终端对于应用来说,就是安装了应用的一台具体的设备。 而一个用户可能有多个端,在某些应用场景下,我们希望消息是针对用户的——应用的同一个用户在他的所有终端上都能收到消息,这时候我们就需要向特定用户推送消息。

1.名词解释

API Key - 应用标识,终端上的绑定和服务端推送消息时都要用到。

Secret Key - 应用私钥,服务端推送消息时用到。

app id - 应用ID,就是百度开发者中心的应用基本信息中的应用ID。客户端绑定调用返回值中可获得。

channel id - 推送通道ID,通常指一个终端,如一台android系统手机。客户端绑定调用返回值中可获得。

user id - 应用的用户ID,一个应用在多个端可以都属于同一用户。user id和channel id配合可以唯一指定一个应用的特定终端。如果应用不是基于百度账户的账户体系,单独用user就通常指定了一个应用的特定终端。客户端绑定调用返回值中可获得。

2.单播消息推送

描述

开发者向应用的特定终端或特定用户推送消息。 特定终端对于应用来说,就是安装了应用的一台具体的设备。 而一个用户可能有多个端,在某些应用场景下,我们希望消息是针对用户的——应用的同一个用户在他的所有终端上都能收到消息,这时候我们就需要向特定用户推送消息。

解决思路

(1)向应用的特定终端推送消息

一个channel id指定一个终端,因此在这种需求下,开发者需要通过服务端API,向一个特定channel id推送消息。在推送之前,客户端应用通过绑定接口的返回值获取到channel id,并通过网络等手段发送给开发者,开发者需自行维护channel id。

例如,Android客户端,在调用了startWork之后,自定义消息 receiver将会收到返回值,其中包含了channel id、user id等信息。

(2)向应用的特定用户推送消息

云推送用user id来表示用户,因此在这种需求下,开发者需要通过服务端API,向一个特定user id推送消息。和channel id获取方式类似,客户端应用通过绑定接口的返回值获取到user id。开发者需要自行维护user id。

应用场景举例

在线问答应用。用户A用手机发表一个问题,问题的解答并不是实时的。假设在第二天用户B发表了第一个解答,这时需要将答案单独推送给A。

解决方案

用户A发表问题时,记录问题id及其对应的A的user id(或channel id)。用户B发表解答时,通过服务端API向问题id对应的user id(或channel id)推送解答。

3.用户分组的消息推送

描述

开发者向应用的符合特定分类条件的若干用户的集合推送消息。广播是分组推送的特例,它向应用的所有用户(同时也是所有端)推送消息。

解决思路

云推送通过Tag(标签)这种技术方式来实现用户分组的功能。例如,对于分类信息的应用,一个用户观看了体育栏目,就给该用户打一个Tag——sport。6月的某一天NBA总决赛热火夺冠了,则向sport这个Tag推送一条及时的夺冠新闻。

Tag的设置有两种方法:

(1)客户端设置

这是最常见的设置方式,因为和用户直接交互的客户端最真实的收集了用户的喜好、习惯等信息。这些信息往往是用户分组的依据。在客户端程序中,一旦用户触发了开发者预先设定的分组条件(如:观看了体育栏目,设置了年龄,团购了电影票等),则调用客户端API进行Tag设置(对应的Tag:sport,80s,movie),如Android端的setTags接口。

(2)服务端设置

如果开发者自己维护了用户的分组信息,或者存在已发布的还不具备某分组设置功能的终端版本,也可以通过服务端API给特定用户设置Tag,如PHP接口setTag。

广播功能和Tag无关,不需要开发者进行分组的任何操作就已经具备。

推送Tag消息的方法:

(3)通过管理控制台推送

若要推送广播消息,选中上图中的所有人即可。

(4)通过服务端API推送

如PHP接口

 

  1. public function pushMessage ( 
  2. $push_type
  3. $messages
  4. $message_keys
  5. $optional = NULL ) 

 

push_type为2,且正确设置tag_name 参数。详情参考PHP-SDK使用手册

应用场景举例

阅读应用。对不同阅读喜好的人群推送不同类别的新图书广告。

解决方案

应用提供喜好设置页面,用户勾选不同的类别,触发对应Tag的设置。或者用户阅读了某个类别的图书,触发对应Tag的设置。在服务端,给特定类别图书的Tag推送新书广告。

4.使用自己的账户系统或百度账户

描述

开发者可以使用自己的账户体系开发应用,或者应用就是无账户的。开发者也可选择使用百度账户作为应用账户系统的接入。

解决思路

(1)使用自己的账户系统或者无账户系统

这两种情况,云推送都是无法理解账户信息的,所以对于云推送来说都属于无账户体系。
云推送通过终端标识(channel id)和应用标识(APIKey)来唯一确定一个应用的一个特定端。应用的每个端都是不同的用户,拥有不同的user id。 客户端的绑定方式,用Android API举例:

PushManager.startWork(Context, LOGIN_TYPE_API_KEY, apiKey)

(2)使用百度账户系统

云推送和百度账户系统是连通的,应用的所有用户将使用百度的user id作为唯一标识。不同的端使用同一个用户百度账户登录,获得的user id是一样的。这种方式可以实现对用户的多个端做消息推送。
百度账户的客户端绑定使用用户AccessToken作为验证凭证,用户AccessToken的获得需要百度账户登录界面的辅助,具体使用可以参看客户端SDK demo或者百度账号连接官方文档。
同样的,客户端的绑定方式,用Android API举例:

PushManager.startWork(Context, LOGIN_TYPE_ACCESS_TOKEN, UserAccessToken)

(2) 百度账号连接官方文档

5.单服务单通道的端上实现

云推送的Android SDK,是通过后台service和socket长连接机制来实现的。从消息时效性、耗电量、网络流量等因素考虑,这是目前最好的实现方式。

在同一台设备安装了多个使用推送的应用的情况下,如果每个应用都执行独立的后台service,且各自建立独立的长连接,这无疑是系统资源的巨大浪费。内存使用、耗电量、网络流量等关键因素都将以接近与应用数正比的倍数增长。

在这个背景下,云推送实现了单服务单通道的机制。同一台设备上,云推送服务的资源消耗不受集成该服务的应用数量影响。任何时刻,只会运行一个后台service和维持一个socket长连接。

应用的初始化、tag等接口调用,将通过intent方式发送到后台运行的service处理。service接收到推送消息时,将根据消息中指定的发送对象,通过intent,以指定目标应用包名的方式,发送私有消息给应用。应用无法接收到不属于自己的消息,也无法通过冒充截获。

示意图:

 

责任编辑:闫佳明 来源: 51CTO
相关推荐

2013-07-01 16:36:26

百度云推送免费云推送移动开发

2014-07-25 17:12:39

数据库WOT2014MongoDB

2013-10-10 16:28:16

百度云推送免费云推送移动开发

2013-03-11 10:26:37

百度云MTC

2016-10-13 15:19:34

百度

2012-05-28 22:51:53

百度

2013-07-15 16:43:53

百度云百度云Push云推送

2013-07-16 15:05:03

云推送极光推送

2012-10-19 09:47:30

百度云百度音乐云计算

2013-06-27 10:23:30

百度云百度开放云

2012-05-24 13:55:02

XML

2013-04-08 15:19:53

百度云百度

2018-09-06 18:37:45

百度云

2017-04-28 17:44:45

百度

2015-07-29 16:49:47

百度

2012-03-23 12:12:37

百度开发者大会

2013-10-12 10:25:20

百度云 Cooliris

2016-10-21 15:07:11

2013-08-22 17:08:50

点赞
收藏

51CTO技术栈公众号