因爲博主是做後端的,這裏介紹更偏向於後端
- 介紹融雲web端SDK
- 介紹融雲Server端API
- 客戶端融雲SDK集成
- 客服端融雲SDK集成
- 本地服務器端API編寫
融雲web端API介紹
初始化SDK
AppKey:融雲後臺創建應用的唯一標識
RongIMLib.RongIMClient.init("appkey");
設置監聽
必須設置監聽器後,再連接融雲服務器
// 設置連接監聽狀態 ( status 標識當前連接狀態 )
// 連接狀態監聽器
RongIMClient.setConnectionStatusListener({
onChanged: function (status) {
switch (status) {
case RongIMLib.ConnectionStatus.CONNECTED:
console.log('鏈接成功');
break;
case RongIMLib.ConnectionStatus.CONNECTING:
console.log('正在鏈接');
break;
case RongIMLib.ConnectionStatus.DISCONNECTED:
console.log('斷開連接');
break;
case RongIMLib.ConnectionStatus.KICKED_OFFLINE_BY_OTHER_CLIENT:
console.log('其他設備登錄');
break;
case RongIMLib.ConnectionStatus.DOMAIN_INCORRECT:
console.log('域名不正確');
break;
case RongIMLib.ConnectionStatus.NETWORK_UNAVAILABLE:
console.log('網絡不可用');
break;
}
}});
// 消息監聽器
RongIMClient.setOnReceiveMessageListener({
// 接收到的消息
onReceived: function (message) {
// 判斷消息類型
switch(message.messageType){
case RongIMClient.MessageType.TextMessage:
// message.content.content => 消息內容
break;
case RongIMClient.MessageType.VoiceMessage:
// 對聲音進行預加載
// message.content.content 格式爲 AMR 格式的 base64 碼
break;
case RongIMClient.MessageType.ImageMessage:
// message.content.content => 圖片縮略圖 base64。
// message.content.imageUri => 原圖 URL。
break;
case RongIMClient.MessageType.DiscussionNotificationMessage:
// message.content.extension => 討論組中的人員。
break;
case RongIMClient.MessageType.LocationMessage:
// message.content.latiude => 緯度。
// message.content.longitude => 經度。
// message.content.content => 位置圖片 base64。
break;
case RongIMClient.MessageType.RichContentMessage:
// message.content.content => 文本消息內容。
// message.content.imageUri => 圖片 base64。
// message.content.url => 原圖 URL。
break;
case RongIMClient.MessageType.InformationNotificationMessage:
// do something...
break;
case RongIMClient.MessageType.ContactNotificationMessage:
// do something...
break;
case RongIMClient.MessageType.ProfileNotificationMessage:
// do something...
break;
case RongIMClient.MessageType.CommandNotificationMessage:
// do something...
break;
case RongIMClient.MessageType.CommandMessage:
// do something...
break;
case RongIMClient.MessageType.UnknownMessage:
// do something...
break;
default:
// do something...
}
}
});
頁面聊天框消息構成:聊天框消息構成應該由融雲歷史消息記錄(RongIMLib.RongIMClient.getInstance().getHistoryMessages),加上消息監聽器(RongIMClient.setOnReceiveMessageListener),然後再加上發送消息時(RongIMClient.getInstance().sendMessage),將自己發送的消息也添加到聊天框
連接服務器
連接融雲必須在執行 RongIMLib.RongIMClient.init(appkey); 之後,並且所有除監聽以外的方法都必須在 connect成功之後 再調用。
重點:除監聽以外所有的接口都必須在連接成功以後調用,發送消息接口也要在連接成功後調用,
var token = "mKmyKqTSf7aNDinwAFMnz7NXKILeV3X0+CCRBOxmtOApmvQjMathViWrePIfq0GuTu9jELQqsckv4AhfjCAKgQ==";
RongIMClient.connect(token, {
onSuccess: function(userId) {
console.log("Connect successfully." + userId);
},
onTokenIncorrect: function() {
console.log('token無效');
},
onError:function(errorCode){
var info = '';
switch (errorCode) {
case RongIMLib.ErrorCode.TIMEOUT:
info = '超時';
break;
case RongIMLib.ConnectionState.UNACCEPTABLE_PAROTOCOL_VERSION:
info = '不可接受的協議版本';
break;
case RongIMLib.ConnectionState.IDENTIFIER_REJECTED:
info = 'appkey不正確';
break;
case RongIMLib.ConnectionState.SERVER_UNAVAILABLE:
info = '服務器不可用';
break;
}
console.log(errorCode);
}
});
token可以通過本地服務器請求融雲服務器獲取token,然後本地服務器將token返回給客戶端
消息接口
發送文本消息
var msg = new RongIMLib.TextMessage({content:"hello RongCloud!",extra:"附加信息"});
var conversationtype = RongIMLib.ConversationType.PRIVATE; // 單聊,其他會話選擇相應的消息類型即可。
var targetId = "xxx"; // 目標 Id
RongIMClient.getInstance().sendMessage(conversationtype, targetId, msg, {
onSuccess: function (message) {
//message 爲發送的消息對象並且包含服務器返回的消息唯一Id和發送消息時間戳
console.log("Send successfully");
},
onError: function (errorCode,message) {
var info = '';
switch (errorCode) {
case RongIMLib.ErrorCode.TIMEOUT:
info = '超時';
break;
case RongIMLib.ErrorCode.UNKNOWN_ERROR:
info = '未知錯誤';
break;
case RongIMLib.ErrorCode.REJECTED_BY_BLACKLIST:
info = '在黑名單中,無法向對方發送消息';
break;
case RongIMLib.ErrorCode.NOT_IN_DISCUSSION:
info = '不在討論組中';
break;
case RongIMLib.ErrorCode.NOT_IN_GROUP:
info = '不在羣組中';
break;
case RongIMLib.ErrorCode.NOT_IN_CHATROOM:
info = '不在聊天室中';
break;
default :
info = x;
break;
}
console.log('發送失敗:' + info);
}
}
);
獲取單羣聊歷史消息
var conversationType = RongIMLib.ConversationType.PRIVATE; //單聊,其他會話選擇相應的消息類型即可。
var targetId = "xxx"; // 想獲取自己和誰的歷史消息,targetId 賦值爲對方的 Id。
var timestrap = null; // 默認傳 null,若從頭開始獲取歷史消息,請賦值爲 0 ,timestrap = 0;
var count = 20; // 每次獲取的歷史消息條數,範圍 0-20 條,可以多次獲取。
RongIMLib.RongIMClient.getInstance().getHistoryMessages(conversationType, targetId, timestrap, count, {
onSuccess: function(list, hasMsg) {
// list => Message 數組。
// hasMsg => 是否還有歷史消息可以獲取。
},
onError: function(error) {
console.log("GetHistoryMessages,errorcode:" + error);
}
});