zoukankan      html  css  js  c++  java
  • apicloud 环信总结

    点击链接先查看一下apicloud 环信的文档

    https://docs.apicloud.com/Client-API/Open-SDK/easeChat

    文档中写了很多,但官方给的文档还是有问题,之前做环信就被坑了一把,没有实现自己想要的功能,最后把所有的数据都推翻了以后,重新又写了一番,最终只采用了官方文档中的登录,退出登录,发送消息,与接收消息四个地方,聊天界面学员自己搭建,同时聊天的会话记录,页需要自己搭建,聊天消息的存储,等等

    下面我只把精华的部分,登录与退出登录可参考官方文档,重点说一下搭建聊天,晒出,有兴趣的伙伴可以按照步骤去了解,

    1.首先需要在apicloud中引模板easeChat,之后再html页面调用

    var easeChat = api.require('easeChat');

    2.之后我们需要确定的就是,单人聊天,还是多人聊天,在这里我只讲单人聊天

    3.单人聊天,如果你有10个好友,那你需要创建11个本地文件,10个好友聊天记录文件,1个会话列表文件

    4.本地存储文件看下面

                                api.writeFile({
                                    path: 'cache://' + this_obj.info.your + '.txt',   //this_obj.info.your存储的是对方的环信账号
                                    data: JSON.stringify(ret.message) + ';',  //ret.message
                                    append: true
                                }, function(res, err) {
                                    if (res.status) {
    
                                    } else {
                                        api.alert({
                                            msg: JSON.stringify(err)
                                        });
                                    }
                                });

    5.读取存储文件看下面

                          api.readFile({
                              path: 'cache://' + this_obj.info.your + '.txt'  //this_obj.info.your读取存储对方的环信账号
                          }, function(ret, err) {
                              if (ret.status) {
                                  var array = [];
                                  array = ret.data.substring(0, ret.data.length - 1).split(';')   
                                  this_obj.imgChat = []
                                  for (i in array) {
                                      var objectChat = JSON.parse(array[i])
                                      this_obj.chatMsg.push(objectChat)   //将会话截成数组,组成聊天记录
                                  }
                              } else {
                                  api.toast({
                                      msg: '没有聊天记录'
                                  });
                              }
                          });

    6.聊天记录搭建好了,开始搭建会话列表了,会话列表需要好友头像,本人头像,好友环信名字,本人环信名字,未读消息,最后一条消息的时间,还有最后一条消息,共7点,前5点需要从好友列表的中得到,未读消息需要默认每个好友未读条数都为0,将一个人的数据组成对象,然后好友有多个,需要把这些都放在数组中,

    后2点,需要你接收消息的时候将返回的数据,根据环信的名字去判断是你的哪个好友,然后把信息放在会话列表中,这里说的太多了,需要给你们看一下文件

     (1) 这个是好友列表本地存储文件common_ajax这个是调用的ajax封装的方法,

                            var data = {token: this_obj.token,us_id: ''};
                            var url = "/Info/my_friend";
                            common_ajax(url,data,function(res){
                                this_obj.list = res.info
                                for (i in this_obj.list.list) {
                                    if (typeof this_obj.newChat_int.your_info === 'undefined') {
                                        this_obj.newChat_int.your_info = {}
                                        this_obj.newChat_int.your_info = this_obj.list.list[i].info.us_nickname
                                    } else {
                                        this_obj.newChat_int.your_info = this_obj.list.list[i].info.us_nickname
                                    }
                                    if (typeof this_obj.newChat_int.your_img === 'undefined') {
                                        this_obj.newChat_int.your_img = {}
                                        this_obj.newChat_int.your_img = this_obj.list.list[i].info.us_img
                                    } else {
                                        this_obj.newChat_int.your_img = this_obj.list.list[i].info.us_img
                                    }
                                    if (typeof this_obj.newChat_int.yourId === 'undefined') {
                                        this_obj.newChat_int.yourId = {}
                                        this_obj.newChat_int.yourId = this_obj.list.list[i].info.us_hx_username
                                    } else {
                                        this_obj.newChat_int.yourId = this_obj.list.list[i].info.us_hx_username
                                    }
                                    if (typeof this_obj.newChat_int.my_Name === 'undefined') {
                                        this_obj.newChat_int.my_Name = {}
                                        this_obj.newChat_int.my_Name = this_obj.list.list[i].my.us_nickname
                                    } else {
                                        this_obj.newChat_int.my_Name = this_obj.list.list[i].my.us_nickname
                                    }
                                    if (typeof this_obj.newChat_int.my_img === 'undefined') {
                                        this_obj.newChat_int.my_img = {}
                                        this_obj.newChat_int.my_img = this_obj.list.list[i].my.us_img
                                    } else {
                                        this_obj.newChat_int.my_img = this_obj.list.list[i].my.us_img
                                    }
                                    if (typeof this_obj.newChat_int.unreadNum === 'undefined') {
                                        this_obj.newChat_int.unreadNum = {}
                                        this_obj.newChat_int.unreadNum = 0
                                    } else {
                                        this_obj.newChat_int.unreadNum = 0
                                    }
                                    if (typeof this_obj.newChat_int.chat=== 'undefined') {
                                        this_obj.newChat_int.chat= {}
                                    } else {
                                        this_obj.newChat_int.chat= {}
                                    }
    
    
                                    api.writeFile({
                                            path: 'cache://chat_img_txt.txt',
                                            data: JSON.stringify(this_obj.newChat_int) + ';',
                                            append: true
                                    }, function(res, err) {
                                            if (res.status) {
                                                    // alert('好友存储')
                                            } else {
                                                    api.alert({
                                                            msg: JSON.stringify(err)
                                                    });
                                            }
                                    });
                                }
                            },function(res){
                                api.toast({
                                        msg: res.info
                                });
                            });

     7.接收到消息以后,会得到的消息的messageId,这个id其实就是好友的环信名字,将会话列表循环用每个好友的环信名字与这个消息的id去对比,如果相同,那么就把这个接收到的消息,放在会话列表下这个好友的chat对象中,就可以了,

    接收的时候可能在聊天页面,也可能在聊天外的页面,所以需要全局监听这个聊天信息,你可以在app.js中写一个全局的方法,这样方便去使用,还有提醒的是,接收到的消息有可能是一个数组,所以,需要循环去拿到messageId,下面看一下代码

            easeChat.addMessageListener({
                name: 'receive'
            }, function(ret) {
                if (ret.messages) {
                  var firstListTxt = {};
                  firstListTxt = app.firstListTxt
                    for (var i = 0; i < ret.messages.length; i++) {
                      if (ret.messages[i].from == app.info.your) {
                        api.writeFile({
                            path: 'cache://' + app.info.your + '.txt',
                            data: JSON.stringify(ret.messages[i]) + ';',
                            append: true
                        }, function(res, err) {
                            if (res.status) {
                                // alert('接收已存储')
                            } else {
    
                            }
                        });
    
                        var objectChat = ret.messages[i]
                        var time = objectChat.timestamp.toString()
                        objectChat.timestamp = formatDate(time.substring(0, time.length - 3))
    
                        if (typeof objectChat.body.arr === 'undefined') {
                            objectChat.body.arr = [];
                            objectChat.body.arr = app.emotionFun(objectChat.body.text)
                        } else {
                            objectChat.body.arr = app.emotionFun(objectChat.body.text)
                        }
                      } else {
                        var messages = ret.messages[i]
                        var arrayt = [];
                        arrayt = firstListTxt.data.substring(0, firstListTxt.data.length - 1).split(';')
    
                        for (j in arrayt) {
                          var objectChat = JSON.parse(arrayt[j])
                          if (objectChat.yourId == messages.from) {
                            var time = messages.timestamp.toString()
                            messages.timestamp = formatDate(time.substring(0, time.length - 3))
                            objectChat.unreadNum = objectChat.unreadNum + 1
                            app.chat_int = objectChat
                            app.newChat_int = objectChat
                            //存储fistlist
                            api.writeFile({
                                path: 'cache://' + messages.from + '.txt',
                                data: JSON.stringify(messages) + ';',
                                append: true
                            }, function(res, err) {
                                if (res.status) {
                                  // alert('存储对方会话成功')
                                  app.chatSever(messages)
                                } else {
                                    api.alert({
                                        msg: JSON.stringify(err)
                                    });
                                }
                            });
                          }
                        }
                      }
                    }
                }
            });
  • 相关阅读:
    Mongodb在windows下的安装和启动
    git操作的常用命令
    删除smartygit的配置文件
    注册树模式
    关于js的一些基础知识点
    关于mysql的初步学习 (五)
    关于mysql的初步学习 (四)
    关于mysql的初步学习 (三)
    关于mysql的初步学习 (二)
    关于数据库建表时的有趣实例--关键字重复
  • 原文地址:https://www.cnblogs.com/gqx-html/p/8317238.html
Copyright © 2011-2022 走看看