Android超简单集成融云IM单聊

最近项目中需要集成即时通讯,于是就选择了融云,按照步骤一步一步来还是很简单的,我做的只是单聊,(可支持发送文字、表情、图片、语音)下面记录一下
先上图
在这里插入图片描述

步骤:

一,去融云官网注册账号然后创建应用,应用创建完成后把自己的App Key记录下来 我们在配置的时候会用到**

在这里插入图片描述

二,第二步下载SDK ,我是直接下载的IMKit,上边有介绍,能实现基本的功能,可根据自己的需求下载

在这里插入图片描述

下载完是这样的
在这里插入图片描述

三,将IMKit和IMLib导入自己的项目中

在这里插入图片描述
这样就导进来了
在这里插入图片描述

最好也在App的build.gradle中看一下有没有引入

在这里插入图片描述

四,好了准备工作一切完毕,下面划重点,初始化融云。在整个应用程序中,只需要调用一次 init 方法。

public class App extends BaseApplication {
    
    @Override
    public void onCreate() {
        super.onCreate();
      
        RongIM.init(this);
    }

五,打开 IMLib Module 的 AndroidManifest.xml 文件,把RONG_CLOUD_APP_KEY的值修改为自己的 AppKey. 如图:

在这里插入图片描述

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

在这里插入图片描述

六,连接融云,我是放在程序登录成功后执行的

RongIM.connect(token, new RongIMClient.ConnectCallback() {
    /*
     * Token 错误。可以从下面两点检查
     * 1.  Token 是否过期,如果过期您需要向 App Server 重新请求一个新的 Token
     * 2.  token 对应的 appKey 和工程里设置的 appKey 是否一致
     */
    @Override
    public void onTokenIncorrect() {
        
    }
    /*
     * 连接融云成功
     * @param userid 当前 token 对应的用户 id
     * 
     */
    
    @Override
    public void onSuccess(String userid) {
        Log.d("LoginActivity", "融云连接成功!!!" + userid);
    }
    
    /*连接融云失败
     * @param errorCode 错误码,可到官网 查看错误码对应的注释
     */

    @Override
    public void onError(RongIMClient.ErrorCode errorCode) {
        Log.d("LoginActivity", "融云连接失败!!!" + errorCode);
    }
});

七,下面开始配置会话列表先来配置布局文件 注:name是固定不能修改的

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment
        android:id="@+id/conversationlist"
        android:name="io.rong.imkit.fragment.ConversationListFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="12dp"/>
</LinearLayout>

在代码中

  ConversationListFragment listFragment = (ConversationListFragment) ConversationListFragment.instantiate(mContext, ConversationListFragment.class.getName());
Uri uri = Uri.parse("rong://" + getActivity().getApplicationInfo().packageName).buildUpon()
        .appendPath("conversationlist")
        .appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(), "false")
        .appendQueryParameter(Conversation.ConversationType.GROUP.getName(), "false")
        .appendQueryParameter(Conversation.ConversationType.DISCUSSION.getName(), "false")
        .appendQueryParameter(Conversation.ConversationType.PUBLIC_SERVICE.getName(), "false")
        .appendQueryParameter(Conversation.ConversationType.SYSTEM.getName(), "false")
        .build();
listFragment.setUri(uri);
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
//将融云的Fragment界面加入到我们的页面。
transaction.add(R.id.conversationlist, listFragment);
transaction.commitAllowingStateLoss();

在AndroidManifest中,融云 SDK 是通过隐式调用的方式来实现界面跳转的,您的会话列表 Activity 下面配置 intent-filter,其中,android:host 是您应用的 ApplicationId,需要手动修改,其他请保持不变。

<!-- 会话列表 -->
<activity
    android:name=".activity.New_MainActivity"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="stateHidden|adjustResize">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data
            android:host="替换成您的ApplicationId"
            android:pathPrefix="/conversationlist"
            android:scheme="rong" />
    </intent-filter>
</activity>

八,接下来是新建会话页面Activity

布局文件中

 <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="45dp"
    android:background="@drawable/bg_doctor_blue"
    android:elevation="3dp"
    >
    <ImageView
        android:id="@+id/back"
        android:layout_width="40dp"
        android:layout_height="match_parent"
        android:padding="10dp"
        android:src="@mipmap/back_white"/>
    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="与  对话中"
        android:textSize="16sp"
        android:textColor="@color/bg_white"
        android:gravity="center"
        android:layout_centerInParent="true"/>
</RelativeLayout>

<fragment
    android:id="@+id/conversation"
    android:background="@color/bg_white"
    android:name="io.rong.imkit.fragment.ConversationFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

会话 Activity

 //设置自己的信息
RongIM.getInstance().setCurrentUserInfo(new UserInfo(UserUtils.getUid(), UserUtils.getName(), Uri.parse(UserUtils.getHeader())));
//与我聊天的人的名字
String sName = getIntent().getData().getQueryParameter("title");//获取暱称
//与我聊天的人的Uid
String targetId = getIntent().getData().getQueryParameter("targetId");//获取对方id
title.setText("与" + sName + " 对话中");

配置 intent-filter 在 AndroidManifest.xml 中,会话 Activity 下面配置 intent-filter。 注意请修改 android:host 为您应用的 ApplicationId,其他保持不变。**

<activity
    android:name=".activity.ConversationListActivity"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="stateHidden|adjustResize">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data
            android:host="替换成您的ApplicationId"
            android:pathPrefix="/conversation/"
            android:scheme="rong" />
    </intent-filter>
</activity>

写到这 基本的单聊功能就可以会实现了

九,如何从别的页面点击跳转至会话页面呢

//跳转到聊天页面 传入对方的id 和 名字
RongIM.getInstance().startPrivateChat(context, TargetUserId, Title);

十,记录一下按照我们需求要改的地方

1,如何缓存用户的信息,则通过refreshUserInfoCache(注:如果有好友更换了头像,需通过refreshUserInfoCache来存储)

RongIM.getInstance().refreshUserInfoCache(new UserInfo(list.get(Position).getUid() + "", list.get(Position).getName(), Uri.parse(list.get(Position).getAvatar())));

2,融云默认头像是方的,如果要改成圆形则需要在IMKit中找到下边这三个文件

	rc_item_conversation.xml 会话列表 
	rc_item_message.xml 会话页面 
	rc_item_conversation_member.xml 设置页面

根据需求替换相应的属性, 每个文件有两处需替换

        //圆形
 	app:RCShape="circle"
 	android:scaleType="centerCrop"
 	//方形
 	app:RCShape="square"
	android:scaleType="centerCrop"

3, 如果需要修改聊天气泡的背景,换成自己的.9图, 则在IMKit文件夹中替换这些drawable文件

	rc_ic_bubble_right.9.png			rc_ic_bubble_left.9.png
	rc_ic_bubble_no_right.9.png			rc_ic_bubble_no_left.9.png
	rc_ic_bubble_right_file.9.png			rc_ic_bubble_left_file.9.png 

3,如果需要修改会话列表的样式则在R.layout.rc_item_conversation文件中按需求自定义就可以

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章