dao-im-sdk guide
Install&Usage (安装&使用)
# Install(安装)
npm install --save dao-im-sdk
# Usage(使用)
//浏览器
<script src="//unpkg.com/dao-im-sdk@1.0.4/index.js"></script>
<script> console.log(imsdk);</script>
//ES6
import imsdk from 'dao-im-sdk'
// commonjs
const imsdk = require('dao-im-sdk')
发送消息格式
{
"code": "USER_INFO", # 事件码(必填项)
"data": "xxxxxxx", # 发送给服务器数据(aes加密)
"mes": "获取用户信息" # 操作说明
}
返回消息格式
{
"code": "USER_INFO", # 事件码
"data": "xxxxxxxxx", # 响应的数据(first为true时使用ras解密,否则aes解密)
"first": false, # 是否是创建连接以来第一次响应数据
"mes": "获取用户信息",# 提示信息(status 为false时可能需要展示给用户看)
"status": true # 本次操作状态 true成功,false失败
}
Api 使用指南
imsdk类,IM即时通讯SDK.
new imsdk(url, wsUrl, wsConfig, pingTimeout, pongTimeout, reconnectTimeout, pingMsg, repeatLimit, isEncrypt, theme)
options 传入参数
Name |
Type |
Description |
url |
String |
http链接地址. |
wsUrl |
String |
websocket链接地址. |
wsConfig |
Object |
websocket 参数配置. |
pingTimeout |
Number |
未收到消息多少秒之后发送ping请求,默认15000毫秒. |
pongTimeout |
Number |
发送ping之后,未收到消息超时时间,默认10000毫秒. |
reconnectTimeout |
Number |
重连等待时间,默认2000毫秒. |
pingMsg |
String |
心跳检测默认值,默认ping. |
repeatLimit |
Number |
最大重连次数. |
isEncrypt |
Boolean |
是否启用RSA/AES加密(注意:启用需要后端配合开发). |
theme |
Object |
主题皮肤(窗口配置). |
Methods 方法
Name |
Type |
Description |
callback() |
Object |
callback 操作回调监听(含onmessage、onclose、onopen、onreconnect、onerror等) |
close() |
Object |
关闭webocket连接 |
onclose() |
Object |
websocket关闭监听 |
onerror() |
Object |
websocket错误监听 |
onmessage() |
Object |
websocket通知消息监听 |
onopen() |
Object |
websocket打开监听 |
onreconnect() |
Object |
websocket断线重连监听 |
onSend() |
Object |
websocket 发送消息方法(传入Object(固定格式的参数)) |
setAesIv(iv) |
String |
设置AES偏移量(默认为ABCDEF1234123412) |
setAesKey(key) |
String |
设置aes密钥 |
setRsaPrivateKey(key) |
String |
设置rsa私钥 |
setRsaPublicKey(key) |
String |
设置rsa公钥 |
formatData() |
Object |
解析onMessage Data接受的数据(后端websocket推送的内容解密) |
formatDataSend() |
Object |
编码onSend Data发送的数据(前端websocket推送的内容加密) |
getRSAWsConfig() |
String |
获取ws配置的RSA加密串(根据wsConfig传入的参数生成RSA加密串) |
getRSAWsConfigBase64() |
String |
获取ws配置的RSA加密串base64编码(根据wsConfig传入的参数生成RSA加密串(进行BASE64编码)) |
传入参数
//zd 0:小程序 1:PC 2:手机WEB -1:银行端APP
//lx 1:企业用户, 2:个人用户,3:银行, 4:平台客服
//ws://20.168.1.234:8085/ws?p=(sessionId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&zd=1&lx=1)
//--------------------------------------------
var mesMap = {
PING_PONG: "检测心跳",
NEW_MESSAGE: "新消息",
USER_INFO: "获取用户信息",
READ_MESSAGE: "读消息",
SEND_MESSAGE: "发送消息",
UPDATE_KEY: "更新rsa key",
SERVER_ERROR: "服务器错误",
HISTORY_LIST: "获取历史会话列表",
REMOVE_MESSAGE: "移除会话消息",
RECEIVE_MESSAGE_STATUS: "消息状态",
HISTORY_MESSAGE_LIST: "获取历史消息列表",
UNREAD_MESSAGE_TOTAL: "获取该用户未读消息总数",
};
//初始化实例
let im = new imsdk({
isEncrypt:true,
wsUrl:"ws://127.0.0.1:3001",
wsConfig: {
zd: -1,
lx: 1,
token: "66a33a46-5031-42bd-b624-8460036d28e6",
t: new Date().getTime(),
}
});
im.callback = function (e) {
console.log("callback监听()=>", e);
if(e.event==="onmessage"){
console.log("onmessage=>",e.data)
}else{
console.log("callback=>",e)
}
}
// 初始化更新
if (event === "onmessage" && data.code != "PING_PONG") {
for (const i in mesMap) {
if (mesMap.hasOwnProperty(i)) {
const el = mesMap[i];
if (data.code === "UPDATE_KEY") {
im.setAesKey(data.data);
}
if (data.code === i) {
console.log("【" + el + "=>】", data.data || null);
}
}
}
}
# 下面无关紧要的代码
//自动生成事件绑定
var getId = function (id) {
return document.getElementById(id);
};
var html = "";
for (const i in mesMap) {
if (mesMap.hasOwnProperty(i)) {
const el = mesMap[i];
html +=
'<button style="margin-bottom:10px" id="' +
i +
'">' +
el +
"</button></br>";
}
}
getId("examples").innerHTML = html;
var btns = getId("examples").querySelectorAll("button");
for (let i = 0; i < btns.length; i++) {
btns[i].onclick = function (e) {
// console.log(e.target.id, e.target.innerHTML);
var code = e.target.id;
if(code==="pong"){
im.onSend("pong");
}
im.onSend({
code: code,
data: { text: e.target.innerHTML },
mes: "",
//user:code!="PING_PONG" && "MqZNRtRIS0K7Al13SbBXSQ==" || "" //无关紧要的代码
});
};
}