您的位置:首页 > 移动开发 > IOS开发

iOS使用推送解决未读消息实时刷新

2017-03-06 14:02 507 查看
最近项目需要实现未读消息实时刷新,UI界面还是比较low的,用的uicollectionview放了一些cell,每个代表一个功能,项目需要在消息的cell上,图片的右上角实时刷新未读消息的数量,因为不想每隔几秒就调用接口去查询看有没有新消息(感觉这种方式好傻…),所以后面决定使用推送的方式实现该功能,后台使用Redis每五秒刷新一次,一旦某个用户的未读消息条数更新了,就放一个自定义通知(本来准备用通知的badge属性,但是发现安卓并没有这个东东)到该用户,移动端接收到以后就进行相应处理,需求大概就这样,这里记录一下中间遇到的问题。

iOS这边实现的逻辑大概是接收到自定义通知以后,将未读条数保存到NSUserDefaults中,然后发送通知(对UICollectionView所在的Controller注册了一个观察者对象),通知UICollectionView进行刷新,进入消息列表读取消息以后,调用接口更新消息状态,返回成功以后更新未读条数并存入NSUserDefaults,并发送通知,开发过程中遇到了几个问题。

代码逻辑是在加载cell的时候,判断这个cell是不是消息列表的cell,如果是就在右上角加一个自定义的button,文本就是NSUserDefaults中存的数值,这个button是用的Masonry加的约束,关于Masonry的使用,可以参考http://www.cocoachina.com/ios/
95ca
20141219/10702.html,

1.UIcollectionView刷新的时候,会使别的cell上面也显示这个button,数值就是消息cell的上一次保存的数值,解决方法是不使用原来的[UICollectionView reloadData],改为使用[UICollectionView reloadItemsAtIndexPaths:]方法只刷新消息列表cell。

2.在主界面的时候,后台推送自定义通知更新消息未读数正常,但是当退出消息列表的时候,发现UIcollectionView刷新以后的未读数是NSUserDefaults上一次保存的数值,打断点发现NSUserDefaults数据没有问题,最后发现是对button做了多次约束,每次都是调用的mas_makeConstraints,最后解决方法就是将button加到cell的xib中去。

3.集成极光推送的时候也发现了一个问题,就是iOS 10新加入的UserNotifications.framework库,对它的引入忘记了改为Optional,上线以后发现iOS 10一下的系统会出现闪退….,最后上线完以后第二天一来就又更新了一次。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: