1. 不能在登录时传clientId,原因是clientId是需要app从个推获取的这个获取到的时间长短不确定,可能有如下情况
- 用户未登录,启动app,进入登录页面,当点击登录时app还没获取到clientId,因此无法提交这个字段
- 一个设备的clientId是不一定总是不变的,比如系统升级。考虑如下场景:如果用户已登录一直未退出,此时他升级了系统,clientId变了,此时后台对这个clientID推送是无效的。
2. 因此,需要专门开一个绑定clientId的接口,并且提供一个解绑的接口,用户请求解绑的时候,如果token验证通过,那就就将他的token和clientId一并清除掉。
另外后台需要注意一点,一个token如果有对应的clientId,那就可以对它进行推送。不用考虑这个token失效的情形。因为目前token如果在一周不使用后台就会自动给它失效的吧?但是用户并没有在别的设备登录,他还是应该要能接收到推送的。Android可能不启动app就收不到推送,但是iOS可以。
绑定接口传参
- token
用户token - gt_clientId
从个推获取到的ID - device_token
iOS推送有获取device Token,上传,后台可能用到 - gt_alias
app绑定的别名 - gt_tag:
app设置的标签
推送透传格式
使用json格式,包含字段
{
"title": "标题",
"content": "内容简述",
"ring": true,//是否响铃
"vibrate": true,//是否震动
"createOn": 1495590455,//消息推送时间,推送可能有延迟
"webUrl": "http://baidu.com"//目前所有推送点击都是去到消息列表,但是留一个打开web页面的功能
}
通知栏点击处理
目前统一去到我的->消息列表
- 目前消息列表是不能点击的,并且如果消息过长,都在一个列表里显示,体验不好。因此增加一个消息详情页面。大概是这个模样:
- 目前消息列表是不区分已读未读的,因此未读消息标题栏左边增加一个小红点。如果用户点击某一条消息进入详情,这条消息变成已读,小红点自动去掉。
- 关于这个红点的显示逻辑,处理方式如下:
- 接口返回增加一个字段,标记这条消息是否已读
- 增加一个接口保存每个用户已读的消息id
- app这边用户每点击一条消息,就记录消息id到本地。
- 用户点击了多条消息之后,看累了,从消息列表页退出,这时候app将所有记录到的消息id一并请求上传到后台,成功后清除本地记录。
- 用户看消息看烦躁了,直接强杀app,下次重启app进入消息列表时。app先判断本地是否有保存到已读消息记录id,有就先上传,然后再请求消息列表接口。
- 当然也有看一条消息就请求一次接口这种简单的处理方式,但是如果用户快速查看多条消息,接口请求就有点频繁了,姿势不太优雅。
- 当然也考虑过app本地保存已读消息记录id 的方式,但是一来如果用户切换设备登录了呢,二来问过康书记说保存每个用户的所有已读消息记录,是不麻烦数据量也不大的。
总结
- 新增一个绑定接口
- 新增一个解绑接口
- 新增一个上传用户已读消息id接口
- 新增一个消息详情页面
- 增加一个小红点的处理逻辑
网友评论