美文网首页傲视苍穹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