Android 融云即时通讯开发

Android 融云SDK-即时通讯IM(附源码) 前期准备: 注册开发者帐号 开发者在集成融云即时通讯、实时网络能力前,需前往融云官方网站注册创建融云开发者帐号。App Key这个有用,后面代码里我会讲到。 下载 SDK IMKit 集成了会话界面,并且提供了丰富的自定义功能,我们推荐首次接触融云的客户直接使用 IMKit 来快速集成和开发。  IMLib 提供了基础的通信能力,较轻量,适用于对 UI 有 阅读详情
项目中需要用到即时通讯,经过一番研究,现两个用户已可以互相通信;下面介绍关于融云的开发过程:

1.融云的业务架构

可在http://www.rongcloud.cn/docs/quick_start.html,中查看融云的架构介绍,简单来说,产品的用户信息(如头像、昵称、id等)存储在自己的服务器中,用户的通信消息则通过融云转发,若想获取 聊天记录,可通过付费获取,具体价格及服务见http://www.rongcloud.cn/docs/payment.html

2.会话的实现

会话的实现,可根据自己的业务需求选择添加功能,最基本的功能有可文字、语音聊天,发送图片,文件;可添加的服务见下表(若想添加服务需要在项目中导入相应module);

。

若使用最基础的服务,只需导入IMKit及IMLib包,即可;其中IMKit可提供会话及会话列表界面,无需自己开发,只需提供Activity加载融云的相关fragment即可(后续介绍);若需自己独立定制UI界面,则可使用IMLib提供的接口,获取发来的消息内容、消息数及用户等信息,从而显示在自己的UI界面上。

在此,只介绍如何使用基础的会话服务,其他服务同此类似,具体如何操作详见:http://www.rongcloud.cn/docs/android.html

以下为对该部分内容的概述:

a.需到融云平台注册登录,申请Appkey,若两个app互相通信则需用相同的Appkey;融云针对调试版与正式版app分为开发环境与调试环境,具有不同的Appkey,若产品上线,则需在融云平台申请上线并获取新的Appkey.如下图:

b.融云为每一个用户生成唯一的token值。用于登录融云平台服务(不通过自己的服务器),若不通过token登陆到融云则不可使用聊天服务,调用以下代码登录融云,若登录成功则会回调onSuccess(String userid)方法,此时可处理自己登录成功后的逻辑;若调用失败则调用onError(RongIMClient.ErrorCode errorCode)方法,可根据返回的errorCode 查询相应的错误信息;若token失效,则会回调onTokenIncorrect()方法,此时需重新申请新的token,再次调用connect(String token)重新登录融云;将申请的融云token存储在本地,而后每次打开app时均需要使用token,调用connect(String token)登录融云。

    /**
     * <p>连接服务器,在整个应用程序全局,只需要调用一次,需在 { init(Context)} 之后调用。</p>
     * <p>如果调用此接口遇到连接失败,SDK 会自动启动重连机制进行最多10次重连,分别是1, 2, 4, 8, 16, 32, 64, 128, 256, 512秒后。
     * 在这之后如果仍没有连接成功,还会在当检测到设备网络状态变化时再次进行重连。</p>
     *
     * @param token    从服务端获取的用户身份令牌(Token)。
     * @return RongIM  客户端核心类的实例。
     */
    private void connect(String token) {

        Log.i(TAG,"connect");

        if (getApplicationInfo().packageName.equals(Utils.getCurProcessName(getApplicationContext()))) {

            RongIM.connect(token, new RongIMClient.ConnectCallback() {

                /**
                 * Token 错误。可以从下面两点检查 1.  Token 是否过期,如果过期您需要向 App Server 重新请求一个新的 Token
                 *                  2.  token 对应的 appKey 和工程里设置的 appKey 是否一致
                 */
                @Override
                public void onTokenIncorrect() {
                    Log.i(TAG, "--onTokenIncorrect");
                    paramsMap=new HashMap<String, String>();
                    paramsMap.put("nickName",(String) Utils.getShare(LoginActivity.this,ConfigUrl.USER_NICK_NAME,"用户昵称"));
                    paramsMap.put("userId",(String) Utils.getShare(LoginActivity.this,ConfigUrl.USER_ID,"用户id"));
                    paramsMap.put("userType","CM");
                    httpUtilHelper.doCommandHttp(paramsMap,ConfigUrl.GET_TOKEN_URL,TOKEN_CODE);
                }

                /**
                 * 连接融云成功
                 * @param userid 当前 token 对应的用户 id
                 */
                @Override
                public void onSuccess(String userid) {
                    Log.i(TAG, "--onSuccess" + userid);
                    if (loadingDialog.isShowing()){
                        loadingDialog.dismiss();
                    }
                    Utils.saveShare(LoginActivity.this,ConfigUrl.LOGIN,true);
                    startActivity(new Intent(LoginActivity.this, MainActivity.class));
                    //finish();
                }

                /**
                 * 连接融云失败
                 * @param errorCode 错误码,可到官网 查看错误码对应的注释
                 */
                @Override
                public void onError(RongIMClient.ErrorCode errorCode) {
                    Log.i(TAG, "--onError" + errorCode);
                }
            });
        }
    }

