前言
记得在初学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