第一步:去融云开发者后台注册开发者账号,新建一个应用,获取到App Key 和App Secret 

 第二步:导入sdk

2.1 到https://www.rongcloud.cn/downloads/下载sdk,并熟悉各个组件,这里用到IMKit和IMLib

2.2  打开android studio ,点击File -> New -> Import Module

     2.3选择我们需要的module,点击finish(IMKit和IMLib一样导入)

       2.4找到项目的settings.gradle,在settings.gradle里添加include ':IMKit',':IMLib'

          2.5 将添加的module作为app的lib使用,点击file->Project Structure

         2.6点击App(IMKit和IMLib作为App的lib)点击Dependencies,在点击+号,选择需要的module

最后发现在build.gradle文件里多了(可以省略2.4-2.6,直接添加下面的代码,因为2.4-2.6的结果就是下面的两句代码)

implementation project(':IMKit')
implementation project(':IMLib')

          2.7打开IMLib 的 AndroidManifest.xml 文件,把 meta-data RONG_CLOUD_APP_KEY 的值修改为自己的 AppKey.

      2.8  在应用的 App Module 的 AndroidManifest.xml 文件中,添加 FileProvider 相关配置,修改 android:authorities 为App 的应用的 “ApplicationId”.FileProvider

第三步:初始化 在application的onCreate()方法里添加RongIM.init(this);

 第四步:获取用户Token,点击API调用,用户服务,获取Token,输入userId,name,portraitUri,点击提交

第五步:连接服务

1 connect 方法在应用的生命周期里只需要调用一次,且必须在主进程调用。
2 连接失败,SDK 会自动启动重连机制,无需进行重连操作。 应用的生命周期:应用场长时间后台之后,应用被回收,此时属于新的进程,也需要调用 connect 方法。 自动重连机制:进行最多 10 次重连,分别是 1、2、4、8、16、32、64、128、256、512 秒后。若没有连接成功,还会在检测网络状态变化时再次重连。

第六步:配置会话界面(静态方式)

  61.配置布局文件: 会话界面 对应的布局文件 conversation.xml。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><!--没有继承io.rong.imkit.fragment.ConversationFragment就填io.rong.imkit.fragment.ConversationFragment,继承了ConversationFragment前面就填自己的包名)--><fragmentandroid:id="@+id/conversation"android:name="com.example.administrator.fragment.ConversationFragment"android:layout_width="match_parent"android:layout_height="match_parent" />
</LinearLayout>

   6.2在ConversationActivity 的onCreate 中添加配置代码(mConversationType 是指您的会话类型,mtargetId 是指的您的 targetId )

//显示标题
conversation_username.setText(getIntent().getData().getQueryParameter("title"));
//配置代码
FragmentManager fragmentManage = getSupportFragmentManager();
ConversationFragment fragement = (ConversationFragment) fragmentManage.findFragmentById(R.id.conversation);
Uri uri = Uri.parse("rong://" + getApplicationInfo().packageName).buildUpon().appendPath("conversation").appendPath(mConversationType.getName().toLowerCase()).appendQueryParameter("targetId", getIntent().getData().getQueryParameter("targetId")).build();
fragement.setUri(uri);

 6.3启动会话界面(我们要至少准备两个账号(第四步),targetUserId传入userId,title传入通过用userId调查询用户信息接口获取到的userName(API调用,查询用户信息))

RongIM.getInstance().startPrivateChat(MainActivity.this, Constant.userId, Constant.title);//这是单聊
显示的结果,我们获取的token的时候传入了头像地址,这里没有显示

