美文网首页
16-环信(1)

16-环信(1)

作者: cdd48b9d36e0 | 来源:发表于2017-01-14 00:39 被阅读10次

    0924

    1. 集成SDK注意要点(10.集成环信sdk)

    • 按文档导入依赖库的时候对拖入的环信.a静态库只能保留一个,删除的时候不要忘了.a对应的.h文件也要删除

    0925

    2. 获取好友列表的机制(02.显示好友列表数据)

    好友列表数据默认是从本地数据库获取的,而不是联网请求获取。因为这个原因,需要设置两点:

    • 自动登录成功的时候需要获取好友列表数据
    #pragma mark - 监听自动登录成功
    -(void)didAutoLoginWithInfo:(NSDictionary *)loginInfo error:(EMError *)error{
        if (!error) {//自动登录成功,此时buddyList就有值
            self.buddyList = [[EaseMob sharedInstance].chatManager buddyList];
            NSLog(@"=== %@",self.buddyList);
            [self.tableView reloadData];
        }
    }
    
    • 第一次登录完成之后设置自动从服务器获取好友列表这个API为YES
    // 让环信SDK在"第一次"登录完成之后,自动从服务器获取好友列表,添加到本地数据库(Buddy表)
        [[EaseMob sharedInstance].chatManager setIsAutoFetchBuddyList:YES];
    

    3. 添加好友后刷新通讯录(03.好友请求同意后刷新通讯录)

    1. 重新从服务器获取好友列表
    [[EaseMob sharedInstance].chatManager asyncFetchBuddyListWithCompletion:^(NSArray *buddyList, EMError *error) {
            NSLog(@"从服务器获取的好友列表 %@",buddyList);
            // 赋值数据源
            self.buddyList = buddyList;
            // 刷新
            [self.tableView reloadData];
            
        } onQueue:nil];
    
    1. 调用上个API后自动触发下面这个代理方法,这个方法的作用就在后台自动更新数据库
    #pragma mark 好友列表数据被更新
    -(void)didUpdateBuddyList:(NSArray *)buddyList changedBuddies:(NSArray *)changedBuddies isAdd:(BOOL)isAdd{
    
        NSLog(@"好友列表数据被更新 %@",buddyList);
    }
    

    4. 同意别人的添加好友请求后刷新通讯录(04.接收好友的请求)

    这里有个坑,发起添加好友请求别人同意后并不调用下面这个API,此时要用上面第3点的方法,而同意别人的好友添加请求会调用此API,此时直接刷新就行了

    #pragma mark 好友列表数据被更新
    -(void)didUpdateBuddyList:(NSArray *)buddyList changedBuddies:(NSArray *)changedBuddies isAdd:(BOOL)isAdd{
    
        NSLog(@"好友列表数据被更新 %@",buddyList);
        // 重新赋值数据源
        self.buddyList = buddyList;
        // 刷新
        [self.tableView reloadData];
    }
    

    5. 删除好友只需调用下面这个API(05.删除好友)

    ****会****自动调用-(void)didUpdateBuddyList:(NSArray *)buddyList changedBuddies:(NSArray *)changedBuddies isAdd:(BOOL)isAdd

    #pragma mark  实现下面的方法就会出现表格的Delete按钮
    -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
        if (editingStyle == UITableViewCellEditingStyleDelete) {  
            // 获取移除好友的名字
            EMBuddy *buddy = self.buddyList[indexPath.row];
            NSString *deleteUsername = buddy.username;
            // 删除好友
            [[EaseMob sharedInstance].chatManager removeBuddy:deleteUsername removeFromRemote:YES error:nil];
        }
    }
    

    6. 被删除好友还需要监听(06.监听被好友删除)

    ****不会****自动调用-(void)didUpdateBuddyList:(NSArray *)buddyList changedBuddies:(NSArray *)changedBuddies isAdd:(BOOL)isAdd

    #pragma mark 被好友删除
    -(void)didRemovedByBuddy:(NSString *)username{ 
        // 刷新表格
        [[EaseMob sharedInstance].chatManager asyncFetchBuddyListWithCompletion:^(NSArray *buddyList, EMError *error) {
            NSLog(@"从服务器获取的好友列表 %@",buddyList);
            
            // 赋值数据源
            self.buddyList = buddyList;
            
            // 刷新
            [self.tableView reloadData];
            
        } onQueue:nil];
    }
    

    7. 小Tips(08.聊天界面-工具条排版)

    • 注意给底部工具条View添加底部约束的时候要选View不要选BottomLayoutGuide
    • 给约束加动画
    self.inputToolBarBottomConstraint.constant = kbHeight;
        //添加动画
        [UIView animateWithDuration:0.25 animations:^{
            [self.view layoutIfNeeded];
        }];
    
    • 监听键盘的弹出和退出
    //1.监听键盘弹出,把inputToolbar(输入工具条)往上移
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(kbWillShow:) name:UIKeyboardWillShowNotification object:nil];
    //2.监听键盘退出,inputToolbar恢复原位
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(kbWillHide:) name:UIKeyboardWillHideNotification object:nil];
    
    • tableView拖拽时隐藏键盘,只需要一个属性搞定(Sb或xib可直接设置)
    tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
    

    8. sb中让Label高度随文字变化(09.聊天界面-接收方cell的排版)

    • 先设置上和左的约束
    • 然后在sb里选中label的倒数第二个的尺子→preferred width设置最大宽度(在前面的学习中知道这一步也可以直接设置宽度约束也行)

    9. get新的计算自定义cell高度的方法(10.聊天界面-发送方cell的排版)

    1. 先创建一个专门计算高度的工具类自定义cell
    /** 计算高度的cell工具对象 */
    @property (nonatomic, strong) XMGChatCell *chatCellTool;
    
    1. 在viewDidload方法里创建这个cell
    // 给计算高度的cell工具对象 赋值
        self.chatCellTool = [self.tableView dequeueReusableCellWithIdentifier:ReceiverCell];
    
    1. 在代理方法里计算cell
    -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
        // 设置label的数据
    #warning 计算高度与前,一定要给messageLabel.text赋值
        self.chatCellTool.messageLabel.text = self.dataSources[indexPath.row];
        return [self.chatCellTool cellHeghit];
    }
    

    10. 修改键盘return键的文字(11.聊天界面-发送聊天消息)

    1. 代码如下(Sb或xib的话可直接设置)
    UITextView *textView = [UITextView new];
    textView.returnKeyType = UIReturnKeySend;
    
    1. 获取return键的事件可以取个巧,当输入为换行建时就当作发送消息(其实这不是最好的处理方法,参考qq就是专门在输入框旁边有个发送键,而这个return键当作换行处理),最后不要忘记把换行符去掉
    #pragma mark - UITextView代理
    -(void)textViewDidChange:(UITextView *)textView{
        NSLog(@"%@",textView.text);
        // 监听Send事件--判断最后的一个字符是不是换行字符
        if ([textView.text hasSuffix:@"\n"]) {
            NSLog(@"发送操作");
            [self sendMessage:textView.text];
            // 清空textView的文字
            textView.text = nil;   
        }
    }
    
    // 把最后一个换行字符去除
    #warning 换行字符 只占用一个长度
        text = [text substringToIndex:text.length - 1];
    

    11. 聊天记录的存储机制(12.聊天界面-加载本地聊天记录)

    1. 环信也是存在本地数据库里的,数据库的消息体是json格式,网络上发送的消息体是xml嵌套json

    相关文章

      网友评论

          本文标题:16-环信(1)

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