关于融云的单聊通讯那点事

关于融云的单聊通讯那点事

最近刚学Android基础知识,觉得必须得做点什么能用的东西,然后想到了去做一个小的通讯APP,于是我查阅了很多blog,最终锁定了融云

用了两天两夜做出的是最简单的事

下面是实例图
在这里插入图片描述
然后是项目的结构
在这里插入图片描述

how (怎么实现)

1.合理借助融云官方文档

怎么个合理法
1.一定要看清开发环境
不然你无法集成它给你的sdk
2.只能使用远程maven集成(融云现在通讯功能下我是没有找到SDK文件的,它给你的连接是个demo没有它给你的文档所以只能使用maven集成)
3.集成代码
在这里插入图片描述
直接去按官方开发文档即可

2.初始化相关信息

官方推荐的是在application中初始化相关信息,实际上去哪都还可以!
在这里插入图片描述

import android.app.Application;

public class MyApplication extends Application {
    public String getAppKey() {
        return appKey;
    }

    public void setAppKey(String appKey) {
        this.appKey = appKey;
    }

    private String appKey;

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    private String token;
    @Override
    public void onCreate() {
        super.onCreate();

    }
}

这是我在Application中写的代码,用来初始化信息而已,由于我没有去实现多次获取token,所以我是去官方API中调用的api函数直接获取然后写死的(不建议这样做)

在activity中调用application实现初始化

package com.example.justtalkwithme;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

import io.rong.imkit.RongIM;
import io.rong.imlib.RongIMClient;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 初始化. 建议在 Application 中进行初始化.
        MyApplication application=new MyApplication();
        application.setAppKey("官方key");
        RongIM.init(this, application.getAppKey());
        application.setToken("官方token需要自己获取的");
        RongIM.connect(application.getToken(), new RongIMClient.ConnectCallback() {
            @Override
            public void onDatabaseOpened(RongIMClient.DatabaseOpenStatus code) {
                //消息数据库打开,可以进入到主页面
            }

            @Override
            public void onSuccess(String s) {
                //连接成功
                Toast.makeText(MainActivity.this,"连接成功",Toast.LENGTH_LONG).show();
                Intent intent=new Intent(MainActivity.this, ConversationActivity.class);
                startActivity(intent);
            }

            @Override
            public void onError(RongIMClient.ConnectionErrorCode errorCode) {
                if(errorCode.equals(RongIMClient.ConnectionErrorCode.RC_CONN_TOKEN_INCORRECT)) {
                    //从 APP 服务获取新 token,并重连
                } else {
                    //无法连接 IM 服务器,请根据相应的错误码作出对应处理
                    Toast.makeText(MainActivity.this,"连接失败",Toast.LENGTH_LONG).show();
                }
            }
        });


    }
}

实现初始化后我们就可以实现相关函数的调用

由于我一直没搞明白怎么去调用融云官方UI组件所以我就去各种blog中找了一个类似QQ的聊天UI组件(此处转载一个大佬的的文章)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/eastmoon502136/article/details/50650350

我就是直接套用了他的UI组件

怎么套用?

首先在他的blog中获取源码,然后偷天换日
1.复制他所有的drawable中的图片到自己的drawable中
2.复制他所有的layout布局到自己的layout中
3.复制他所有的除Mainactivity.java的java文件到自己的项目中(建议用先用Android studio打开他的项目然后Ctrl +C 和Ctrl +V)这样Android会自动修改默认包避免出错
4.新建一个ConversitionActivity类然后将他的Mainactivity套用到自己的这个新建类中以便于我的Mainactivity在连接成功后能实现跳转
(实现跳转必须得到mainifest.xml中注册活动)
以下是我的那个xml文件,你自己不可直接复制,需要修改包名

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.justtalkwithme">
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="MediaStore.Images.Media.INTERNAL_CONTENT_URI"/>
    <uses-permission android:name="MediaStore.Images.Media.EXTERNAL_CONTENT_URI"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <application
        android:allowBackup="true"
        android:name=".MyApplication"
        android:icon="@drawable/yi"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".ConversationActivity">

        </activity>
    </application>

