個人理解的簡單的即時通訊的實現流程
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的手機就會收到發送的消息。可以通過打印出來觀摩一下。至此融雲的集成基本完成一半了。
接下來我會寫一下怎麼把接收到的數據展示到聊天界面。