若写测试Demo时需两个用户互相通讯,则可在融云平台申请token值(此时无需通过自己的后台服务器申请),可在 API调试 中生成新的用户,如下图所示,userId,name,portraitUri均可自己定义。


正式开发时,需通过自己的服务器申请融云token,由自己的服务服务器返回融云的token,用户id等用户信息。在以后的聊天中,通过用户id找到用户,方可通信。

    c.下载IMKit及IMLib包并将其作为module导入项目中,注意配置;在项目清单文件(AndroidManifest.xml)及IMLib 项目清单文件(AndroidManifest.xml)配置AppKey。

3.即时通讯的代码设置:
a.在Application中初始化,代码如下:

   RongIM.init(this);
        RongIM.getInstance().setMessageAttachedUserInfo(true);
        initRongIMCLient();
 private void initRongIMCLient(){
        /**
         * OnCreate 会被多个进程重入,这段保护代码,确保只有您需要使用 RongIMClient 的进程和 Push 进程执行了 init。
         * io.rong.push 为融云 push 进程名称,不可修改。
         */
        if (getApplicationInfo().packageName.equals(Utils.getCurProcessName(this)) ||
                "io.rong.push".equals((Utils.getCurProcessName(this)))){
            RongIMClient.init(this);
        }
    }

RongIM.getInstance().setMessageAttachedUserInfo(true);该行代码,表示在发送消息时携带用户信息(头像,昵称)即在会话界面,可实时刷新显示用户的头像

昵称信息;需在会话界面添加RongIM.getInstance().setCurrentUserInfo(new UserInfo(myId, myName, Uri.parse(myHeadUrl))); 方可使用;myId为当前用户Id,myName为当前用户昵称,myHeadUrl为当前用户头像地址。

b.融云提供会话列表界面 ConversationListFragment,因此只需新建Activity加载Fragment,在项目清单文件中,需要对其配置,配置如下,

android:host 填写项目包名
  <activity
            android:name=".ui.message.MessageActivity"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />

                <data
                    android:host="com.meidukang.clienthelper"
                    android:pathPrefix="/conversationlist"
                    android:scheme="rong" />
            </intent-filter>
        </activity>

MessageActivity,为加载ConversationListFragment的Activity,需再其布局文件中加入:

 <fragment
        android:id="@+id/conversationlist"
        android:name="io.rong.imkit.fragment.ConversationListFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