</manifest>

实现融云提供给的消息接收与发送功能

官方文档明确指出响应的函数
在这里插入图片描述
将该函数插入到UI主件中的自己编好的ConversationActivity类中
在这里插入图片描述
消息发送已经实现此处已经完成我做的项目的99/100了
还剩一个消息接收
因为我比较赶时间就没有去设置什么特别的消息接收处理,默认的也是开发文档的自动接收,但是消息的接收主要分两步(个人看法)
1.监听,官方开发文档已经给出
2.完成监听后对接收到的消息的处理(我比较懒只设置了对实时消息的处理)
代码(实现了收发消息)

Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE;
                    String targetId = "**自己在api中设置好的*";
                    messagex = content_send;
                    TextMessage messageContent = TextMessage.obtain(messagex);
                    Message message = Message.obtain(targetId, conversationType, messageContent);
                    RongIM.getInstance().sendMessage(message, null, null, new IRongCallback.ISendMessageCallback() {
                        /**
                         * 消息发送前回调, 回调时消息已存储数据库
                         * @param message 已存库的消息体
                         */
                        @Override
                        public void onAttached(Message message) {
                            Toast.makeText(ConversationActivity.this, "消息已储存到数据库", Toast.LENGTH_LONG).show();
                        }

                        /**
                         * 消息发送成功。
                         * @param message 发送成功后的消息体
                         */
                        @Override
                        public void onSuccess(Message message) {
                            Toast.makeText(ConversationActivity.this, "消息发送成功", Toast.LENGTH_LONG).show();
                        }

                        /**
                         * 消息发送失败
                         * @param message   发送失败的消息体
                         * @param errorCode 具体的错误
                         */
                        @Override
                        public void onError(Message message, RongIMClient.ErrorCode errorCode) {
                            Toast.makeText(ConversationActivity.this, "消息发送失败", Toast.LENGTH_LONG).show();
                        }
                    });

                }
            }
        });
        RongIM.setConnectionStatusListener(new RongIMClient.ConnectionStatusListener() {
            /**
             * 连接状态返回回调
             * @param status 状态值
             */
            @Override
            public void onChanged(ConnectionStatus status) {
                Toast.makeText(ConversationActivity.this, status.getMessage(), Toast.LENGTH_LONG).show();
            }
        });
        RongIM.setOnReceiveMessageListener(new RongIMClient.OnReceiveMessageWrapperListener() {

            /**
             * 接收实时或者离线消息。
             * 注意:
             * 1. 针对接收离线消息时,服务端会将 200 条消息打成一个包发到客户端,客户端对这包数据进行解析。
             * 2. hasPackage 标识是否还有剩余的消息包,left 标识这包消息解析完逐条抛送给 App 层后,剩余多少条。
             * 如何判断离线消息收完:
             * 1. hasPackage 和 left 都为 0;
             * 2. hasPackage 为 0 标识当前正在接收最后一包(200条)消息,left 为 0 标识最后一包的最后一条消息也已接收完毕。
             *
             * @param message    接收到的消息对象
             * @param left       每个数据包数据逐条上抛后,还剩余的条数
             * @param hasPackage 是否在服务端还存在未下发的消息包
             * @param offline    消息是否离线消息
             * @return 是否处理消息。 如果 App 处理了此消息,返回 true; 否则返回 false 由 SDK 处理。
             */
            @Override
            public boolean onReceived(final Message message, final int left, boolean hasPackage, boolean offline) {
                Toast.makeText(ConversationActivity.this, "正在接受消息", Toast.LENGTH_LONG).show();
                rongMsg = (TextMessage) message.getContent();
                message_receive =rongMsg.getContent();
                Msg msg_receive = new Msg(message_receive, Msg.TYPE_RECEIVED);
                msgList.add(msg_receive);
                return true;
            }
        });

以上就是我个人对整个项目的开发(谈不上项目,比较low)但是还是实现了基本的通讯

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阁下莫非东西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值