笔记66--消息推送之个推

来源:互联网 发布:ubuntu更新软件源命令 编辑:程序博客网 时间:2024/04/30 16:34
贴连接:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=497584&extra=page%3D1%26filter%3Dtypeid%26typeid%3D55
一、客户端
1、推送种类

推送分为两种:推送通知和透传消息。推送通知会在通知栏收到消息,用户可禁用。透传消息直接传消息到app,自己可根据消息来进行下一步的操作,用户无法禁用。

2、ClientID

AppID、AppKey、AppSecret、MasterSecret这些对每个应用来说都是唯一的,而ClientID是每个设备一个ClientID。

1)ClientID有什么用:如果你想给某个用户发消息,那你需要ClientID,它就是用来区分不同用户的。

2)ClientID从哪来:初始化SDK后,个推服务器会给设备返回一个ClientID。

3)ClientID特性:对每个设备来说,ClientID应该是固定的,但有可能会变。

4)用法:说下我的处理方式:在SharePreference中保存ClientID,当得到ClientID后与保存的ClientID作比较;由于ClientID是每个设备一个,所有当更换用户后,也需要更改该用户对应的ClientID:保存一个用户的标记,当用户发生变更时,判断标记是否变(更好的处理方式是每次从自己的服务器获取用户对应的ClientID,然后和从个推得到的ClientID作比较。)。

3、标签Tag

如果你想给某一群用户发消息,那么你需要用到标签(当然你也可以采用循环的方式给ClientID来发消息)。

如果某个用户有3个标签,分别是"aaa"、"bbb"、"cc",而你只给"aaa"、"bbb"标签发消息,那么这个用户是不会收到消息的。

设置标签代码:

private PushManager pm;pm=PushManager.getInstance();pm.initialize(this.getApplicationContext());Tag tag1=new Tag();tag1.setName("aaa");Tag tag2=new Tag();tag2.setName("bbb");Tag[] tags=new Tag[2];tags[0]=tag1;tags[1]=tag2;int i=pm.setTag(MainService.this, tags);

二、服务端常见误区
误区一:推送选错接口

个推服务端adk提供给开发者三个推送接口:pushMessageToSingle/pushMessageToList/ pushMessageToApp。从命名来看也容易区分,分别是推送单个用户,一批用户,一个应用的全部用户。对于每个接口,个推服务端的处理逻辑不尽相同,在性能上也有差别。一般来说推送性能是pushMessageToApp > pushMessageToList > pushMessageToSingle。其中ToList和ToSingle的使用频率最高。有些开发者在ToList的场景里选用ToSingle接口,这样就会明显影响推送效率,ToSingle是适合单推特定用户的场景,如果推送内容相同,将推送的对象集合起来,调用ToList接口,可以明显提升性能。但是对于适合单推的场景使用ToList又会明显降低性能,因为如果每次推送内容不同。调用ToList之前都需要调用getContentId上传消息体,这样至少从http请求次数来说,已经不合算了。

误区二:推ToList接口列表太大

ToList的性能更高在某个方面来说是因为其一次上传了更多的clientId。但是我们不建议一批列表里放太多的clientId,把鸡蛋放在一个篮子里是有风险的。而且从另一方面来说,过于巨大的消息体可能会在各个层面出现意料之外的异常。目前我们建议一批列表里放置不超过100个clientId。这样100万的用户,你需要调用一万次toList接口。

误区三:频繁调用getContenId

在调用ToList之前,需要先调用getContentId上传推送消息体到个推服务器并获取一个contentId。后续调用toList只需要上传这个contentId和clientId列表就行。这意味着,如果你需要给100万的用户推送相同内容的消息,每次调用ToList发送100个,那就需要循环调用1万次ToList接口。而这中间,无需再调用getContentId!只需要复用同一个contentId!因为他们的推送消息体是一样的。这里经常会有开发者没有注意,每次都调用一次getContentId再去调用toList接口。这样对推送性能会造成巨大损失,因为你不仅double了http请求次数,而且getContentId相对来说在个推服务器上也是一个耗时操作。因此,如果你现在正不小心这样错误使用着个推的服务端api,请赶快调整,飞一样的性能提升肯定会让你眼前一亮的。

0 2
原创粉丝点击