基于云信IM实现的文字+图片消息聊天功能

这篇博客介绍了如何借助云信IM在Android上实现文字和图片消息的聊天功能。首先,需要在云信官网注册并获取appkey及调试账号。接着,配置项目依赖和初始化SDK,编写BaseApplication进行SDK初始化。然后,通过登录界面输入账号密码进行登陆,并实现选择聊天对象的功能。在聊天界面,使用RecyclerView展示消息,通过适配器处理不同类型的消息(文字、图片)。发送消息时,区分文本和图片消息进行处理,同时实现消息接收的观察者模式,动态更新聊天界面。最后,展示了功能实现后的界面效果。
摘要由CSDN通过智能技术生成

前言

记得在初学Android时,自己当时定下的目标的是实现一个QQ,虽然当时的想法比较高,但是自己当时技术不足,很多功能无从下手,最后便做了一些QQ的效果来当做学习,后来就搁置在那里了,然后在大二暑假在工作室做项目,项目里需要用到一个客服的功能,其实就是一个在线聊天,当时也是花了很多功夫,最后是借助三方平台融云的IM来实现的,不过当时时间很紧,于是没有将过程记录下来,正好最近接触到了云信,于是补上一篇实现聊天的博客,功能实现借助的是三方平台–云信,主要是使用了一下云信的IM功能,在这里也非常感谢云信能提供给开发者的服务,点个赞,同时SDK使用起来真的非常方便友好,不过云信的功能是要付费的哦,今天客服小姐姐给我打电话才知道,/略尴尬。

开发前的准备

在开发前,我们首先要去官网注册一个开发者账号,然后创建一个自己的app,创建app后,就会自动生成app对应的appkey,然后为了方便调试,我们在app的管理界面创建两个调试账号,如图,点击账号管理即可创建
这里写图片描述
这两个调试账号用于我们聊天过程中的两个账号互相聊天。
也就是一共需要三个东西,一个appkey,二个调试账号。

正文

首先,我们创建好项目后,需要对项目进行配置,配置方法,官方帮助文档已经说的非常详细了,就不赘述了,我就直接贴一下我配置的,因为我只需要用到IM功能,所以我只配置了如下几个依赖

// 添加依赖。注意,版本号必须一致。
// 基础功能 (必需)
implementation 'com.netease.nimlib:basesdk:5.4.0'
// 聊天室需要
implementation 'com.netease.nimlib:chatroom:5.4.0'
// 小米、华为、魅族、fcm 推送
implementation 'com.netease.nimlib:push:5.4.0'

然后再手动导入相应的so包
这里写图片描述
再在清单文件中注册相应的服务和广播,具体可以去文章末尾下载源码查看,需要说明的是,如果要运行的话,需要将下面的value值更换为你自己申请的key值,否则在最后登陆的时候,会提示登陆失败

<meta-data
	android:name="com.netease.nim.appKey"
	android:value="380d3252cff90baf6dc1718ff931ae70" />

配置工作准备完毕,我们现在开始编写代码,首先我们新建一个BaseApplication,在里面初始化云信的SDK,代码如下

public class BaseApplication extends Application{

    @Override
    public void onCreate() {
        super.onCreate();

        // SDK初始化(启动后台服务,若已经存在用户登录信息, SDK 将完成自动登录)
        NIMClient.init(this, loginInfo(), options());

    }

    // 如果返回值为 null,则全部使用默认参数。
    private SDKOptions options() {
        SDKOptions options = new SDKOptions();

        // 如果将新消息通知提醒托管给 SDK 完成,需要添加以下配置。否则无需设置。
        StatusBarNotificationConfig config = new StatusBarNotificationConfig();
        config.notificationEntrance = ChatActivity.class; // 点击通知栏跳转到该Activity
        config.notificationSmallIconId = R.mipmap.ic_launcher_round;
        // 呼吸灯配置
        config.ledARGB = Color.GREEN;
        config.ledOnMs = 1000;
        config.ledOffMs = 1500;
        // 通知铃声的uri字符串
        config.notificationSound = "android.resource://com.netease.nim.demo/raw/msg";
        options.statusBarNotificationConfig = config;

        // 配置保存图片,文件,log 等数据的目录
        // 如果 options 中没有设置这个值,SDK 会使用下面代码示例中的位置作为 SDK 的数据目录。
        // 该目录目前包含 log, file, image, audio, video, thumb 这6个目录。
        // 如果第三方 APP 需要缓存清理功能, 清理这个目录下面个子目录的内容即可。
        String sdkPath = Environment.getExternalStorageDirectory() + "/" + getPackageName() + "/nim";
        options.sdkStorageRootPath = sdkPath;

        // 配置是否需要预下载附件缩略图,默认为 true
        options.preloadAttach = true;

        // 配置附件缩略图的尺寸大小。表示向服务器请求缩略图文件的大小
        // 该值一般应根据屏幕尺寸来确定, 默认值为 Screen.width / 2
        options.thumbnailSize = 480/2;

        // 用户资料提供者, 目前主要用于提供用户资料,用于新消息通知栏中显示消息来源的头像和昵称
        options.userInfoProvider = new UserInfoProvider() {
            @Override
            public UserInfo getUserInfo(String account) {
                return null;
            }

            @Override
            public String getDisplayNameForMessageNotifier(String account, String sessionId,
                                                           SessionTypeEnum sessionType) {
                return null;
            }

            @Override
   
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值