博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
apicloud 环信总结
阅读量:5265 次
发布时间:2019-06-14

本文共 9256 字,大约阅读时间需要 30 分钟。

点击链接先查看一下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)                                });                            }                        });                      }                    }                  }                }            }        });

 

转载于:https://www.cnblogs.com/gqx-html/p/8317238.html

你可能感兴趣的文章
关于ExecuteNonQuery()返回值为-1
查看>>
Firefox修復QQ快速登錄
查看>>
PAT——1060. 爱丁顿数
查看>>
分布式技术追踪 2017年第二十期
查看>>
git添加公钥后报错sign_and_send_pubkey: signing failed: agent refused operation的解决办法
查看>>
Linux环境变量永久设置方法(zsh)
查看>>
MVC4.0 利用IActionFilter实现简单的后台操作日志功能
查看>>
脑袋卡在窗子里
查看>>
ruby 中文字符to_json后乱码(unicode)
查看>>
《大道至简》第六章读后感
查看>>
codeforce 597C-Subsequences(dp+树状数组)
查看>>
[android](学习笔记6)为应用程序添加对话框(1)
查看>>
windows下mongodb安装与使用
查看>>
rotate the clock
查看>>
bugku 变量
查看>>
Python 环境傻瓜式搭建 :Anaconda概述
查看>>
数据库01 /Mysql初识以及基本命令操作
查看>>
数据库02 /MySQL基础数据类型以及多表之间建立联系
查看>>
Python并发编程04/多线程
查看>>
CF461B Appleman and Tree
查看>>