个人理解的简单的即时通讯的实现流程 1、A做出发送消息给B的动作 2、B收到A发来的消息 3、通过聊天的窗口显示出来 下面的步骤可以省略 4、B返回A一个已经查看的消息 5、A收到B已经查看的消息通过聊天的窗口显示出来
实现这个流程的基础要素 1、AB双方的融云模块都应经打开,并且网络连接没有问题。 2、AB双方都已经是融云的用户,取得融云的token。 3、连接融云的服务器 在程序中的操作如下: 服务端:配置获取融云token的程序 客户端: 1、配置融云的参数 在 config.xml 中设置内容如下:
<feature name="rongCloud2"> <param name="appKey" value="此处填写 App Key 值" /> </feature>2、对融云进行初始化 init(callback(ret, err))
var rong = api.require('rongCloud2'); rong.init(function(ret, err){ if (ret.status == 'error') api.toast({ msg: err.code }); });返回值的代码如下
{ status: 'success', // 状态码:success / error } //错误的返回码 { code: -10002 // 错误码 }3、监听连接状态 setConnectionStatusListener(callback(ret, err))
var rong = api.require('rongCloud2'); // 之前调用 init 的代码省略 rong.setConnectionStatusListener(function(ret, err){ api.toast({ msg: ret.result.connectionStatus }); }); // 之后调用 connect 的代码省略返回值如下
{ result: { connectionStatus: 'CONNECTED' // 连接状态 //取值范围 //CONNECTED // 连接成功 //CONNECTING // 连接中 //DISCONNECTED // 断开连接 //KICKED // 用户账户在其他设备登录,本机会被踢掉线 //NETWORK_UNAVAILABLE // 网络不可用 //SERVER_INVALID // 服务器异常或无法连接 //TOKEN_INCORRECT // Token 不正确 } }4、监听所有消息(根据文档规定是在connect之前调用) 所有接收到的消息、通知、状态都经由此处设置的监听器处理。包括私聊消息、讨论组消息、群组消息、聊天室消息以及各种其他消息、通知、状态等 setOnReceiveMessageListener(callback(ret, err))
var rong = api.require('rongCloud2'); // 之前调用 init 的代码省略 rong.setOnReceiveMessageListener(function (ret, err) { api.toast({ msg: JSON.stringify(ret.result.message) }); api.toast({ msg: ret.result.message.left }); }) // 之后调用 connect 的代码省略返回值特别注意下
{ result: { message: { content: { text: 'Hello world!', extra: '' }, // 消息内容 conversationType: 'PRIVATE', // 参见 会话类型 枚举 messageDirection: 'SEND', // 消息方向:SEND 或者 RECEIVE targetId: '55', // 这里对应消息发送者的 userId objectName: 'RC:TxtMsg', // 消息类型,参见 http://docs.rongcloud.cn/android_message.html#_内置内容类消息 sentStatus: 'SENDING', // 发送状态:SENDING, SENT 或 FAILED senderUserId: '55', // 发送者 userId messageId: 608, // 本地消息 Id sentTime: 1418971531533, // 发送消息的时间戳,从 1970 年 1 月 1 日 0 点 0 分 0 秒开始到现在的毫秒数 receivedTime: 0 // 收到消息的时间戳,从 1970 年 1 月 1 日 0 点 0 分 0 秒开始到现在的毫秒数 }, left: 0 // 剩余未拉取的消息数目 } }5、连接融云 IM 服务器 connect({params}, callback(ret, err))
这里就需要传递参数了,参数只有一个token,用于服务器识别当前登录的账号,并返回账号的ID
var rong = api.require('rongCloud2'); rong.init(function(ret, err){ if (ret.status == 'error') api.toast({ msg: err.code }); }); rong.connect({ token: 'ThptTWyiPPPvZHvuSiuri82yq+hfEluLjZ78E1qo4hEVSFQNpqdoPu406urMWKN4Z3/olWR+v9JVLAwfOQoLrA=="}, function(ret, err){ if (ret.status == 'success') api.toast({ msg: ret.result.userId }); });返回值
{ status: 'success', // 状态码:success / error result: { userId: '9527' // 当前登录的用户 Id } }集成到这里,通过写死一个发送的函数。固定发送给用户B,这是登录用户B的手机就会收到发送的消息。可以通过打印出来观摩一下。至此融云的集成基本完成一半了。 接下来我会写一下怎么把接收到的数据展示到聊天界面。