融云提供消息发送服务,支持个人消息,群消息,讨论组,聊天室消息, 以下是它涉及到的接口。

初始化,连接之后,可以使用。

<!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。

融云消息接口apicloud的更多相关文章

  1. 融云技术分享:解密融云IM产品的聊天消息ID生成策略

    本文来自融云技术团队原创分享,原文发布于“融云全球互联网通信云”公众号,原题<如何实现分布式场景下唯一 ID 生成?>,即时通讯网收录时有部分改动. 1.引言 对于IM应用来说,消息ID( ...

  2. 【融云分析】如何实现分布式场景下唯一 ID 生成?

    ◀背景▶ 对于一套分布式部署的 IM 系统,要求每条消息的 ID 要保证在集群中全局唯一且按生成时间有序排列.如何快速高效的生成消息数据的唯一 ID ,是影响系统吞吐量的关键因素.那么,融云是如何做到 ...

  3. apicloud+融云实现即时通讯

    请尊重作者的辛勤劳动!!! 使用apicloud开发已经快2个月了,起初的目的就是为了实现安卓和苹果的兼容,属于一个试验项目,究竟apicloud是否能够满足公司的要求?最 终看来还是不错的,使用ap ...

  4. iOS消息体系架构详解-融云即时通讯云

    iOS SDK 体系架构 本文档将详细介绍融云的 SDK 产品架构和消息体系,以便于您更深入的了解融云并更快速的开发自己的产品. 融云 SDK 系统架构 IMKit IMKit 的功能主要是封装各种界 ...

  5. APICloud平台的融云2.0集成

    融云2.0的官方文档地址:http://docs.apicloud.com/端API/开放SDK/rongCloud2 项目须要IM模块,最后还是选择了融云.在iOS原生开发中,融云sdk集成了聊天界 ...

  6. APICloud框架——融云+UIChatTools实现即时通讯聊天

    今天完成了公司app的聊天界面的收发消息功能,结合融云2和UIChatTools模块实现,只是实现了基本功能,好多细节还没有实现,废话不多说,上代码 输入框页面(win) 先引入所需模块 // 融云模 ...

  7. 融云通信云发力教育行业 助在线教育"风口"继续腾云

    4 月 16 日,2019 年AI 在线教育大会在北京站圆满落幕,会上云集超过500位资深教育从业者.200 家机构,共同就 AI 教育落地.在线教育应用经验等主题开展深入探讨.云通信领域的领导企业融 ...

  8. 融云rongCloud聊天室的使用

    融云提供了两种途径的接口, 一个是app端,一个是服务器端的. app端 1.连接融云,监听消息 rong = api.require('rongCloud2'); rong.init(functio ...

  9. 融云技术分享:融云安卓端IM产品的网络链路保活技术实践

    本文来自融云技术团队原创分享,原文发布于“ 融云全球互联网通信云”公众号,原题<IM 即时通讯之链路保活>,即时通讯网收录时有部分改动. 1.引言 众所周知,IM 即时通讯是一项对即时性要 ...

随机推荐

  1. 洛谷1345 [Usaco5.4]奶牛的电信

    题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相 ...

  2. luogu P4062 [Code+#1]Yazid 的新生舞会(线段树+套路)

    今天原来是平安夜啊 感觉这题是道好题. 一个套路枚举权值\(x\),把权值等于\(x\)的设为1,不等于的设为-1,然后问题转化为多少个区间权值和大于. 发现并不是很好做,还有一个套路,用前缀和查分来 ...

  3. BZOJ 3166 [HEOI2013]Alo (可持久化01Trie+链表)

    题目大意:给你一个长度为$n$的序列,让你找出一段子序列,求其中的 次大值 异或 序列里一个数 能得到的最大值 先对序列建出可持久化$Trie$ 按元素的值从小到大遍历,设当前元素的位置是i,找出它左 ...

  4. eclipse/myeclipse中js/java的自动提示只有4个字符怎么解决

    https://blog.csdn.net/LinBM123/article/details/80450690

  5. 紫书 习题 8-22 UVa 1622 (构造法)

    这道题的构造法真的复杂--要推一堆公式--这道题写了几天了--还是没写出来-- 一开始简单的觉得先左右来回, 然后上下来回, 然后把剩下的执行完了好了, 然后就WA. 然后换了个思路, 觉得是贪心, ...

  6. WPF 列表自动换行

    原文:WPF 列表自动换行 本文告诉大家如何在 ListView 或 ListBox 使用 WrapPanel 让里面的控件自动换行 在 WPF 可以通过修改 ItemsPanel 设置使用不同的 I ...

  7. C语言计算字符串数组中每个字符串出现的个数

    unsigned int str_num(char *str[], int num[], int len) { int i, j; int count; int flag[len]; ; i < ...

  8. 2015 Multi-University Training Contest 3 hdu 5316 Magician

    Magician Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  9. 洛谷 P2665 [USACO08FEB]连线游戏Game of Lines

    P2665 [USACO08FEB]连线游戏Game of Lines 题目背景 Farmer John最近发明了一个游戏,来考验自命不凡的贝茜. 题目描述 Farmer John has chall ...

  10. weblogic 生产模式和开发模式的互相转换

    weblogic 生产模式和开发模式的互相转换 学习了:http://blog.csdn.net/qew110123/article/details/45845935 weblogic10.3生产模式 ...