iOS 融云头像问题

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


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


这时候我陷入了一个误区,就是想着融云获取头像的时候根据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:这样还是会有缺陷那就是换头像无法更新。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星宇大前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值