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(, 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 环信总结的更多相关文章
- iOS-即时通讯-环信
下载地址:http://www.easemob.com/downloads SDK目录讲解 1.从官网下载下来的包分为如下四部分: 环信iOS SDK 开发使用 环信iOS release note ...
- 环信Restfull API dotnetSDK
Easemob.Restfull4Net 环信Restfull API dotnet的封装 支持的.Net Framework版本:4.0 API地址:http://docs.easemob.com/ ...
- 环信SDK集成
利用环信SDK可以实现即时通讯,但在集成的过程中碰到了不少的坑. 注意 选择项目路径,这里以最新版环信demo为例 注意:环信的ChatDemoUI这个demo里边因为研发的同事为了照顾老版本的And ...
- 集成IOS 环信SDK
集成IOS SDK 在您阅读此文档时,我们假定您已经具备了基础的 iOS 应用开发经验,并能够理解相关基础概念. 下载SDK 通过Cocoapods下载地址 不包含实时语音版本SDK(EaseMobC ...
- 环信SDK与Apple Watch的结合(2)
这一篇主要是介绍怎么拖apple watch上的相关页面,附源码EMWatchOCDemo. 需要在工程中的“EMWatchOCDemo WatchKit App”中进行操作,该文件夹的结构如图 Wa ...
- 环信SDK与Apple Watch的结合(1)
该系列是记录在apple watch上开发IM,用到了最近挺流行的环信IM SDK. 一.先来一段网上随处可查到的信息: 1.两种分辨率 1.65寸 312*390 1.5寸 272*340 2.开发 ...
- Android 环信的使用
1.导入包 http://docs.easemob.com/doku.php?id=start:200androidcleintintegration:10androidsdkimport 在清单文件 ...
- 环信ipv6适配
环信2.2.5及之后版本才适配了ipv6.可以自己搭配个ipv6环境,在ipv6环境下2.2.5以下版本无法登录.把整个sdk换成2.2.5版本项目需要改动的地方实在太多. 那么就部分换一下,适配ip ...
- 李洪强iOS开发本人集成环信的经验总结_01环信SDK的导入
李洪强iOS开发本人集成环信的经验总结_01环信SDK的导入 01 - 直接在项目中导入SDK和一些静态库 这个时候,没有错误的编译没有错误的话,就说明SDK已经配置成功 还有一种方法是用cocoap ...
随机推荐
- Flask学习【第4篇】:用Flask的扩展实现的简单的页面登录
from flask import Flask,render_template,request,redirect,session app = Flask(__name__,template_folde ...
- 终于明白vim 和 grep 中 的正则表达式的用法, vim 正则表达式 和grep基本正则表达式 几乎一样
要搞清楚 vim中的正则和普通的Perl正则表达式的区别: 因为在perl中所有的元字符 都可以直接使用, 不需要在 元字符的前面加 反斜杠. 但是在vim, 包括grep中就有所区别, 同样是元字符 ...
- MySQL 日期时间函数
目录 datetime和timestamp区别: timestamp类型字段特殊性: Mysql获取日期时间函数: now() curdate() curtime() Extract() last_d ...
- 取球游戏|2012年蓝桥杯B组题解析第十题-fishers
(25')取球游戏 今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断. 我们约定: 每个人从盒子中取出 ...
- ZOJ 3962 Seven Segment Display(数位DP)题解
题意:给一个16进制8位数,给定每个数字的贡献,问你贡献和. 思路:数位DP,想了很久用什么表示状态,看题解说用和就行,其他的都算是比较正常的数位DP. 代码: #include<iostrea ...
- oracle 之 包,包体创建和使用案例
先创建包,再创建包体---------------创建包体--------------------- create or replace package body pkg_yygl_service I ...
- 【bzoj1706】[usaco2007 Nov]relays 奶牛接力跑
题意 给出一张无向图,求出恰巧经过n条边的最短路. 题解 考虑先离散化,那么点的个数只会有202个最多.于是复杂度里面就可以有一个\(n^3\).考虑构造矩阵\(d^1\)表示经过一条边的最短路,那么 ...
- P4008 [NOI2003]文本编辑器
思路 FHQ Treap的板子 用FHQ Treap维护中序遍历序列即可 然后数组开够! 代码 #include <cstdio> #include <cstring> #in ...
- [CodeForce 801A] Vicious Keyboard
题目链接:http://codeforces.com/problemset/problem/801/A 思路:题目中字符串的长度最长100个字符,所以,可以考虑用暴力,先遍历一遍匹配"VK& ...
- spring-tool-suite使用教程,并创建spring配置文件
本文为博主原创,未经允许不得转载: 在应用springMVC框架的时候,每次创建spring的xml配置文件时,需要很多步骤,非常麻烦. 所以spring提供了spring-tool-suite插件, ...