首先需要去网易云信注册账号:
https://app.yunxin.163.com/index?clueFrom=nim&from=nim#/create
账号注册成功后去新建项目拿到集成需要的APPKEY,因为公司项目暂未支持AndroidX,所以直接从网易云信的github官网直接下载未集成AndroidX的UiKit项目。
首先需要在Android的AndroidManifest内添加集成所需的配置:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.netease.nim.demo"><!-- 权限声明 --><!-- 访问网络状态--><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/><!-- 外置存储存取权限 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!-- 多媒体相关 --><uses-permission android:name="android.permission.CAMERA"/><uses-permission android:name="android.permission.RECORD_AUDIO"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/><!-- 控制呼吸灯,振动器等,用于新消息提醒 --><uses-permission android:name="android.permission.FLASHLIGHT" /><uses-permission android:name="android.permission.VIBRATE" /><!-- 8.0+系统需要--><uses-permission android:name="android.permission.FOREGROUND_SERVICE" /><!-- 下面的 uses-permission 一起加入到你的 AndroidManifest 文件中。 --><permissionandroid:name="com.netease.nim.demo.permission.RECEIVE_MSG"android:protectionLevel="signature"/><uses-permission android:name="com.netease.nim.demo.permission.RECEIVE_MSG"/><application...><!-- APP key, 可以在这里设置,也可以在 SDKOptions 中提供。如果 SDKOptions 中提供了,则取 SDKOptions 中的值。 --><meta-dataandroid:name="com.netease.nim.appKey"android:value="key_of_your_app" /><!-- 云信后台服务,请使用独立进程。 --><serviceandroid:name="com.netease.nimlib.service.NimService"android:process=":core"/><!-- 云信后台辅助服务 --><serviceandroid:name="com.netease.nimlib.service.NimService$Aux"android:process=":core"/><!-- 云信后台辅助服务 --><serviceandroid:name="com.netease.nimlib.job.NIMJobService"android:exported="true"android:permission="android.permission.BIND_JOB_SERVICE"android:process=":core"/><!-- 云信监视系统启动和网络变化的广播接收器,保持和 NimService 同一进程 --><receiver android:name="com.netease.nimlib.service.NimReceiver"android:process=":core"android:exported="false"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"/><action android:name="android.net.conn.CONNECTIVITY_CHANGE"/></intent-filter></receiver><!-- 云信进程间通信 Receiver --><receiver android:name="com.netease.nimlib.service.ResponseReceiver"/><!-- 云信进程间通信service --><service android:name="com.netease.nimlib.service.ResponseService"/><!-- 云信进程间通信provider --><providerandroid:name="com.netease.nimlib.ipc.NIMContentProvider"android:authorities="com.netease.nim.demo.ipc.provider"android:exported="false"android:process=":core" /><!-- 云信内部使用的进程间通信provider --><!-- SDK启动时会强制检测该组件的声明是否配置正确,如果检测到该声明不正确,SDK会主动抛出异常引发崩溃 --><providerandroid:name="com.netease.nimlib.ipc.cp.provider.PreferenceContentProvider"android:authorities="com.netease.nim.demo.ipc.provider.preference"android:exported="false" /></application>
</manifest>

网易云信官方的UiKit内已经包含了6.7.0的SDK,所以我这边直接将官方的UiKit以module的形式导入到我的项目就可以正常使用。
引入方式参考:

https://blog.csdn.net/u013023845/article/details/85160792

