点击链接先查看一下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(, ret.data.length - ).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 =
} else {
this_obj.newChat_int.unreadNum =
}
                                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 = ; 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(, time.length - )) 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(, firstListTxt.data.length - ).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(, time.length - ))
objectChat.unreadNum = objectChat.unreadNum +
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)
});
}
});
}
}
}
}
}
});

apicloud 环信总结的更多相关文章

  1. iOS-即时通讯-环信

    下载地址:http://www.easemob.com/downloads SDK目录讲解 1.从官网下载下来的包分为如下四部分: 环信iOS SDK 开发使用 环信iOS release note ...

  2. 环信Restfull API dotnetSDK

    Easemob.Restfull4Net 环信Restfull API dotnet的封装 支持的.Net Framework版本:4.0 API地址:http://docs.easemob.com/ ...

  3. 环信SDK集成

    利用环信SDK可以实现即时通讯,但在集成的过程中碰到了不少的坑. 注意 选择项目路径,这里以最新版环信demo为例 注意:环信的ChatDemoUI这个demo里边因为研发的同事为了照顾老版本的And ...

  4. 集成IOS 环信SDK

    集成IOS SDK 在您阅读此文档时,我们假定您已经具备了基础的 iOS 应用开发经验,并能够理解相关基础概念. 下载SDK 通过Cocoapods下载地址 不包含实时语音版本SDK(EaseMobC ...

  5. 环信SDK与Apple Watch的结合(2)

    这一篇主要是介绍怎么拖apple watch上的相关页面,附源码EMWatchOCDemo. 需要在工程中的“EMWatchOCDemo WatchKit App”中进行操作,该文件夹的结构如图 Wa ...

  6. 环信SDK与Apple Watch的结合(1)

    该系列是记录在apple watch上开发IM,用到了最近挺流行的环信IM SDK. 一.先来一段网上随处可查到的信息: 1.两种分辨率 1.65寸 312*390 1.5寸 272*340 2.开发 ...

  7. Android 环信的使用

    1.导入包 http://docs.easemob.com/doku.php?id=start:200androidcleintintegration:10androidsdkimport 在清单文件 ...

  8. 环信ipv6适配

    环信2.2.5及之后版本才适配了ipv6.可以自己搭配个ipv6环境,在ipv6环境下2.2.5以下版本无法登录.把整个sdk换成2.2.5版本项目需要改动的地方实在太多. 那么就部分换一下,适配ip ...

  9. 李洪强iOS开发本人集成环信的经验总结_01环信SDK的导入

    李洪强iOS开发本人集成环信的经验总结_01环信SDK的导入 01 - 直接在项目中导入SDK和一些静态库 这个时候,没有错误的编译没有错误的话,就说明SDK已经配置成功 还有一种方法是用cocoap ...

随机推荐

  1. Restful framework【第八篇】频率组件

    基本使用 频率: -限制每个ip地址一分钟访问10次 -写一个类 from rest_framework.throttling import SimpleRateThrottle class Visi ...

  2. Linux 系统下 matplotlib 中文乱码解决办法

    亲测有效的方法之一: 1.下载中文字体simhei.ttf SimHei可以到http://fontzone.net/download/simhei下载 2.找到matplotlib相关的font文件 ...

  3. gerrit的使用笔记

    1.clone的时候一定要同时选择上clone with commit-msg hook和ssh,这样才能使用change id,同时使用ssh push到remote. 2.如果是使用了clone ...

  4. gimp的使用笔记

    gimp是德国的开源软件! 跟其他软件一样, 包括file, edit, view, 还有select, color , filter, 和 window. 窗口window就包括所有的dockabl ...

  5. P3311 [SDOI2014]数数

    思路 看到多个子串并且不能包含的情况,想到了AC自动机 但是题目多了一个不能大于给出的n的限制条件,联想数位dp的过程,设f[i][j][0/1]表示在第i位,AC自动机的第j个节点,数位有/无限制的 ...

  6. (转) Supercharging Style Transfer

      Supercharging Style Transfer Wednesday, October 26, 2016 Posted by Vincent Dumoulin*, Jonathon Shl ...

  7. The more... the more句型

    百度文库:https://wenku.baidu.com/view/a7f1067f59fb770bf78a6529647d27284a73374b.html the more ... , the m ...

  8. Lintcode449-Char to Integer-Naive

    Description Convert a char to an integer. You can assume the char is in ASCII code (See Definition, ...

  9. BZOJ 1497: [NOI2006]最大获利(最大权闭合图)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1497 题意: 思路: 论文题,只要看过论文的话就是小菜一碟啦~ 每个用户群i作为一个结点分别向相应的 ...

  10. ext4.2常用的几种弹框

    以下记录了自己在做项目时,经常用到的几种ext弹框.项目中使用的ext是4.2版本的. 1. Ext.Msg.alert() 使用此种方式时,如果提示信息过长则提示信息会被覆盖掉一部分. Ext.Ms ...