前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS 融云头像问题

iOS 融云头像问题

作者头像
星宇大前端
发布2019-01-15 10:53:49
1K0
发布2019-01-15 10:53:49
举报
文章被收录于专栏:大宇笔记大宇笔记

最近集成融云,具体代码开发文档很清楚。讲讲问题点

问题来源:因为融云的头像和聊天回话列表的信息由开发者自己提供,当融云需要的时候去调起这个用户信息提供者。(用户提供者是个单例,设置一个就好)

这时候我陷入了一个误区,就是想着融云获取头像的时候根据userId调接口获得头像返回。可以实现结果但是存在很大的问题:

1.耗费资源,一个userId你就要请求一次。

2.容易造成堵塞,因为这个方法需要你请求完结果之后再返回数据。

最后想起了这个办法。因为融云的聊天列表都是你聊过的才显示。所以你在发起会话的时候根据你的userId缓存下该userId头像即可。

缓存机制很多字典形势把userid为key就可以。 NSUserDefaults,plist文件,sqlite都可以,根据项目需求

最后不要忘记在会话列表删除的时候,移除掉。

/**

 *此方法中要提供给融云用户的信息,建议缓存到本地,然后改方法每次从您的缓存返回

 */

- (void)getUserInfoWithUserId:(NSString *)userId completion:(void(^)(RCUserInfo* userInfo))completion

{

NSString  *  LoginId  =  [RCIMsharedRCIM].currentUserInfo.userId;

if ([userIdisEqualToString:LoginId]) {

RCUserInfo *user = [[RCUserInfoalloc]init];

        user.userId = userId;

        user.name = [[NSUserDefaultsstandardUserDefaults]objectForKey:USER_NAME];

        user.portraitUri = [[NSUserDefaultsstandardUserDefaults]objectForKey:AVATAR_S];

return completion(user);

    }else{

otherUser = [[RCUserInfoalloc]init];

otherUser.userId = userId;

otherUser.name         = [[NSUserDefaultsstandardUserDefaults]objectForKey:[NSStringstringWithFormat:@"%@/name",userId]];

otherUser.portraitUri  =  [[NSUserDefaultsstandardUserDefaults]objectForKey:[NSStringstringWithFormat:@"%@/avatar",userId]];

return completion(otherUser);

    }

}

这时候还有两个种情况:

1、如果不是你主动发给别人信息,就无法缓存头像等信息。

那就捕捉别人发信息的时候缓存userid信息。通知里有userID

- (void)didReceiveMessageNotification:(NSNotification *)notification {

    [UIApplicationsharedApplication].applicationIconBadgeNumber =

    [UIApplicationsharedApplication].applicationIconBadgeNumber +1;

if ([notification.objectisKindOfClass:[RCMessageclass]]) {

RCMessage  * message = (RCMessage *)notification.object;

        [selfgetUserBaseFromRemoteWith:message.targetId];

    }

}

2、头像都缓存到本地了,换部手机就完蛋了。所以在显示列表之前检测下所有的userid信息是否都有缓存。如果没有的话你还需要从你服务器获得显示这个是没有办法的。

-(NSMutableArray *)willReloadTableData:(NSMutableArray *)dataSource{

NSMutableArray  *  array  =  [NSMutableArray array];

for (RCConversationModel *  modelin dataSource) {

if ([[NSUserDefaultsstandardUserDefaults]objectForKey:model.targetId]==nil) {

            [selfgetUserBaseFromRemoteWith:model.targetId];

        }

        [array addObject:model];

    }

return array;

}

BUG:这样还是会有缺陷那就是换头像无法更新。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年12月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档