Android 接入融云案例
第一步:去融云开发者后台注册开发者账号,新建一个应用,获取到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 接入融云案例相关推荐
- Android接入融云sdk流程(思路)
1.导入RongImKit以及v4包. 2.在融云控制台为自己的App申请AppKey和AppSecret. 3.在AndroidManifest中添加相应权限.服务.广播和app对应的AppKey. ...
- android 融云教程,安卓接入融云IM连接不上??,
安卓接入融云IM连接不上??, 融云初始化失败?融云连接失败??连接回调方法不执行???不可能的,就那么几行代码,怎么会有错. 1.项目gradle里添加融云maven仓库 maven {url &q ...
- 融云Android对接视频,Android studio接入融云IM
说明: 官方网址:http://www.rongcloud.cn/ 1.融云SDK 将各部分功能以插件化的形式独立提供,开发者可以根据自己的需要,自由组合下载. 2.IM 界面组件 - IMKit , ...
- Flutter项目WanWan之接入融云IM和自定义Plugin
项目地址 GitHub:https://github.com/baiyuliang/Flutter-WanWan 融云IM-Flutter文档地址:https://docs.rongcloud.cn/ ...
- 分享一些Android集成融云音视频通话遇到的问题
最近应公司需要加入音视频聊天的功能,领导也没吱声就跟融云那边把商务谈好了,让我开始做,之前也没接触过这方面的东西,查阅资料发现音视频这块都是比较笼统的大致介绍一下,最后也是坎坷了一番完成了任务,接下来 ...
- Flutter接入融云IM
一.配置 1. 导入第三方 rongcloud_im_plugin: ^5.1.3 2. 初始化融云 token为融云唯一识别标志,用shared_preferences存到本地 initRongIM ...
- android 接入萤石视频案例
第一步:首先去萤石视频开放平台注册账号,官网地址:https://open.ys7.com/ 第二步:在萤石开放平台创建自己打的应用,得到AppKey,Secret,和AccessToken 第三步: ...
- Android 融云IM设置消息免打扰无效
Android集成融云以后,设置会话消息免打扰所需要的方法无需多说: RongIM.getInstance().setConversationNotificationStatus(conversati ...
- 融云 Unity SDK 升级,专注游戏场景,更好社交体验
游戏已经不单单是一种娱乐方式.关注[融云全球互联网通信云]了解更多 作为离元宇宙最近的赛道,游戏不仅是各种沉浸式体验类技术落地融合的首发场景,也是创作者经济爆发的热土. 移动游戏在人们的线上消费方面势 ...
最新文章
- ie与firefox兼容文档
- asp.net的控件视图状态
- Winodws10 VS2019 Clion CMake 编译 OpenCV rc 系统找不到指定的文件。NMAKE : fatal error U1077
- php按照字段合并数组,PHP实现数组根据某个字段进行水平合并横向合并代码实例...
- 机器学习(三十二)——t-SNE, Adaboost
- SAP CRM中间件sales status调试
- Redis秒杀功能设计与实现
- python 爬虫,起点完结榜前100榜单
- Android-NDK 接入Fmod库,变声操作
- 关于 Pycharm 2019.2 版本出现等宽字体对不齐的问题的解决方法
- 连续+离散变量的联合分布求解
- 全球计算机病毒损失报告,世界十大计算机病毒 CIH的危险被公认,第二经济损失26亿美元...
- cmake编译时中途报错:undefined reference to ‘xxx‘.未定义引用
- 《点燃我,温暖你》爱心代码复现
- 在IE禁用的情况下,如何用Microsoft Edge以兼容模式打开网页?
- 哈尔滨工业大学计算机考研难吗,哈尔滨工业大学(专业学位)计算机技术考研难吗...
- 基于Spring+SpringMVC+Beetl的权限管理框架源码分享
- Eureka实战(最通俗易懂)
- 记录ubuntu22.04突然连不上网
- Spring系列学习之Spring Mobile