集成leancloud的js-SDK实现会话聊天

集成leancloud的js-SDK实现会话聊天
场景:
这次项目需求是订单在线聊天使用leanCloud实现,刚好leanCloud也又js-SDK.用户之间聊天通过js-sdk实现,不走我们项目后台的接口,后台服务端不接入leanCloud的sdk,好处是可以分散系统压力。
一,js-SDK的集成
我这边用到的是文本信息,与图片信息。首先下载js。
集成leancloud的js-SDK实现会话聊天
红色的是必须要的。
绿色的是支持富媒体消息的插件。
黄色的是用于做数据查询的。
二,使用时页面引入js
集成leancloud的js-SDK实现会话聊天
三,leanCloud初始化
先看leanCloud的初始化:
集成leancloud的js-SDK实现会话聊天
这里把聊天的一些够用方法都写到这个imMsg.js里了。注意引入这个js需要再3个基础js之后。
其中pushOfflineMessage设置为true是支持离线信息需要初始化的参数
plugins是注册富媒体信息插件支持,后面发送不同的消息需要使用不同的xxMessage对象new。
Event这里定义,是为了方便后面使用Event.xx。
四,用户登录
我这里用户登录是又订单号信息的,比如用户的登录id:订单号id_用户Id,实际就是为了区分用户的各个订单信息。
集成leancloud的js-SDK实现会话聊天

上面的sendHand就是登录对象了,以后发送信息就直接使用sendHand对象。登录就是一句话,使用realtime.createIMClient(当前用户id),这里使用的是订单id与用户id组合作为唯一的登录id。写完这句就告诉leanCloud我在线了。
里面的创建会话createConversation解释:
members:会话对象,就是要收到信息的成员,比如这里我加入了sendToId(订单id与用户id组合),以及其他2个用户id(分别就是自己与对方)
name:会话名字
unique:设置为true,表示后面其他地方登录后再返回会话conversation对象时,如果有包含我的对象存在,就返回,不会创建新的会话。我这里设置为true时为了保证一个订单一个会话。
下面的messageIterator时为了方便获取历史聊天记录创建的针对这个会话的迭代器。
五,信息的发送
集成leancloud的js-SDK实现会话聊天
文本信息,使用TextMessage对象new,扩展属性,使用setAttributes设置
集成leancloud的js-SDK实现会话聊天
图片信息,使用ImageMessage对象new,其他方法与文本基本一样的。
六,接收信息
用户登录与发送的用户应该是同一个。
集成leancloud的js-SDK实现会话聊天
这里获取到message对象后为了好看,就会判断是什么类型的消息,从而拼接不一样的html。
七,历史/离线信息获取
其实这2个事一样的,离线发的如果设置了那个支持离线的初始化属性,就会到历史里,否则云端事不会发送的。
集成leancloud的js-SDK实现会话聊天
里面的messageIterator对象就是登录的时候创建的。
八,聊天效果
集成leancloud的js-SDK实现会话聊天
到目前有一个坑的地方就是获取未读消息,未读消息在线可以实时的按照我的要求再列表展示,但是页面一旦刷新就没有了,光放说唯一方式是手动调用read()方法才会变为已读的,实际是一次就更新了未读数量。这里欢迎有做过的同仁指正。
先看代码:
集成leancloud的js-SDK实现会话聊天
使用的这个事件,只要有未读信息过来,会主动触发这个事件,然后再回调里面我就可以处理我的逻辑,比如把信息append到信息列表的最上面。但是我要是刷新了,就不会触发这个事件了。就值因为这个导致后面使用了一个查询,取最新的30跳会话,每隔会话取1条,比较事件判断是否读了,绕一大圈。项目期限也到了,就没有再折腾,有时间还要再看看。