在MessageActivity中,需代码配合使用:
 /**
     * 加载会话页面 ConversationListFragment
     */
    private void enterFragment() {

        ConversationListFragment fragment = (ConversationListFragment) getSupportFragmentManager().findFragmentById(R.id.conversationlist);

        Uri uri = Uri.parse("rong://" + getApplicationInfo().packageName).buildUpon()
                .appendPath("conversationlist")
                .appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(), "false")
                .build();

        fragment.setUri(uri);
    }

c.融云提供会话界面,ConversationFragment,其加载同加载会话列表界面相同,新建ConversationActivity,清单文件配置如下:

  <activity
            android:name=".ui.message.ConversationActivity"
            android:launchMode="singleTop"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />

                <data
                    android:host="com.meidukang.clienthelper"
                    android:pathPrefix="/conversation/"
                    android:scheme="rong" />
            </intent-filter>
        </activity>

布局文件加入如下代码:
  <fragment
        android:id="@+id/conversation"
        android:name="io.rong.imkit.fragment.ConversationFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
在ConversationActivity中,需代码配合使用:
 private Conversation.ConversationType mConversationType;//会话类型
 private Intent intent;

  private void initDatas(){
        intent=getIntent();

        mTargetId=intent.getData().getQueryParameter("targetId");
        mTitleName=intent.getData().getQueryParameter("title");

        myId=(String) Utils.getShare(this,ConfigUrl.USER_ID,"用户id");
        myName=(String) Utils.getShare(this,ConfigUrl.USER_NICK_NAME,"用户昵称");
        myHeadUrl=(String) Utils.getShare(this,ConfigUrl.HEAD_URL,"头像");

        mConversationType = Conversation.ConversationType.valueOf(intent.getData().getLastPathSegment().
                toUpperCase(Locale.getDefault()));
        enterFragment(mConversationType,mTargetId);
        tv_title_name.setText(mTitleName);

       RongIM.getInstance().setCurrentUserInfo(new UserInfo(myId, myName, Uri.parse(myHeadUrl)));
    }

    /**
     * 加载会话页面 ConversationFragment
     *
     * @param mConversationType
     * @param mTargetId
     */
    private void enterFragment(Conversation.ConversationType mConversationType, String mTargetId) {

        ConversationFragment fragment = (ConversationFragment) getSupportFragmentManager().findFragmentById(R.id.conversation);

        Uri uri = Uri.parse("rong://" + getApplicationInfo().packageName).buildUpon()
                .appendPath("conversation").appendPath(mConversationType.getName().toLowerCase())
                .appendQueryParameter("targetId", mTargetId).build();

        fragment.setUri(uri);
    }

其中mTargetId(对方的Id),mTitleName(可自定义,显示在聊天界面标题栏上的文字如“与xxx聊天”)为启动会话界面时传入的值(稍后介绍如何开启会话),获取方式不可更改;mConversationType为会话类型,如单聊,群组、聊天室、客服等不同会话类型。不同会话类型启动方式类似(此处只介绍单聊与客服的实现)。

d.开启单聊:

 if (RongIM.getInstance()!=null&& !TextUtils.isEmpty(nickName)){
                    RongIM.getInstance().startPrivateChat(this,userId,nickName);
                }
如此即可开启单聊。startPrivateChat()表示会话界面的 mConversationType值为单聊模式,userId对应mTargetId,nickName对应mTitleName。

 e.开启客服,客服同样分为开发板与生产版,需申请开通服务



   //首先需要构造使用客服者的用户信息
    private CSCustomServiceInfo.Builder csBuilder;
    private CSCustomServiceInfo csInfo;
   
   csBuilder=new CSCustomServiceInfo.Builder();
   csInfo=csBuilder.nickName("客服昵称").build();
 
    if (RongIM.getInstance()!=null){
          RongIM.getInstance().startCustomerServiceChat(this, "客服Id","在线客服",csInfo);
     }

如此即可进入客服聊天,点击”进入客服后台“即可与用户聊天。


Demo因受到上传文件大小的限制,无法上传,如有需要可在下方留下邮箱

