美文网首页傲视苍穹iOS《Objective-C》VIP专题
环信3.0简单集成及昵称与头像的显示

环信3.0简单集成及昵称与头像的显示

作者: 夏日里的夏天 | 来源:发表于2016-10-20 22:22 被阅读1656次

环信简单集成,这是官方文档,按照这个分分钟搞定,但是我遇到的是UI头像和昵称不显示的问题,分享下我的解决方法。
快速集成链接:http://git.oschina.net/markies/HxChatDemo

关于头像和昵称的问题,需要向自己的后台服务器请求。
我是在会话列表页请求数据并缓存到数据库。
1.请求头像


#pragma mark - EaseConversationListViewControllerDelegate
 - (void)postUserInfoWithChatter:(NSString *)chattar model:(EaseConversationModel *)model{
             
             NSDictionary *pamaa = @{
                                     @"phones":chattar
                                     };
             
             [until AFNetworkPOSTurl:@"http://demo.bianguo.com.cn/ccjtest/lvtt/api/home/index/get_userinfos" paraments:pamaa complete:^(id json, NSError *error) {
                 
                 NSLog(@"环信数组-%@",json);
                 model.title = json[@"data"][0][@"nickname"];
                 model.avatarURLPath = json[@"data"][0][@"headimg"];
                 
                 
                 NSUserDefaults *defults = [NSUserDefaults standardUserDefaults];
                 
                 NSMutableDictionary *dic = [NSMutableDictionary dictionary];
                 
                 dic[@"name"]  = model.title;
                 dic[@"avatarURLPath"] = model.avatarURLPath;
                 [defults setObject:dic forKey:chattar];
                 
                 //缓存用户头像
                 [UserCacheManager saveInfo:chattar imgUrl:model.avatarURLPath nickName:model.title];
                 
             }];
             
         }

在下面这个方法中显示会话列表的头像和昵称,并缓存到UserCacheManager这个类中


- (id<IConversationModel>)conversationListViewController:(EaseConversationListViewController *)conversationListViewController modelForConversation:(EMConversation *)conversation{
    self.chatter = conversation.conversationId;

    EaseConversationModel *model = [[EaseConversationModel alloc] initWithConversation:conversation];
                            if (model.conversation.type == EMConversationTypeChat) {
                                NSUserDefaults *defults = [NSUserDefaults standardUserDefaults];
                                NSString *chatterBig = [conversation.conversationId  uppercaseString];
                                NSMutableDictionary *sqDic = [defults objectForKey:chatterBig];
                 //在这里显示会话列表的头像和昵称
                  if (sqDic) {
                                    model.title = sqDic[@"name"];
                                    model.avatarURLPath = sqDic[@"avatarURLPath"];
                                    [UserCacheManager saveInfo:conversation.conversationId imgUrl:model.avatarURLPath nickName:model.title];
                                }else{
                                    [self postUserInfoWithChatter:chatterBig model:model];//请求数据
                                }

                            } else if (model.conversation.type == EMConversationTypeGroupChat) {
                                NSString *imageName = @"groupPublicHeader";
                                if (![conversation.ext objectForKey:@"subject"])
                                {
                                    NSArray *groupArray = [[EMClient sharedClient].groupManager getAllGroups];
                                    for (EMGroup *group in groupArray) {
                                        if ([group.groupId isEqualToString:conversation.conversationId]) {
                                            NSMutableDictionary *ext = [NSMutableDictionary dictionaryWithDictionary:conversation.ext];
                                            [ext setObject:group.subject forKey:@"subject"];
                                            [ext setObject:[NSNumber numberWithBool:group.isPublic] forKey:@"isPublic"];
                                            conversation.ext = ext;
                                            break;
                                        }
                                    }
                                }
                                model.title = [conversation.ext objectForKey:@"subject"];
                                imageName = [[conversation.ext objectForKey:@"isPublic"] boolValue] ? @"groupPublicHeader" : @"groupPrivateHeader";
                                model.avatarImage = [UIImage imageNamed:imageName];
                            }
                            return model;
                        }

接下来显示聊天会话中自己的头像和对方的头像

在EaseBaseMessageCell中,

- (void)setModel:(id<IMessageModel>)model
这个方法中进行赋值。

if (self.model.isSender) {//这是自己的头像
        _nameLabel.text = [ZYTokenManager usernickname];
        [self.avatarView sd_setImageWithURL:[NSURL URLWithString:[ZYTokenManager userheadimg]] placeholderImage:model.avatarImage];
else{//这里是对方头像,从缓存的UserCacheManager这个类中取出来
        UserCacheInfo * userInfo = [UserCacheManager getById:model.nickname];
        if (userInfo!=nil) {
            _nameLabel.text = userInfo.NickName;
            [self.avatarView sd_setImageWithURL:[NSURL URLWithString:userInfo.AvatarUrl] placeholderImage:model.avatarImage];
        }else{
            _nameLabel.text = @"nil";
        }
        
    }

这样基本上就没有问题了。

2.最近做环信推送遇到点问题。本地推送没有声音,后来参考demo,解决方法如下。
2.1 本地通知。在进入后台3分钟之内,由于长连接没有关系,发送的通知是本地通知,之后发送的消息通知是APNS。

在
ChatUIHelper.m文件中找到这个方法

- (void)didReceiveMessages:(NSArray *)aMessages
本地推送消息声音代码图1

如果这样推送还没有声音的话,还是在这个.m文件的最后,再加一句

本地推送消息声音代码图2

2.2 离线推送。离线推送集成看官方demo,这边说一下证书的配置。
如果只是连接到Xcode真机测试,选择开发环境下的证书测试。
如果上传到蒲公英之类的扫码测试,就需要生成环境下的证书测试,也就是和上线之后的证书是一致的。

开发上线的推送证书配置

相关文章

网友评论

    本文标题:环信3.0简单集成及昵称与头像的显示

    本文链接:https://www.haomeiwen.com/subject/mpntuttx.html