个人理解的简单的即时通讯的实现流程
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的手机就会收到发送的消息。可以通过打印出来观摩一下。至此融云的集成基本完成一半了。
接下来我会写一下怎么把接收到的数据展示到聊天界面。