Android端融云聊天功能快速集成指南 融云(RongCloud)作为国内领先的即时通讯云服务提供商,致力于为开发者提供稳定、高效、可扩展的IM(即时通讯)解决方案。其SDK广泛应用于社交、电商、客服、办公等多个场景,支持多种消息类型与实时通信需求。本章将从融云SDK的核心功能入手,剖析其技术架构设计,并探讨其在移动应用开发中的实际应用价值。通过了解融云SDK的基本组成与工作原理,开发者可以更好地理解后续集成与功能开发的逻辑基础,为构建高质量的即时通讯功能打下坚实基础。融云SDK内置的消息类型如下:消息类型类名说明。 阅读详情

相关推荐

融云即时通讯SDK在Android应用中的实现

在互联网应用中,认证流程是一个复杂但至关重要的环节,其基本功能是验证用户的身份,以允许用户访问受保护的资源或服务。在融云SDK中,创建单聊会话主要依靠方法。这个方法不仅能够创建单聊会话,还能在需要时创建群聊会话。创建会话时,需要指定会话类型,对于单聊会话来说,类型参数为。userId,null,null创建群聊会话时,使用的是方法,但与创建单聊会话相比,需要添加更多的参数来定义群聊的属性。创建群聊会话的类型参数为。// 添加其他群组属性null,groupId,

weixin_28988985的博客 1114

Android 实战开发 第三方SDK 30分钟集成融云IM 即时通讯

使用融云 IMKit 集成了会话界面,并且提供了丰富的自定义功能, IMKit 方便集成和开发,30分钟打造一个IM 强大的即时通讯聊天功能。

融云IMLib SDK 2.0 Android平台完整示例项目实战

融云IMLib SDK 2.0采用组件化分层架构设计,包含网络通信层(基于长连接心跳机制)、协议解析层(私有二进制协议高效解码)、数据持久化层(SQLite本地缓存)与事件总线机制(观察者模式实现消息广播),各模块低耦合、高内聚,便于定制扩展。其轻量级设计(APK体积增量<500KB)和低内存占用特性,特别适合对性能敏感的中大型应用。graph TDA[App业务层] --> B[事件分发中心]B --> C[消息收发管理]C --> D[协议编码/解码]

weixin_42608318的博客 691

Android之 集成音视频通话

单独集成融云音视频通话SDK

qq_29848853的博客 3670

Android 融云单聊

是用于安卓系统的,对接融云的聊天功能

融云实现两人聊天

集成融云SDK简单实现两人的聊天..............终于弄完了

Android接入融云即时通讯SDK,实现单聊和发送自定义消息。

项目中用到了融云IM聊天功能和自定义消息,今天记录一下接入的过程。 先看下效果图~ 打开融云官网:https://www.rongcloud.cn/注册账号登录后进入控制台找到服务管理然后创建自己的应用完成后就可以看到对应的Key。 进入开发者中心下载对应的SDK我这里选择的是手动集成方式,你也可以选择Maven集成。 我这里只保留了即时通讯组件 然后新建一个项目,把下载的SDK导入进来。 在IMKIt build.gradle中把IMLib这个库依赖进去 api pro...

然了个然 5200

在运行opencv时出现的两个问题:AttributeError: module ‘cv2‘ has no attribute ‘gapi_wip_gst_GStreamerPipeline‘

解决了opencv的两个问题:由问题一引出 AttributeError: module 'cv2' has no attribute 'gapi_wip_gst_GStreamerPipeline' cv2.error:OpenCV(4.1.2)C:\projects\opencvpython\opencv\modules\highgui\src\window.cpp:717:error: (-2:Unspecified error) The function is not implemented...

hu_yinghui的博客 3275

Android集成融云实现聊天功能