将UiKit导入至项目后就可以在自己项目的Application配置网易云信相关的内容:

  /**初始化 网易云信SDK* SDK 的初始化方法必须在 Application onCreate 中,并且不能对初始化语句添加进程判断逻辑。*/NIMClient.init(this, loginInfo(), options());if (NIMUtil.isMainProcess(this)) { //判断主线程与否initUIKit(); //初始化UI}/*** 聊天界面长按聊天信息报错解决*///消息转发过滤器NimUIKit.setMsgForwardFilter(new MsgForwardFilter() {@Overridepublic boolean shouldIgnore(IMMessage message) {return false;}});//消息撤回过滤器NimUIKit.setMsgRevokeFilter(new MsgRevokeFilter() {@Overridepublic boolean shouldIgnore(IMMessage message) {return false;}});/*** 网易云信自动登录,登录信息从本地存储的SP内取出* @return*/public static LoginInfo loginInfo() {String userId = SPUtils.getString(Constants.ACCID,"");String token = SPUtils.getString(Constants.ACCTOKEN,"");// 从本地读取上次登录成功时保存的用户登录信息if (TextUtils.isEmpty(userId) || TextUtils.isEmpty(token)) {Log.i("TAG", "IM登录UserId:"+userId+"IM登录token:"+token);return null;}return new LoginInfo(userId, token);}
private void initUIKit() {//UI组件初始化NimUIKit.init(this, buildUIKitOptions());//初始化通知消息NIMClient.toggleNotification(true);}private UIKitOptions buildUIKitOptions() {UIKitOptions options = new UIKitOptions();// 设置app图片/音频/日志等缓存目录options.appCacheDir = getAppCacheDir(this) + "/app";options.initAsync = true; //是否使用异步方式初始化UIKitreturn options;}/*** 配置 APP 保存图片/语音/文件/log等数据的目录* 这里示例用SD卡的应用扩展存储目录*/public static String getAppCacheDir(Context context) {String storageRootPath = null;try {// SD卡应用扩展存储区(APP卸载后,该目录下被清除,用户也可以在设置界面中手动清除),请根据APP对数据缓存的重要性及生命周期来决定是否采用此缓存目录.// 该存储区在API 19以上不需要写权限,即可配置 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18"/>if (context.getExternalCacheDir() != null) {storageRootPath = context.getExternalCacheDir().getCanonicalPath();}} catch (IOException e) {e.printStackTrace();}if (TextUtils.isEmpty(storageRootPath)) {// SD卡应用公共存储区(APP卸载后,该目录不会被清除,下载安装APP后,缓存数据依然可以被加载。SDK默认使用此目录),该存储区域需要写权限!storageRootPath = Environment.getExternalStorageDirectory() + "/" + App.context.getPackageName(); //DemoCache.getContext()}return storageRootPath;}private SDKOptions options() {SDKOptions options = new SDKOptions();// 配置保存图片,文件,log 等数据的目录// 如果 options 中没有设置这个值,SDK 会使用采用默认路径作为 SDK 的数据目录。// 该目录目前包含 log, file, image, audio, video, thumb 这6个目录。
//        String sdkPath = getAppCacheDir(context) + "/nim"; // 可以不设置,那么将采用默认路径// 如果第三方 APP 需要缓存清理功能, 清理这个目录下面个子目录的内容即可。
//        options.sdkStorageRootPath = sdkPath;// 配置是否需要预下载附件缩略图,默认为 trueoptions.preloadAttach = true;// 配置附件缩略图的尺寸大小。表示向服务器请求缩略图文件的大小// 该值一般应根据屏幕尺寸来确定, 默认值为 Screen.width / 2
//        options.thumbnailSize = {Screen.width} / 2;// 用户资料提供者, 目前主要用于提供用户资料,用于新消息通知栏中显示消息来源的头像和昵称options.userInfoProvider = new UserInfoProvider() {@Overridepublic UserInfo getUserInfo(String s) {return null;}@Overridepublic String getDisplayNameForMessageNotifier(String s, String s1, SessionTypeEnum sessionTypeEnum) {return null;}@Overridepublic Bitmap getAvatarForMessageNotifier(SessionTypeEnum sessionTypeEnum, String s) {return null;}};return options;}

至此,配置完成。

我们的项目只需要接入简单的单聊及群聊,所以直接从UiKit内直接调用,没有做任何修改,有需要的朋友可以查看源码自行修改。我这边为了方便调用,抽了一个公共类用来登陆登出,大家可以参考一下。

@SuppressWarnings("unchecked")
public class NeteaseLoginManager {static String TAG = "LoginManger-----";static boolean loginFlag = false;public static LoginInfo loginInfo() {String userId = SPUtils.getString(Constants.ACCID,"");String token = SPUtils.getString(Constants.ACCTOKEN,"");// 从本地读取上次登录成功时保存的用户登录信息if (TextUtils.isEmpty(userId) || TextUtils.isEmpty(token)) {Log.i(TAG, "IM登录UserId:"+userId+"IM登录token:"+token);return null;}return new LoginInfo(userId, token);}public static boolean initIMConfig(Context context) {final boolean[] isLogin = {false};NimUIKit.login(loginInfo(), new RequestCallback<LoginInfo>() {@Overridepublic void onSuccess(LoginInfo param) {//登录成功后在此处调用 IM 的成功回调,传入account,之后 NimUIKit.getAccount() 才会有值,与初始化传入无关NimUIKit.loginSuccess(param.getAccount());NimUIKitImpl.setAccount(param.getAccount()); //初始化 账户...isLogin[0] = true;}@Overridepublic void onFailed(int code) {if (code == 302 || code == 404) {Toast.makeText(context, "无效的账户or密码", Toast.LENGTH_SHORT).show();} else {Toast.makeText(context, "列表初始化失败:"+code, Toast.LENGTH_SHORT).show();}}@Overridepublic void onException(Throwable exception) {Log.e(TAG, "无效token,请退出稍后重试!!!" );}});return isLogin[0];}/*登出*/public static void loginOut() {NIMClient.getService(AuthService.class).logout();Log.i(TAG, "loginOut: "+"登出成功");}
}

因为我这边登陆调起是直接读取本地SP存储信息进行登陆,所以如果使用此公共类,请在本地信息存储完之后进行调用。

登入登出:

                         //网易云信登录NeteaseLoginManager.initIMConfig(LoginActivity.this);//退出网易云信NeteaseLoginManager.loginOut();

调起单聊:

                     //判断登陆状态if (TextUtils.isEmpty(NimUIKit.getAccount())) {if (NeteaseLoginManager.initIMConfig(getContext())) {NimUIKit.startP2PSession(getActivity(), accid,null);}}else {// 打开单聊界面NimUIKit.startP2PSession(getActivity(), accid,null);}}

创建群聊并进入:

             //判断用户是否选择if (accidList != null && accidList.size() != 0) {//判断登陆状态if (TextUtils.isEmpty(NimUIKit.getAccount())) {if (NimLoginManager.initIMConfig(NewGroupChatActivity.this)) {// 打开群聊界面TeamCreateHelper.createNormalTeam(NewGroupChatActivity.this, accidList, false, null);finish();}}else {// 打开群聊界面TeamCreateHelper.createNormalTeam(NewGroupChatActivity.this, accidList, false, null);finish();}} else {ToastHelper.showToast(NewGroupChatActivity.this, "请选择至少一个联系人!");}

Android 项目接入网易云信IM单聊,群聊相关推荐

  1. php laravel lumen 快速接入网易云信 im

    第一部分 了解网易云信im 根据上图所示,在我们接入网易云信im时,我们所需要做的就是蓝色部分,并且客户端网易提供了一个完整的demo,我们的开发完全可以基于这个demo来改造,然后就是应用服务器的开 ...

  2. 静观接入网易云信IM的秀品,如何在圣诞让她们疯狂剁手

    自网易云信发布以来已有超过12332个产品接入,全面覆盖各个行业.我们的客户太优秀,忍不住给大家安利一下. 出场 接入网易云信客服功能的秀品,圣诞开始果断发力,日活biubiu上涨! 下面的图文,有女 ...

  3. Android项目中接入网易云信聊天

    首先上图 由于项目中原有的聊天出现收发消息不及时以及其他的问题,导致客服那边损失了不少的订单,遂接入新的第三方即时聊天sdk.有人可能会说,为什么不自己写呢?技术人员不够,时间长,开发成本高,最主要的 ...

  4. 网易im即时聊天php怎么接入,网易云信IM即时通讯功能接入方式与流程_如何收费_企业服务汇...

    编者按:很多企业在考虑使用网易云信提供的IM即时通讯功能,对于企业应当如何接入该功能.接入方式和流程是怎样的.应当如何收费等不太清楚.企业服务汇通过评测网易云信IM即时通讯功能来告诉你答案. 网易云信 ...

  5. 接入网易云信IM即时通讯的微信小程序聊天室

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 接入流程: 初次接触网易云通信IM服务,您可以通过以下产品介绍文档了解我们的产品功能.相关概念.业务限制: 产 ...

  6. 记录一些目前 Unity接入网易云信SDK遇到的问题 和一些经验

    写在前面:本人是个新手程序,很多问题可能都是我太菜导致的,这里只做个人记录.如果有大佬有更好的解决方案的话也希望能帮小弟我解惑. 1.Unity崩溃 可能是因为我没做 捕获异常的原因,但凡是初始化了 ...

  7. Android 视频直播 视频通话会议 单聊群聊 视频处理美颜滤镜等第三方SDK资料整理

    视频通话.视频直播.语音通话.视频录制播放各种处理等功能 1.容联 云通讯 https://www.yuntongxun.com/api/im.html?ly=sem-baidu&qd=pc- ...

  8. 【Android App】实战项目之仿微信的私信和群聊App(附源码)

    手机最开始用于通话,后来增加了短信功能,初步满足了人与人之间的沟通需求.然而短信只能发文字,于是出现了能够发图片的彩信,但不管短信还是彩信,资费都太贵了,令人惜墨如金. 后来移动公司推出飞信,它支持从 ...

  9. 【Android App】实战项目之仿微信的私信和群聊App(附源码和演示视频 超详细必看)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 手机最开始用于通话,后来增加了短信功能,初步满足了人与人之间的沟通需求.然而短信只能发文字,于是出现了能够发图片的彩信,但不管短信还是彩信,资费都太贵 ...

最新文章

  1. 接口调试利器:Postman
  2. oracle查对象创建时间,oracle:查询某个时间之后,指定用户,指定对象类型,并创建的表的个数...
  3. TensorFlow实战——深度学习训练个性化推荐系统
  4. sql server中select语句需要申请的锁
  5. ubuntu 电源按钮操作_电源菜单和按笔记本电脑电源按钮时缺少休眠
  6. 使用tar进行磁带备份的命令汇总
  7. 淘宝TFS文件系统配置
  8. 数据库特点分析| 寻找你心中的数据库漫威英雄
  9. MATLAB递推最小二乘法(三输入一输出ARX模型、所有样本数据权重为1)
  10. Eclipse官方下载步骤
  11. 解空间树及其相关算法
  12. 微信小程序实现二维码签到考勤
  13. OutMan——C语言中文件的操作
  14. sim卡iccid编辑软件_iccid漏洞井喷,有锁苹果用户福音来了
  15. 怎么用一个计算机控制两个屏幕,一台电脑控制多个led显示屏
  16. kali linux学习手册,Kali Linux学习手册
  17. 硬件实现声音信号压缩
  18. java计算工龄,java计算工龄
  19. 笑忘书——记苏州午时与同窗用餐遇雨有感
  20. 瑞萨单片机boot程序中串口打印字符串乱码-问题记录

热门文章

  1. 听说,你还在抬头仰望星空?
  2. h264基础知识梳理
  3. VUE动态生成word
  4. 赵小楼:《天道》《遥远的救世主》深度解析(28)人文意识发展到今天,我们应该怎么改变?
  5. 怎样修改传奇世界服务器,传奇世界服务器如何设置怪物攻击手段详细攻略
  6. mplfinance 一个堪称完美python量化金融可视化工具详析
  7. 迷你世界箱子里物品无限取
  8. elasticsearch 单节点状态yellow解决方法
  9. ue4显示变量_【程序猿】虚幻引擎4: 将C++变量暴露给蓝图
  10. ultraedit25版本设置文本自动换行方法