基于融云的IM通讯

简介: 基于融云的IM通讯

一、业务场景

项目的发展需要吧原来自己的写的通讯换为第三方的,多家对比后选择了融云IM通讯,项目要实现的功能这要是单聊、群聊、聊天室、发送的内容为文字、图片、文件、语音通话与视频通话。听起来挺复杂的我们一起来实现一下,先从一个demo开始,文章会一直维护下去,知道项目本期项目开发结束。

此文为本人2018年4月所记录,现整理出来,虽然时间过去了很久,我想大体开发思路还是差不多的,以纪念当时开发的美好时光。

二、进行配置

2.1,注册开发者帐号

2.2,引入sdk

<script src="http(s)://cdn.ronghub.com/RongIMLib-2.3.0.min.js"></script>

三、demo代码,实现收发消息

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title></title>
        <link rel="stylesheet" href="">
        <script src="http://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>
        <script src="http(s)://cdn.ronghub.com/RongIMLib-2.3.0.min.js"></script>
        <style>
            .content_box {
                width: 212px;
                min-height: 50px;
                border: 1px solid #ff0000;
            }
        </style>
    </head>
    <body>
        <div class="content_box"></div>
        <input type="text" name="inputBox" id="inputBox" value="" />
        <button class="postMessage">发消息</button>
        <script>
            $(".postMessage").click(function() {
                getMessage()
            })
            RongIMClient.init("c9kqb3rdcomoj"); //这是初始化,需要填参数就是你的APPKEY。这个不难理解。
            var token = "WsOfFQOvy/v3nZ80UpjcOO9l67FGL9fs1E72VNcKY11y1jg3lz2Y6w8Rm/HZ6EyrhVc9pd7SHAsQspRYfSvwo21Y8SDjLVSLxh4/gZ9YyFI=";
            // 连接融云服务器。
            RongIMClient.connect(token, {
                onSuccess: function(userId) {
                    console.log("Login successfully." + userId);
                    //userId是申请token时的填写的id,到时候可以封装在下面的extra中传过去
                },
                onTokenIncorrect: function() {
                    console.log('token无效');
                },
                onError: function(errorCode) {
                    var info = '';
                    switch(errorCode) {
                        case RongIMLib.ErrorCode.TIMEOUT:
                            info = '超时';
                            //链接超时进行重新的链接start
                            var callback = {
                                onSuccess: function(userId) {
                                    console.log("Reconnect successfully." + userId);
                                },
                                onTokenIncorrect: function() {
                                    console.log('token无效');
                                },
                                onError: function(errorCode) {
                                    console.log(errorcode);
                                }
                            };
                            var config = {
                                // 默认 false, true 启用自动重连,启用则为必选参数
                                auto: true,
                                // 重试频率 [100, 1000, 3000, 6000, 10000, 18000] 单位为毫秒,可选
                                url: 'cdn.ronghub.com/RongIMLib-2.2.6.min.js',
                                // 网络嗅探地址 [http(s)://]cdn.ronghub.com/RongIMLib-2.2.6.min.js 可选
                                rate: [100, 1000, 3000, 6000, 10000]
                            };
                            RongIMClient.reconnect(callback, config);
                            //链接超时进行重新链接end
                            break;
                        case RongIMLib.ErrorCode.UNKNOWN_ERROR:
                            info = '未知错误';
                            break;
                        case RongIMLib.ErrorCode.UNACCEPTABLE_PaROTOCOL_VERSION:
                            info = '不可接受的协议版本';
                            break;
                        case RongIMLib.ErrorCode.IDENTIFIER_REJECTED:
                            info = 'appkey不正确';
                            break;
                        case RongIMLib.ErrorCode.SERVER_UNAVAILABLE:
                            info = '服务器不可用';
                            break;
                    }
                    console.log(errorCode);
                }
            });
            // 设置连接监听状态 ( 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 => 消息内容
                            console.log(message.content.content);
                            $(".content_box").text(message.content.content)
                            break;
                        case RongIMClient.MessageType.VoiceMessage:
                            // 对声音进行预加载                
                            // message.content.content 格式为 AMR 格式的 base64 码
                            console.log(message.content.content);
                            break;
                        case RongIMClient.MessageType.ImageMessage:
                            // message.content.content => 图片缩略图 base64。
                            // message.content.imageUri => 原图 URL。
                            console.log(message.content.content);
                            break;
                        case RongIMClient.MessageType.DiscussionNotificationMessage:
                            // message.content.extension => 讨论组中的人员。
                            console.log(message.content.content);
                            break;
                        case RongIMClient.MessageType.LocationMessage:
                            // message.content.latiude => 纬度。
                            // message.content.longitude => 经度。
                            // message.content.content => 位置图片 base64。
                            console.log(message.content.content);
                            break;
                        case RongIMClient.MessageType.RichContentMessage:
                            // message.content.content => 文本消息内容。
                            // message.content.imageUri => 图片 base64。
                            // message.content.url => 原图 URL。
                            console.log(message.content.content);
                            break;
                        case RongIMClient.MessageType.InformationNotificationMessage:
                            // do something...
                            console.log(message.content.content);
                            break;
                        case RongIMClient.MessageType.ContactNotificationMessage:
                            // do something...
                            console.log(message.content.content);
                            break;
                        case RongIMClient.MessageType.ProfileNotificationMessage:
                            // do something...
                            console.log(message.content.content);
                            break;
                        case RongIMClient.MessageType.CommandNotificationMessage:
                            // do something...
                            console.log(message.content.content);
                            break;
                        case RongIMClient.MessageType.CommandMessage:
                            // do something...
                            console.log(message.content.content);
                            break;
                        case RongIMClient.MessageType.UnknownMessage:
                            console.log(message.content.content);
                            // do something...
                            break;
                        default:
                            console.log(message.content.content);
                            // do something...
                    }
                }
            });
            function getMessage() {
                //生成聊天内容
                $('.content_box').append();
                //在页面追加你要生成的内容
                // 定义消息类型,文字消息使用 RongIMLib.TextMessage
                var msg = new RongIMLib.TextMessage({
                    content: $("#inputBox").val(),
                    extra: "附加要传递的值"
                });
                var conversationtype = RongIMLib.ConversationType.PRIVATE; // 私聊
                var targetId = "3045462476240907"; // 目标 Id
                RongIMClient.getInstance().sendMessage(conversationtype, targetId, msg, {
                    // 发送消息成功
                    onSuccess: function(message) {
                        console.log(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);
                    }
                });
            }
        </script>
    </body>