在项目中如何集成融云SDK,我就不在详细说了,具体配置可以在官网查看,实现聊天的功能,集成融云 IM 界面组件IMKit和融云 IM 通讯能力库IMLib既可,下面我们说一下,集成组件组件成功以后,如何实现聊天的功能。 一、首先在Application的oncreate()方法里进行初始化 RongIM.init(this); 二、用token发送请求连接融云服务器 一般在登录的时候,接...

uniquemei的博客 2656

C语言图形化界面——含图形、按钮、鼠标、进度条等部件制作(带详细代码、讲解及注释)

本文借助easyx库函数(提供下载链接),很方便地用C语言实现了鼠标、按钮、进度条、坐标尺等操作,为普通C程序的友好人机交互界面提供了一种简单便捷的方案。

体会编程语言独到的美 17万+

从S参数矩阵到硬件实现:手把手教你用耦合微带线设计Marchand巴伦

本文详细介绍了使用耦合微带线设计Marchand巴伦的完整流程。从奇偶模理论和S参数矩阵分析入手,结合ADS仿真软件进行参数优化与电磁仿真验证,最终指导PCB布局、制作与实测调试。文章以2.4GHz Wi-Fi前端电路为例,手把手演示了从理论计算到硬件实现的全过程,并分享了关键的工程经验与调试技巧。

weixin_29271263的博客 536

安卓接入融云即时通讯的简单步骤

首先在融云官网去注册或者登陆,然后点击我的控制台进入创建应用,如果已经有应用了,就把当前应用打开,选择 获取到App Key。融云 SDK 2.0 集成与 1.+ 的版本有一些区别, 2.0 是以项目依赖的形式加入你的项目中。 使用 Android Studio 集成融云,完成简单的单人会话,大概需要 5步:1、将 IMKitsdk 作为 Module 导入到 Project 中。2、在 ap

pengyu1801的专栏 1万+

Cortex-M TrustZone实战:从硬件隔离到安全交互的嵌入式开发指南

在嵌入式系统开发中,硬件安全隔离是构建可信执行环境(TEE)的核心技术。其原理是通过处理器硬件机制,将系统资源划分为安全与非安全域,实现内存、外设和代码的强制访问控制。这项技术的核心价值在于,它能在单一芯片上为资源受限的物联网(IoT)设备、智能传感器等提供芯片级的安全基础,无需依赖外置安全元件,从而降低BOM成本并简化设计。典型的应用场景包括保护设备密钥、实现安全启动、构建安全服务(如加密、密钥管理)以供应用程序调用。本文聚焦于Arm Cortex-M系列微控制器上的TrustZone技术实现,针对开发中

weixin_42639246的博客 300

视频教程-Android 实战开发 第三方SDK 30分钟集成融云IM 即时通讯-Android

Android 实战开发 第三方SDK 30分钟集成融云IM 即时通讯 真名...

weixin_29214485的博客 431

VS2022 LNK1168无法打开进行写入 解决办法

C语言编程---VS---错误和警告---链接器工具错误---LNK1168--无法打开进行写入

weixin_67166415的博客 7161

Yolov8-pose关键点检测:loss优化 | LRM loss困难样本挖掘,提升难样本、遮挡物等检测精度

LRM loss应用到能够大幅提升pose遮挡物性能

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1715

Android 实战开发 第三方SDK 30分钟集成融云IM 即时通讯-李国庆-专题视频课程

使用融云 IMKit 集成了会话界面,并且提供了丰富的自定义功能, IMKit 方便集成和开发,30分钟打造一个IM 强大的即时通讯聊天功能。

q610098308的专栏 553

搭建你的第一个MCP服务器(Python版)

在上两篇博客中,我们已经对MCP(Model Context Protocol)有了初步的了解。MCP是一种强大的协议,能够简化LLM(大型语言模型)与外部工具的交互。今天,我们将通过一个具体的例子,展示如何使用Python搭建一个简单的MCP服务器。通过这个过程,你将能够更好地理解MCP的工作原理,并为后续的应用开发打下基础。在MCP中,工具(Tool)是服务器提供给LLM的接口。我们将定义一个简单的工具,用于接收输入文本并返回处理后的结果。首先,我们需要定义一个工具类。这个工具类将继承自,并实现run。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 8096

