融云消息接口apicloud
融云提供消息发送服务,支持个人消息,群消息,讨论组,聊天室消息, 以下是它涉及到的接口。
初始化,连接之后,可以使用。
<!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的更多相关文章
- 融云技术分享:解密融云IM产品的聊天消息ID生成策略
本文来自融云技术团队原创分享,原文发布于“融云全球互联网通信云”公众号,原题<如何实现分布式场景下唯一 ID 生成?>,即时通讯网收录时有部分改动. 1.引言 对于IM应用来说,消息ID( ...
- 【融云分析】如何实现分布式场景下唯一 ID 生成?
◀背景▶ 对于一套分布式部署的 IM 系统,要求每条消息的 ID 要保证在集群中全局唯一且按生成时间有序排列.如何快速高效的生成消息数据的唯一 ID ,是影响系统吞吐量的关键因素.那么,融云是如何做到 ...
- apicloud+融云实现即时通讯
请尊重作者的辛勤劳动!!! 使用apicloud开发已经快2个月了,起初的目的就是为了实现安卓和苹果的兼容,属于一个试验项目,究竟apicloud是否能够满足公司的要求?最 终看来还是不错的,使用ap ...
- iOS消息体系架构详解-融云即时通讯云
iOS SDK 体系架构 本文档将详细介绍融云的 SDK 产品架构和消息体系,以便于您更深入的了解融云并更快速的开发自己的产品. 融云 SDK 系统架构 IMKit IMKit 的功能主要是封装各种界 ...
- APICloud平台的融云2.0集成
融云2.0的官方文档地址:http://docs.apicloud.com/端API/开放SDK/rongCloud2 项目须要IM模块,最后还是选择了融云.在iOS原生开发中,融云sdk集成了聊天界 ...
- APICloud框架——融云+UIChatTools实现即时通讯聊天
今天完成了公司app的聊天界面的收发消息功能,结合融云2和UIChatTools模块实现,只是实现了基本功能,好多细节还没有实现,废话不多说,上代码 输入框页面(win) 先引入所需模块 // 融云模 ...
- 融云通信云发力教育行业 助在线教育"风口"继续腾云
4 月 16 日,2019 年AI 在线教育大会在北京站圆满落幕,会上云集超过500位资深教育从业者.200 家机构,共同就 AI 教育落地.在线教育应用经验等主题开展深入探讨.云通信领域的领导企业融 ...
- 融云rongCloud聊天室的使用
融云提供了两种途径的接口, 一个是app端,一个是服务器端的. app端 1.连接融云,监听消息 rong = api.require('rongCloud2'); rong.init(functio ...
- 融云技术分享:融云安卓端IM产品的网络链路保活技术实践
本文来自融云技术团队原创分享,原文发布于“ 融云全球互联网通信云”公众号,原题<IM 即时通讯之链路保活>,即时通讯网收录时有部分改动. 1.引言 众所周知,IM 即时通讯是一项对即时性要 ...
随机推荐
- 浏览器 滚动条 占据 y轴宽度的解决方案
html { overflow-y: scroll; } :root { overflow-y: auto; overflow-x: hidden; } :root body { position: ...
- POJ-2752 Seek the Name, Seek the Fame 字符串问题 KMP算法 求前后缀串相同数木
题目链接:https://cn.vjudge.net/problem/POJ-2752 题意 给一个字符串,求前缀串跟后缀串相同的前缀串的个数 例:alala 输出:a, ala, alala 思路 ...
- TOJ 3517 The longest athletic track
3517. The longest athletic track Time Limit: 1.0 Seconds Memory Limit: 65536KTotal Runs: 880 A ...
- 3D拾取技术
在unity3d中用户通过触摸屏选中虚拟3D世界中的物体进行操控,就须要掌握3d 拾取技术. 3d拾取技术很的简单:由摄像机与屏幕上的触控点之间确定一条射线.由此射线射向3d世界, 最先和此射线相交的 ...
- js如何实现简繁体互转
js如何实现简繁体互转 一.总结 一句话总结:其实无论是简体还是繁体,都是在显示端(前端),其实所有的我只用动js就好了,没必要动php. 当然,后端也可以做前端的事情,只是麻烦了点(要多通信两次,第 ...
- pyspark.mllib.feature module
Feature Extraction Feature Extraction converts vague features in the raw data into concrete numbers ...
- rest_framework-版本-总结完结篇
总urls.py from django.conf.urls import url, include urlpatterns = [ url(r'^api/', include('api.urls') ...
- 3339: Rmq Problem
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1269 Solved: 665[Submit][Status][Discuss] Descripti ...
- Android5.0之后的页面切换动画
Android5.0之后给我们开发者剩了好多的事情,为什么这么说呢?还记得刚开始的时候,Android里面的所有的动画都要我们开发者自己来写,现在不需要了,因为5.0之后自带了好多的动画,比如:按钮点 ...
- 003.ES2015和ES2016新特性--类.md
JavaScript使用的是基于原型的OO模型,用对象字面量或者函数来实例化对象,用原型链来实现继承. 这样对于数据传统C++.Java的OO范式的开发者来说,会感到比较困惑,于是从ES2015开始逐 ...