那我们就刷新用户信息,先调用查询用户信息接口获取到数据(地址https://docs.rongcloud.cn/im/server/user/#user_info)

注:不建议客户端查询,因为要传入app-key,最好从服务器端获取数据,我是写小案例,就这样写了

@FormUrlEncoded
@POST("/user/info.json")
Call<Object> getUsrInfo(@HeaderMap Map<String, String> headers, @Field("userId") String userId);

//刷新用户列表
RongIM.getInstance().refreshUserInfoCache(new UserInfo(map.get("userName"), map.get("userName"), Uri.parse(map.get("userPortrait"))));

查看结果(这是sunshine_0808找sunshine_0707聊天,刷新sunshine_0808和sunshine_0707的数据)

6.4相互聊天

已经运行了sunshine_0808,现在运行sunshine_0707,(Constant.userId, Constant.title填sunshine_0808相关的)

RongIM.getInstance().startPrivateChat(MainActivity.this, Constant.userId, Constant.title);
//getUsrInfot刷新sunshine_0707和sunshine_0808的数据
apiService.getUsrInfo(headMap, "sunshine_0707");
apiService.getUsrInfo(headMap, "sunshine_0808");

6.5 撤回消息

在 rc_config.xml 中将 rc_enable_message_recall 置为 true 可开启消息撤回功能。
rc_message_recall_interval 用来设置撤回消息的有效时间,以秒为单位。消息发送成功后,在有效时间内能撤回,超过有效时间不再执行撤回操作。

<!-- 设置是否支持消息撤回-->
<bool name="rc_enable_message_recall">true</bool>
<!-- 消息撤回有效时间(单位:秒)-->
<integer name="rc_message_recall_interval">120</integer>

结果:

6.6查看正在输入

rc_configuration.xml 里的 rc_typing_status 开关可以开启输入状态提醒的功能。(目前仅支持单聊。默认为 true 开启,设置为 false 为关闭)

<!-- 设置发送输入状态 -->
<bool name="rc_typing_status">true</bool>

在集成了 ConversationFragment 的 activity 里注册输入状态的监听,在 activity 的 onCreate() 里添加代码。

RongIMClient.setTypingStatusListener(new RongIMClient.TypingStatusListener() {@Overridepublic void onTypingStatusChanged(Conversation.ConversationType type, String targetId, Collection<TypingStatus> typingStatusSet) {//当输入状态的会话类型和targetID与当前会话一致时,才需要显示if (type.equals(mConversationType) && targetId.equals("sunshine_0808")) {//count表示当前会话中正在输入的用户数量,目前只支持单聊,所以判断大于0就可以给予显示了int count = typingStatusSet.size();if (count > 0) {Iterator iterator = typingStatusSet.iterator();TypingStatus status = (TypingStatus) iterator.next();String objectName = status.getTypingContentType();MessageTag textTag = TextMessage.class.getAnnotation(MessageTag.class);MessageTag voiceTag = VoiceMessage.class.getAnnotation(MessageTag.class);//匹配对方正在输入的是文本消息还是语音消息if (objectName.equals(textTag.value())) {//显示“对方正在输入”Toast.makeText(getApplicationContext(),"对方正在输入",Toast.LENGTH_LONG).show();} else if (objectName.equals(voiceTag.value())) {//显示"对方正在讲话"Toast.makeText(getApplicationContext(),"对方正在讲话",Toast.LENGTH_LONG).show();}} else {//当前会话没有用户正在输入,标题栏仍显示原来标题Toast.makeText(getApplicationContext(),"当前会话没有用户正在输入",Toast.LENGTH_LONG).show();}}}
});

结果:

6.7 查看消息回执

设置 rc_config.xml 里的 rc_read_receipt ,可开启消息的阅读回执功能。默认为 false 关闭状态,设置成 true 为开启。

<!-- 设置已读回执,目前仅支持单聊、群聊、讨论组 -->
<bool name="rc_read_receipt">true</bool>

需在 init 之后调用 setReadReceiptConversationTypeList 方法来设置支持消息回执的会话类型。(目前只支持 PRIVATE、GROUP 和 DISCUSSION 。默认只有 PRIVATE 类型的会话支持消息回执。)

Conversation.ConversationType[] types = new Conversation.ConversationType[]{Conversation.ConversationType.PRIVATE,Conversation.ConversationType.GROUP,Conversation.ConversationType.DISCUSSION};RongIM.getInstance().setReadReceiptConversationTypeList(types);

注:我看到的消息回执就是会话旁边的蓝色的小对勾

6.8 查看草稿(实现功能,写个小案例,正式项目别这样写)

//保存草稿
RongIM.getInstance().saveTextMessageDraft(Conversation.ConversationType.PRIVATE, "sunshine_0808", "我看了黄历说今日宜相逢,宜重逢", new RongIMClient.ResultCallback<Boolean>() {@Overridepublic void onSuccess(Boolean aBoolean) {//获取草稿RongIM.getInstance().getTextMessageDraft(Conversation.ConversationType.PRIVATE, "sunshine_0808", new RongIMClient.ResultCallback<String>() {@Overridepublic void onSuccess(String success) {Log.d(TAG, "success =" + success);}@Overridepublic void onError(RongIMClient.ErrorCode errorCode) {Log.d(TAG, "errorCode =" + errorCode);}});}@Overridepublic void onError(RongIMClient.ErrorCode errorCode) {Log.d(TAG, "errorCode =" + errorCode);}
});

结果:

6.9 快捷回复

1、创建一个 List<String> 将需要快捷回复的消息内容放进去

2、在初始化 SDK 后立刻调用以下方法,将创建的回复消息 List 作为参数传入。(设置每条回复消息内容不超过 30 个字)

//快捷回复
List<String> listMessage = new ArrayList<String>();
listMessage.add("嗨");
listMessage.add("hello");
listMessage.add("你好啊");
RongExtensionManager.getInstance().addPhraseList(listMessage);

3.点击常用语(点击列表里的某一项,自动发送)

6.10 会话列表界面

Map<String,Boolean> supportedConversation = new HashMap<>();
supportedConversation.put(Conversation.ConversationType.GROUP.getName(), false);
//启动会话列表界面
RongIM.getInstance().startConversationList(MainActivity.this, supportedConversation);

结果:(我是sunshine_0707,我和sunshine_0808讲段子)

6.11显示新消息提醒

RongIM.getInstance().enableNewComingMessageIcon(true);
RongIM.getInstance().enableUnreadMessageIcon(true);

结果:


7.群聊

7.1创建群聊(可以调接口,我前面也调用了一个获取用户的接口)

7.2加入群成员

7.3启动群聊

RongIM.getInstance().startGroupChat(MainActivity.this, Constant.groupId, Constant.groupTitle);
public static final String groupId = "DuanZiGroup";
public static final String groupTitle = "段子交流群";

Android 接入融云案例相关推荐

  1. Android接入融云sdk流程(思路)

    1.导入RongImKit以及v4包. 2.在融云控制台为自己的App申请AppKey和AppSecret. 3.在AndroidManifest中添加相应权限.服务.广播和app对应的AppKey. ...

  2. android 融云教程,安卓接入融云IM连接不上??,

    安卓接入融云IM连接不上??, 融云初始化失败?融云连接失败??连接回调方法不执行???不可能的,就那么几行代码,怎么会有错. 1.项目gradle里添加融云maven仓库 maven {url &q ...

  3. 融云Android对接视频,Android studio接入融云IM

    说明: 官方网址:http://www.rongcloud.cn/ 1.融云SDK 将各部分功能以插件化的形式独立提供,开发者可以根据自己的需要,自由组合下载. 2.IM 界面组件 - IMKit , ...

  4. Flutter项目WanWan之接入融云IM和自定义Plugin

    项目地址 GitHub:https://github.com/baiyuliang/Flutter-WanWan 融云IM-Flutter文档地址:https://docs.rongcloud.cn/ ...

  5. 分享一些Android集成融云音视频通话遇到的问题

    最近应公司需要加入音视频聊天的功能,领导也没吱声就跟融云那边把商务谈好了,让我开始做,之前也没接触过这方面的东西,查阅资料发现音视频这块都是比较笼统的大致介绍一下,最后也是坎坷了一番完成了任务,接下来 ...

  6. Flutter接入融云IM

    一.配置 1. 导入第三方 rongcloud_im_plugin: ^5.1.3 2. 初始化融云 token为融云唯一识别标志,用shared_preferences存到本地 initRongIM ...

  7. android 接入萤石视频案例

    第一步:首先去萤石视频开放平台注册账号,官网地址:https://open.ys7.com/ 第二步:在萤石开放平台创建自己打的应用,得到AppKey,Secret,和AccessToken 第三步: ...

  8. Android 融云IM设置消息免打扰无效

    Android集成融云以后,设置会话消息免打扰所需要的方法无需多说: RongIM.getInstance().setConversationNotificationStatus(conversati ...

  9. 融云 Unity SDK 升级,专注游戏场景,更好社交体验

    游戏已经不单单是一种娱乐方式.关注[融云全球互联网通信云]了解更多 作为离元宇宙最近的赛道,游戏不仅是各种沉浸式体验类技术落地融合的首发场景,也是创作者经济爆发的热土. 移动游戏在人们的线上消费方面势 ...

最新文章

  1. ie与firefox兼容文档
  2. asp.net的控件视图状态
  3. Winodws10 VS2019 Clion CMake 编译 OpenCV rc 系统找不到指定的文件。NMAKE : fatal error U1077
  4. php按照字段合并数组,PHP实现数组根据某个字段进行水平合并横向合并代码实例...
  5. 机器学习(三十二)——t-SNE, Adaboost
  6. SAP CRM中间件sales status调试
  7. Redis秒杀功能设计与实现
  8. python 爬虫,起点完结榜前100榜单
  9. Android-NDK 接入Fmod库,变声操作
  10. 关于 Pycharm 2019.2 版本出现等宽字体对不齐的问题的解决方法
  11. 连续+离散变量的联合分布求解
  12. 全球计算机病毒损失报告,世界十大计算机病毒 CIH的危险被公认,第二经济损失26亿美元...
  13. cmake编译时中途报错:undefined reference to ‘xxx‘.未定义引用
  14. 《点燃我,温暖你》爱心代码复现
  15. 在IE禁用的情况下,如何用Microsoft Edge以兼容模式打开网页?
  16. 哈尔滨工业大学计算机考研难吗,哈尔滨工业大学(专业学位)计算机技术考研难吗...
  17. 基于Spring+SpringMVC+Beetl的权限管理框架源码分享
  18. Eureka实战(最通俗易懂)
  19. 记录ubuntu22.04突然连不上网
  20. Spring系列学习之Spring Mobile

热门文章

  1. 记笔记最好用的超高颜值软件之一!Typora 你值得拥有!
  2. 最新版的PHPstudy怎么用cmd操作数据库
  3. 铜回收技术,铜回收树脂,铜的深度去除工艺
  4. 电脑模拟收银机_收银台模拟器下载-收银台模拟器游戏手机版v0.2-幻想游戏网
  5. omv系统mysql_树莓派NAS——OMV安装篇(一)
  6. 在Unity中实现区域连线
  7. 我抄我自己的论文,能算学术不端吗?有学者做了一份论文复用指南
  8. Mysql_Note9
  9. 杨辉三角 python
  10. 【2023年第三届长三角高校数学建模竞赛】A 题 快递包裹装箱优化问题 20页完整论文及代码