java融云即时通开发流程,基于融云开发的 Android 版即时通讯(IM)应用程序

SealTalk-AndroidAndroid 应用 SealTalk 由 融云 RongCloud 出品。特别注意SealTalk 自从 1.3.14 版本起,CallLib 模块引用的音视频引擎已替换成 RTC 3.0,与之前的版本不互通。详细内容请参考官网的特点Android iOS Web 多端互通,如果需要你的产品也可以这样实现。地理位置,位置共享功能。完整的好友体系代码示例。完整的群组...

weixin_30322969的博客 607

基于FPGA的车道线检测系统设计

本文设计了一种基于FPGA的车道线检测系统,采用Altera Cyclone IV EP4CE10F17C8作为主控芯片,结合OV7725摄像头和LCD显示屏实现实时车道线检测。系统通过硬件流水线处理架构,依次完成图像采集、灰度转换、中值滤波、Sobel边缘检测和Hough变换直线识别等功能模块。所有模块均采用Verilog HDL实现,充分利用FPGA的并行处理能力,显著提升了系统响应速度。测试结果表明,该系统能够有效检测道路车道线,满足实时性要求,为ADAS系统提供了一种高效的硬件解决方案。

huanghm88的专栏 121

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

文章标题 融云2.0集成

1、注册开发者帐号 开发者在集成融云即时通讯、实时网络能力前,需前往 融云官方网站 注册创建融云开发者帐号。2、下载 SDK IMKit - 融云 IM 界面组件 **IMLib - 融云 IM 通讯能力库3、创建应用4、获取 Token** Token 的主要作用是身份授权和安全,因此不能通过客户端直接访问融云服务器获取 Token,您必须通过 Server API 从融云服务

今夕何兮的博客 306

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

android studio 融云,融云 SDK 集成详解 – Android Studio

一 、下载 SDK您可以到融云官方网站下载融云 SDK。融云 SDK 各部分功能以插件化的形式独立提供,开发者可以根据自己的需要,自由组合下载。各组件的功能如下:IMKit – 融云 IM 界面组件IMLib – 融云 IM 通讯能力库CallKit – 融云音视频界面组件CallLib – 融云音视频核心组件LocationLib – 融云位置相关库Pus...

weixin_39822184的博客 567

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

php融云开源sdk使用im,开源项目索引

开源项目索引融云提供了开源的 Web IM SDK 源码,以及以 SDK 为基础开发的 Demo 源码用来演示 SDK 的使用,同时提供了各种语言的 Server SDK,方便开发者直接引用。Android IM SDK 相关提供 Android 平台相关的各种代码示例。Android Demo App 2.0 for Android Studio融云 Android SDK 2.x 的 Demo...

weixin_33369252的博客 308

融云即时通讯Flutter SDK使用教程

融云即时通讯Flutter SDK使用教程 1. 项目目录结构及介绍 融云即时通讯的Flutter SDK仓库遵循了标准的Flutter插件结构。以下是主要的目录及其简介: [rongcloud_im_plugin.iml] - IntelliJ IDEA的项目配置文件,用于管理模块相关属性。 android - 包含Android平台相关的代码和配置,是该SDK在Android环境下的实现部...

gitblog_00492的博客 847

Android快速集成融云

Android快速集成融云 &lt;!-- 作者区域 --&gt; &lt;div class="author"&gt; &lt;a class="avatar" href="/u/1dcaf10bccbf"&gt; &lt;img src="//upload.jianshu.io/users/upload_avatars

qq_27831055的博客 378
上一篇: Android 设置文件后缀名及限制文件的大小获取手机文件
下一篇: 解决Android接入服务器NanoHttpd响应慢的问题
解牛之术
博客等级 码龄11年 49粉丝 46原创
评论 57
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值