</html>

 

四、发送图片、文件消息

4.1发送图片

可以通过发送文字的方法发送,图片的地址等信息写在extra里边,直接图片保存到自己的服务器。

通过融云发送图片的方法,与发送文字类似,不过有限制,100kb以下,仅支持jpg格式

4.2发送文件

文件与图片同理

五、欢迎交流指正

相关文章
|
消息中间件 前端开发 Java
Springboot+WebSocket 实现IM及时通讯
项目中碰到需要及时通讯的场景,使用springboot集成websocket,即可实现简单的及时通讯。本文介绍springboot如何集成websocket、IM及时通讯需要哪些模块、开发和部署过程中遇到的问题、以及实现小型IM及时通讯的代码。
|
缓存 监控 网络协议
IM通讯模块架构设计
一些在设计IM通讯模块时的架构经验
316 0
|
分布式计算 Java 关系型数据库
xmpp openfire linux 安装 im 及时通讯服务器
  xmpp openfire linux  安装 im 及时通讯服务器   技术栈: openfire+smack+spark   Smack是一个开源,易于使用的XMPP客户端类库。
1816 0
|
1月前
|
存储 自然语言处理 机器人
实战揭秘:当RAG遇上企业客服系统——从案例出发剖析Retrieval-Augmented Generation技术的真实表现与应用局限,带你深入了解背后的技术细节与解决方案
【10月更文挑战第3天】随着自然语言处理技术的进步,结合检索与生成能力的RAG技术被广泛应用于多个领域,通过访问外部知识源提升生成内容的准确性和上下文一致性。本文通过具体案例探讨RAG技术的优势与局限,并提供实用建议。例如,一家初创公司利用LangChain框架搭建基于RAG的聊天机器人,以自动化FAQ系统减轻客服团队工作负担。尽管该系统在处理简单问题时表现出色,但在面对复杂或多步骤问题时存在局限。此外,RAG系统的性能高度依赖于训练数据的质量和范围。因此,企业在采用RAG技术时需综合评估需求和技术局限性,合理规划技术栈,并辅以必要的人工干预和监督机制。
84 3
|
3月前
|
数据采集 监控 测试技术
大型IM稳定性监测实践:手Q客户端性能防劣化系统的建设之路
本文以iOS端为例,详细分享了手 Q 客户端性能防劣化系统从0到1的构建之路,相信对业界和IM开发者们都有较高的借鉴意义。
127 2
|
1月前
|
人工智能 自然语言处理 搜索推荐
AI技术在智能客服系统中的应用与挑战
【9月更文挑战第32天】本文将探讨AI技术在智能客服系统中的应用及其面临的挑战。我们将分析AI技术如何改变传统客服模式,提高服务质量和效率,并讨论在实际应用中可能遇到的问题和解决方案。
216 65
|
11天前
|
人工智能 自然语言处理 搜索推荐
选型攻略 | 智能客服系统该怎么选?(好用的智能客服系统推荐)
智能客服系统的选型需要综合考虑渠道功能、系统性能、客服工作管理、客户管理以及成本效益等因素。目前合力亿捷推出的智能知识库,梳理海量知识,根据不同主题对知识进行分类,使其结构更清晰。
38 0
|
12天前
|
人工智能 自然语言处理 安全
AI技术在智能客服系统中的应用与挑战
【10月更文挑战第28天】本文将深入探讨人工智能(AI)技术在智能客服系统中的应用及其面临的挑战。我们将通过实例分析,了解AI如何改善客户服务体验,提高效率和降低成本。同时,我们也将关注AI在实际应用中可能遇到的问题,如语义理解、情感识别和数据安全等,并提出相应的解决方案。
|
1月前
|
存储 安全 开发工具
百度公共IM系统的Andriod端IM SDK组件架构设计与技术实现
本文主要介绍了百度公共IM系统的Andriod端IM SDK的建设背景、IM SDK主要结构和工作流程以及建设过程遇到的问题和解决方案。
53 3
|
2月前
|
数据挖掘 API
如何选择适合的售后工单管理系统
选择合适的售后工单管理系统需评估需求和预算,考察功能、技术支持及服务商可靠性,并全面试用评估。ZohoDesk适合初创和中小企业,具备强大的工单管理、报告分析及可定制性,助力提升服务质量和客户体验。通过合适系统,企业不仅能优化客户服务流程,还能通过数据分析支持决策,推动长远发展。
63 16

热门文章

最新文章