融雲提供消息發送服務,支持個人消息,群消息,討論組,聊天室消息, 以下是它涉及到的接口。
初始化,連接之后,可以使用。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/>
<title>rongCloud</title>
<link rel="stylesheet" type="text/css" href="api.css"/>
<style>
</style>
</head>
<body>
<div style="height: 200px;width: 200px;">rongCloud</div>
</body>
<script type="text/javascript" src="../../script/api.js"></script>
<script type="text/javascript" src="../../script/common.js"></script>
<script type="text/javascript">
var rong;
var user;
apiready = function(){
user = $api.getStorage('user');
rong = api.require('rongCloud2');
rong.init(function(ret, err) {
});
setConnectionStatusListener();
rong.connect({
token: user.rong_token
},function(ret, err) {
setOnReceiveMessageListener();
getCurrentUserId();
});
};
// 獲取當前用戶id
function getCurrentUserId() {
rong.getCurrentUserId(function(ret, err) {
api.toast({ msg: ret.result });
})
}
// 獲取消息通知免打擾時間
function getNotificationQuietHours() {
rong.getNotificationQuietHours(function(ret, err) {
api.toast({ msg: JSON.stringify(ret.result) });
})
}
// 移除消息免打擾時間
function removeNotificationQuietHours() {
rong.removeNotificationQuietHours(function(ret, err) {
api.toast({ msg: ret.status });
})
}
// 設置消息免打擾時間
function setNotificationQuietHours() {
rong.setNotificationQuietHours({
startTime: '22:00:00',
spanMinutes: 6
}, function(ret, err) {
api.toast({ msg: ret.status });
})
}
// 獲取黑名單
function getBlacklist() {
rong.getBlacklist(function(ret, err) {
api.toast({ msg: JSON.stringify(ret.result) });
})
}
// 查看某用戶是否在黑名單中
function getBlacklistStatus() {
rong.getBlacklistStatus({
userId: '171'
}, function(ret, err) {
api.toast({ msg: ret.status });
})
}
// 移除黑名單
function removeFromBlacklist() {
rong.removeFromBlacklist({
userId: '171'
}, function(ret, err) {
api.toast({ msg: ret.status });
})
}
// 加入黑名單
function addToBlacklist() {
rong.addToBlacklist({
userId: '171'
}, function(ret, err) {
api.toast({ msg: ret.status });
})
}
// 注銷登錄(不再接收 Push 消息)
function logout() {
rong.logout(function(ret, err) {
if (ret.status == 'error')
api.toast({ msg: err.code });
}); // 斷開,且不再接收 Push
}
// 獲取連接狀態
function getConnectionStatus() {
rong.getConnectionStatus(function(ret, err) {
api.toast({ msg: ret.result.connectionStatus });
})
}
// 退出聊天室
function quitChatRoom() {
rong.quitChatRoom({
chatRoomId: '123'
}, function(ret, err) {
if (ret.status == 'success')
api.toast({ msg: JSON.stringify(ret.status) });
else
api.toast({ msg: err.code });
})
}
// 加入聊天室
function joinChatRoom() {
rong.joinChatRoom({
chatRoomId: '123',
defMessageCount: 20
}, function(ret, err) {
if (ret.status == 'success')
api.toast({ msg: JSON.stringify(ret.status) });
else
api.toast({ msg: err.code });
})
}
// 退出群組
function quitGroup() {
rong.quitGroup({
groupId: '123'
}, function(ret, err) {
if (ret.status == 'success')
api.toast({ msg: JSON.stringify(ret.status) });
else
api.toast({ msg: err.code });
})
}
// 加入群組
function joinGroup() {
rong.joinGroup({
groupId: '123',
groupName: 'Ski Club'
}, function(ret, err) {
if (ret.status == 'success')
api.toast({ msg: JSON.stringify(ret.status) });
else
api.toast({ msg: err.code });
})
}
// 同步當前用戶所屬群組到融雲
function syncGroup() {
rong.syncGroup({
groups: [{
groupId: '123',
groupName: 'Ski Club',
portraitUrl: 'http://club.com/ski.jpg'
}, {
groupId: '456',
groupName: 'Diving Club',
portraitUrl: 'http://club.com/diving.jpg'
}]
}, function(ret, err) {
if (ret.status == 'success')
api.toast({ msg: JSON.stringify(ret.status) });
else
api.toast({ msg: err.code });
})
}
// 設置討論組成員邀請權限,討論組沒有圖像
function setDiscussionInviteStatus() {
rong.setDiscussionInviteStatus({
discussionId: 'e9f19096-5b44-4559-8eb0-0f139bde74e0',
inviteStatus: 'OPENED'
}, function(ret, err) {
if (ret.status == 'success')
api.toast({ msg: JSON.stringify(ret.status) });
else
api.toast({ msg: err.code });
})
}
// 退出討論組,會使討論組失效
function quitDiscussion() {
rong.quitDiscussion({
discussionId: 'e9f19096-5b44-4559-8eb0-0f139bde74e0'
}, function(ret, err) {
if (ret.status == 'success')
api.toast({ msg: JSON.stringify(ret.status) });
else
api.toast({ msg: err.code });
})
}
// 移除成員從討論組
function removeMemberFromDiscussion() {
rong.removeMemberFromDiscussion({
discussionId: 'e9f19096-5b44-4559-8eb0-0f139bde74e0',
userId: '171'
}, function(ret, err) {
if (ret.status == 'success')
api.toast({ msg: JSON.stringify(ret.status) });
else
api.toast({ msg: err.code });
})
}
// 向討論組添加成員
function addMemberToDiscussion() {
rong.addMemberToDiscussion({
discussionId: 'e9f19096-5b44-4559-8eb0-0f139bde74e0',
userIdList: ['16']
}, function(ret, err) {
if (ret.status == 'success')
api.toast({ msg: JSON.stringify(ret.status) });
else
api.toast({ msg: err.code });
})
}
// 獲取討論組
function getDiscussion(discussionId) {
rong.getDiscussion({
discussionId: discussionId
}, function(ret, err) {
if (ret.status == 'success')
alert(JSON.stringify(ret));
else
api.toast({ msg: err.code });
})
}
// 設置討論組名稱
function setDiscussionName() {
rong.setDiscussionName({
discussionId: 'e9f19096-5b44-4559-8eb0-0f139bde74e0',
name: '新討論組名稱'
}, function(ret, err) {
if (ret.status == 'success')
api.toast({ msg: JSON.stringify(ret.status) });
else
api.toast({ msg: err.code });
})
}
// 創建討論組
function createDiscussion() {
rong.createDiscussion({
name: 'Ironman, Batman',
userIdList: ['172', '16']
}, function(ret, err) {
if (ret.status == 'success')
{
getDiscussion(ret.result.discussionId);
}
else
{
api.toast({ msg: err.code });
}
})
}
// 清除草稿會話,草稿估計只有一個
function clearTextMessageDraft() {
rong.clearTextMessageDraft({
conversationType: 'PRIVATE',
targetId: '172'
}, function(ret, err) {
api.toast({ msg: ret.status });
})
}
// 保存消息草稿
function saveTextMessageDraft() {
rong.saveTextMessageDraft({
conversationType: 'PRIVATE',
targetId: '172',
content: 'Hello w'
}, function(ret, err) {
api.toast({ msg: ret.status });
})
}
// 獲取消息草稿
function getTextMessageDraft() {
rong.getTextMessageDraft({
conversationType: 'PRIVATE',
targetId: '172'
}, function(ret, err) {
api.toast({ msg: ret});
})
}
// 設置某一消息的附加信息
function setMessageExtra() {
rong.setMessageExtra({
messageId: '1',
value: '額外的信息'
}, function(ret, err) {
api.toast({ msg: ret.status });
})
}
// 清除某一會話的消息未讀狀態
function clearMessagesUnreadStatus() {
rong.clearMessagesUnreadStatus({
conversationType: 'PRIVATE',
targetId: '172'
}, function(ret, err) {
api.toast({ msg: ret.status });
})
}
// 設置接收的消息狀態
function setMessageReceivedStatus() {
rong.setMessageReceivedStatus({
messageId: '1',
receivedStatus: 'READ'
}, function(ret, err) {
api.toast({ msg: ret.status });
})
}
// 獲取某些類型的未讀消息數
function getUnreadCountByConversationTypes() {
rong.getUnreadCountByConversationTypes({
conversationTypes: ['PRIVATE', 'GROUP']
}, function(ret, err) {
api.toast({ msg: ret.result });
})
}
// 獲取某一會話的未讀消息數
function getUnreadCount() {
rong.getUnreadCount({
conversationType: 'PRIVATE',
targetId: '172'
}, function(ret, err) {
api.toast({ msg: ret.result });
})
}
// 獲取所有未讀消息數
function getTotalUnreadCount() {
rong.getTotalUnreadCount(function(ret, err) {
api.toast({ msg: ret.result });
})
}
// 清空某一會話的所有聊天消息記錄,清除的是融雲系統的聊天數據
function clearMessages() {
rong.clearMessages({
conversationType: 'PRIVATE',
targetId: '172'
}, function(ret, err) {
api.toast({ msg: ret.status });
})
}
// 刪除指定的一條或者一組消息
function deleteMessages() {
rong.deleteMessages({
messageIds: [50, 51] // 刪除指定的id消息
}, function(ret, err) {
api.toast({ msg: ret.status });
})
}
// 獲取歷史消息通過對象名稱
function getHistoryMessagesByObjectName() {
rong.getHistoryMessagesByObjectName({
conversationType: 'PRIVATE',
targetId: '172',
objectName: 'RC:TxtMsg',
oldestMessageId: 0,
count: 20
}, function(ret, err) {
api.toast({ msg: JSON.stringify(ret) });
})
}
// 獲取消息記錄
function getHistoryMessages() {
// 之前調用 init 和 connect 的代碼省略
rong.getHistoryMessages({
conversationType: 'PRIVATE',
targetId: '172',
oldestMessageId: 0, // 獲取此id之后的最新消息
count: 20
}, function(ret, err) {
api.toast({ msg: JSON.stringify(ret) });
})
}
// 獲取某一會話的最新消息
function getLatestMessages() {
rong.getLatestMessages({
conversationType: 'PRIVATE',
targetId: '172',
count: 20
}, function(ret, err) {
api.toast({ msg: JSON.stringify(ret) });
})
}
// 獲取某一會話的通知狀態
function getConversationNotificationStatus() {
rong.getConversationNotificationStatus({
conversationType: 'PRIVATE',
targetId: '172'
}, function(ret, err) {
if (ret.status == 'success')
api.toast({ msg: ret.result.code });
else
api.toast({ msg: err.code });
})
}
// 設置會話置頂
function setConversationToTop() {
rong.setConversationToTop({
conversationType: 'PRIVATE',
targetId: '172',
isTop: true
}, function(ret, err) {
api.toast({ msg: ret.status });
})
}
// 清除所有會話
function clearConversations() {
rong.clearConversations({
conversationTypes: ['PRIVATE', 'GROUP']
}, function(ret, err) {
api.toast(JSON.stringify(ret));
})
}
// 移除會話
function removeConversation() {
rong.removeConversation({
conversationType: 'PRIVATE',
targetId: '172'
}, function(ret, err) {
api.toast(JSON.stringify(ret));
});
}
// 獲取會話,會話最后一條消息
function getConversation() {
rong.getConversation({
conversationType: 'PRIVATE',
targetId: '172'
}, function(ret, err) {
api.toast({ msg: JSON.stringify(ret.result) });
})
}
// 監聽消息接收
function setOnReceiveMessageListener() {
rong.setOnReceiveMessageListener(function(ret, err) {
api.toast({ msg: JSON.stringify(ret.result.message) });
})
}
// 發送命令消息
function sendCommandMessage() {
rong.sendCommandMessage({
conversationType: 'PRIVATE',
targetId: '172',
name: 'AddFriend',
data: '{\"inviteUserId\":16}'
}, function(ret, err) {
if (ret.status == 'prepare')
api.toast({ msg: JSON.stringify(ret.result.message) });
else if (ret.status == 'success')
api.toast({ msg: ret.result.message.messageId });
else if (ret.status == 'error')
api.toast({ msg: err.code });
});
}
// 發送命令消息
function sendCommandNotificationMessage() {
rong.sendCommandNotificationMessage({
conversationType: 'PRIVATE',
targetId: '172',
name: 'AddFriend',
data: '{\"inviteUserId\":16}'
}, function(ret, err) {
if (ret.status == 'prepare')
api.toast({ msg: JSON.stringify(ret.result.message) });
else if (ret.status == 'success')
api.toast({ msg: ret.result.message.messageId });
else if (ret.status == 'error')
api.toast({ msg: err.code });
});
}
// 發送位置消息 雲路通APP暫不支持
function sendLocationMessage() {
rong.sendLocationMessage({
conversationType: 'PRIVATE',
targetId: '172',
latitude: 39.9139,
longitude: 116.3917,
poi: '北京市朝陽區北苑路北辰泰岳大廈',
imagePath: 'fs://res/test.jpg',
extra: ''
}, function(ret, err) {
if (ret.status == 'prepare')
api.toast({ msg: JSON.stringify(ret.result.message) });
else if (ret.status == 'progress')
api.toast({ msg: ret.result.progress });
else if (ret.status == 'success')
api.toast({ msg: ret.result.message.messageId });
else if (ret.status == 'error')
api.toast({ msg: err.code });
});
}
// 發送富文本文件 雲路通APP暫不支持
function sendRichContentMessage(title,des,imageUrl) {
rong.sendRichContentMessage({
conversationType: 'PRIVATE',
targetId: '172',
title: title,
description: des,
imageUrl: imageUrl,
extra: ''
}, function(ret, err) {
if (ret.status == 'prepare')
api.toast({ msg: JSON.stringify(ret.result.message) });
else if (ret.status == 'success')
api.toast({ msg: ret.result.message.messageId });
else if (ret.status == 'error')
api.toast({ msg: err.code });
});
}
// 語音消息
function sendVoiceMessage(voicePath) {
rong.sendVoiceMessage({
conversationType: 'PRIVATE',
targetId: '172',
voicePath: voicePath,
duration: 5,
extra: ''
}, function(ret, err) {
if (ret.status == 'prepare')
api.toast({ msg: JSON.stringify(ret.result.message) });
else if (ret.status == 'success')
api.toast({ msg: ret.result.message.messageId });
else if (ret.status == 'error')
api.toast({ msg: err.code });
});
}
// 監聽鏈接狀態
function setConnectionStatusListener() {
rong.setConnectionStatusListener(function(ret, err) {
api.toast({ msg: ret.result.connectionStatus });
});
}
// 斷開鏈接
function disconnect() {
// 之前調用 init 和 connect 的代碼省略
rong.disconnect({
isReceivePush: true
}, function(ret, err) {
if ('success' == ret.status) {
api.toast({ msg: '斷開連接成功!' });
}
});
}
// 發送文字消息
function sendTextMessage(msg) {
rong.sendTextMessage({
conversationType: 'PRIVATE',
targetId: '172',
text: msg,
extra: ''
}, function(ret, err) {
if (ret.status == 'prepare')
api.toast({ msg: JSON.stringify(ret.result.message) });
else if (ret.status == 'success')
api.toast({ msg: ret.result.message.messageId });
else if (ret.status == 'error')
api.toast({ msg: err.code });
});
}
// 發送圖片消息
function sendImageMessage(imagePath) {
rong.sendImageMessage({
conversationType: 'PRIVATE',
targetId: '172',
imagePath: imagePath,
extra: ''
}, function(ret, err) {
if (ret.status == 'prepare')
api.toast({ msg: JSON.stringify(ret.result.message) });
else if (ret.status == 'progress')
api.toast({ msg: ret.result.progress });
else if (ret.status == 'success')
api.toast({ msg: ret.result.message.messageId });
else if (ret.status == 'error')
api.toast({ msg: err.code });
});
}
</script>
</html>
ps:可以學學人家的接口命名,非常的規划,功能很齊全。設置set,獲取get,增加add,移除remove,同步sync,發送send等采用駝峰命名。基本滿足了APP的需要。
融雲消息的理解
融雲提供雲數據,存儲你的app中的聊天數據,
如果唯一呢?它提供一個appkey,appSecret來確定你的app。
它提供用戶存儲,有user_id,有token。
通過token,獲取user_id信息。
通過目標user_id進行通訊聊天。
它還保存一些群id,討論組id,聊天室id等信息。
你可以自己把這些信息,同步到你自己的數據庫中,或者用sqlite,或者用sqlserver。