1.首先我们先打开网易云信的官网

https://netease.im/?from=bdjjnim0035

2.注册账号后,在控制台创建自己的应用!

查看聊天多布局:
https://blog.csdn.net/yuhui77268769/article/details/90111412

3.创建完成,后查看接入文档

1.首先下载libs
2.清单文件,权限及需要用到的组件
3.初始化配置

功能一 初始化

public class NimApplication extends Application {/*** 注意:每个进程都会创建自己的Application 然后调用onCreate() 方法,* 如果用户有自己的逻辑需要写在Application#onCreate()(还有Application的其他方法)中,一定要注意判断进程,不能把业务逻辑写在core进程,* 理论上,core进程的Application#onCreate()(还有Application的其他方法)只能做与im sdk 相关的工作*/public void onCreate() {// SDK初始化(启动后台服务,若已经存在用户登录信息, SDK 将完成自动登录)super.onCreate();NIMClient.init(this, loginInfo(), options());// ... your codesif (NIMUtil.isMainProcess(this)) {// 注意:以下操作必须在主进程中进行// 1、UI相关初始化操作// 2、相关Service调用}}// 如果返回值为 null,则全部使用默认参数。private SDKOptions options() {SDKOptions options = new SDKOptions();// 如果将新消息通知提醒托管给 SDK 完成,需要添加以下配置。否则无需设置。StatusBarNotificationConfig config = new StatusBarNotificationConfig();config.notificationEntrance = MainActivity.class; // 点击通知栏跳转到该Activityconfig.notificationSmallIconId = R.drawable.ic_launcher_background;// 呼吸灯配置config.ledARGB = Color.GREEN;config.ledOnMs = 1000;config.ledOffMs = 1500;options.userInfoProvider = new UserInfoProvider() {@Overridepublic UserInfo getUserInfo(String s) {return null;}@Overridepublic String getDisplayNameForMessageNotifier(String account, String sessionId,SessionTypeEnum sessionType) {return null;}@Overridepublic Bitmap getAvatarForMessageNotifier(SessionTypeEnum sessionTypeEnum, String s) {return null;}};return options;}// 如果已经存在用户登录信息,返回LoginInfo,否则返回null即可private LoginInfo loginInfo() {// 从本地读取上次登录成功时保存的用户登录信息String account = Preferences.getUserAccount();String token = Preferences.getUserToken();if (!TextUtils.isEmpty(account) && !TextUtils.isEmpty(token)) {DemoCache.setAccount(account.toLowerCase());return new LoginInfo(account, token);} else {return null;}}

功能二 登录

常见问题:
1.注意清单文件的包名是否修改成本项目名
2.在清单文件是否初始化Application
3.在控制台查看自己账号状态

核心点
1.LoginInfo 的参数account:账号,token:为密码 。
2.调用登录方法public void doLogin(LoginInfo info)完成登录。

public void doLogin(LoginInfo info) {RequestCallback<LoginInfo> callback =new RequestCallback<LoginInfo>() {@Overridepublic void onSuccess(LoginInfo loginInfo) {Log.e("ssss","成功");Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show();}@Overridepublic void onFailed(int i) {}@Overridepublic void onException(Throwable throwable) {Toast.makeText(MainActivity.this, "失败", Toast.LENGTH_SHORT).show();Log.e("ssss","失败");}// 可以在此保存LoginInfo到本地,下次启动APP做自动登录用};NIMClient.getService(AuthService.class).login(info).setCallback(callback);
}

定义存储方法

public class Preferences {public static String getUserAccount() {return null;}public static String getUserToken() {return null;}
}

功能三 消息的发送

处理音频视频消息请查看官方文档,下面演示简单的文本信息。
https://dev.yunxin.163.com/docs/product/IM即时通讯/SDK开发集成/Android开发集成/消息收发

发送原生支持的消息类型流程比较简单,先通过 MessageBuilder 提供的接口创建消息对象,然后调用 MsgService 的
sendMessage 接口发送出去即可。

参数 说明
sessionId 聊天对象的 ID,如果是单聊,为用户帐号,如果是群聊,为群组 ID
sessionType 聊天类型,SessionTypeEnum.P2P 为单聊类型,SessionTypeEnum.Team 为群聊类型
text 文本消息内容
/*** 发送消息。* @param msg    带发送的消息体,由{@link MessageBuilder}构造* @param resend 如果是发送失败后重发,标记为true,否则填false* @return InvocationFuture 可以设置回调函数。消息发送完成后才会调用,如果出错,会有具体的错误代码。*/
IMMessage imsg = MessageBuilder.createTextMessage("123", SessionTypeEnum.P2P, "你好呀");InvocationFuture<Void> voidInvocationFuture = NIMClient.getService(MsgService.class).sendMessage(imsg, true);voidInvocationFuture.setCallback(new RequestCallback<Void>() {@Overridepublic void onSuccess(Void aVoid) {//消息发送成功}@Overridepublic void onFailed(int i) {//消息失败}@Overridepublic void onException(Throwable throwable) {//消息异常            }});

功能四 消息的接收

通过添加消息接收观察者 MsgServiceObserve#observeReceiveMessage,在有新消息到达时,第三方 APP
就可以接收到通知。该代码的典型场景为消息对话界面,在界面 onCreate 里注册消息接收观察者,在 onDestroy
中注销观察者。在收到消息时,判断是否是当前聊天对象的消息,如果是,加入到列表中显示。

注册消息观察者的参数说明
1.注册消息观察者,就是注册接收消息的服务,注册后就会为这个类服务
2. boolean register,这个参数true代表注册侧绑定,false代表取消注册,解除绑定

/*** 注册/注销消息接收观察者。*     通知的消息列表中的消息不一定全是接收的消息,也有可能是自己发出去,比如其他端发的消息漫游过来,*     或者调用MsgService#saveMessageToLocal(IMMessage, boolean)后,notify参数设置为true,通知出来的消息。* @param observer 观察者, 参数为收到的消息列表,消息列表中的消息均保证来自同一个聊天对象。* @param register true为注册,false为注销*/
public void observeReceiveMessage(Observer<List<IMMessage>> observer, boolean register);

public void onEvent(List < IMMessage > imMessages)
方法的参数理解:这个集合中存储的是消息集合,注意是所有好友的消息,通过**getFromAccount()**来判断是哪个好友发过来的消息,在遍历聊天记录的时候,我们可以进行对 IMMessage 的判断来筛选聊天的信息记录。

NIMClient.getService(MsgServiceObserve.class).observeReceiveMessage(new Observer<List<IMMessage>>() {@Overridepublic void onEvent(List<IMMessage> imMessages) {// 处理新收到的消息,为了上传处理方便,SDK 保证参数 messages 全部来自同一个聊天对象。String content = imMessages.get(0).getContent();//消息String fromAccount = imMessages.get(0).getFromAccount();//发送消息的好友}},true);
//当视图销毁的时候取消注册
@Override
protected void onDestroy() {super.onDestroy();//注销消息接收观察者.NIMClient.getService(MsgServiceObserve.class).observeReceiveMessage(incomingMessageObserver, false);
}

功能五 好友的处理

1.添加好友

VerifyType 参数说明:

VerifyType 属性 说明
DIRECT_ADD 直接添加对方为好友
VERIFY_REQUEST 需要验证

在这里我们用直接添加对方为好友的方式添加好友
还是老样子:通过 NIMClient.getService() 方法来获取服务的方法

NIMClient.getService(FriendService.class).addFriend(new AddFriendData(sou_hy.getText().toString(), verifyType)).setCallback(new RequestCallback<Void>() {@Overridepublic void onSuccess(Void aVoid) {Toast.makeText(Main3Activity.this, "添加成功", Toast.LENGTH_SHORT).show();//添加成功}@Overridepublic void onFailed(int i) {}@Overridepublic void onException(Throwable throwable) {}});

2.获取好友列表

// 返回当前的好友列表
List<String> friends = NIMClient.getService(FriendService.class).getFriendAccounts();

功能六:发送图片消息&接收图片消息

1.首先创建一个图片消息

/*** 创建一条图片消息** @param sessionId   聊天对象ID* @param sessionType 会话类型* @param file        图片文件* @param displayName 图片文件的显示名,可不同于文件名* @return IMMessage 生成的消息对象*/public static IMMessage createImageMessage(String sessionId, SessionTypeEnum sessionType, File file, String displayName);// 或者:创建一条图片消息并指定图片上传时使用的NOS场景public static IMMessage createImageMessage(String sessionId, SessionTypeEnum sessionType, File file, String displayName, String nosTokenSceneKey)

2.发送

//跳转到图库
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");
startActivityForResult(intent,1);//选择发送@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {if(requestCode==1){//获取真实路径,防止在某些机型,如小米中,获取的路径为空Uri uri=Uri.parse(PathUtils.getRealUri(ChatActivity.this,data.getData()));//转化为file文件File imageFile=new File(uri.toString());//构造图片消息对象IMMessage message = MessageBuilder.createImageMessage(account,SessionTypeEnum.P2P, imageFile, imageFile.getName());//发送图片消息NIMClient.getService(MsgService.class).sendMessage(message, false);mAdapter.addNewItem(new MessageEntity(null,data.getData().toString(),2,true));mRecyclerView.scrollToPosition(list.size());}
}

3.接收消息

private void initMessageObserver(){// 处理新收到的消息,为了上传处理方便,SDK 保证参数 messages 全部来自同一个聊天对象。//消息接收观察者incomingMessageObserver = new Observer<List<IMMessage>>() {@Overridepublic void onEvent(List<IMMessage> messages) {// 处理新收到的消息,为了上传处理方便,SDK 保证参数 messages 全部来自同一个聊天对象。IMMessage imMessage = messages.get(0);if(imMessage.getMsgType().equals(MsgTypeEnum.text)){//文本消息String messageStr=imMessage.getContent();//添加到自己的listview列表里mAdapter.addNewItem(new MessageEntity(messageStr,null,1,false));}else if(imMessage.getMsgType().equals(MsgTypeEnum.image)){//图片消息ImageAttachment msgAttachment=(ImageAttachment)imMessage.getAttachment();String uri=msgAttachment.getThumbUrl();mAdapter.addNewItem(new MessageEntity(null,uri,2,false));}account = imMessage.getFromAccount();}};//注册消息接收观察者,//true,代表注册.false,代表注销NIMClient.getService(MsgServiceObserve.class).observeReceiveMessage(incomingMessageObserver, true);
}

功能七&语音消息

语音的录制请参考:
https://www.cnblogs.com/wlwqnj/p/7724722.html

详细理解安卓云信的接入及使用相关推荐

  1. 按键安卓非线程接入注册码系统

    按键安卓非线程接入注册码系统 接入前注意一下,免费版的注册码系统亲测能跑80个左右的用户,用户太多请安装升级版,要不然安装完之后跑不起来. 下面我就按步骤来讲解下非线程模式的接入流程,希望大家能对照示 ...

  2. 从 0 开始最详细的微信公众号接入 AI

    从 0 开始最详细的微信公众号接入 AI 文章目录 从 0 开始最详细的微信公众号接入 AI 写在前面 注册公众号 克隆到服务器 使用过微信机器人项目 未使用过微信机器人项目 更改配置文件 启动项目 ...

  3. Maven依赖详细理解

    Maven依赖理解 1 简介 2 依赖的配置 3 依赖的范围 4 传递性依赖 4.1 传递性依赖和依赖调解 5 依赖调解 6 可选依赖 7 总结 8 下载 1 简介  在Maven项目中,有一个核心文 ...

  4. 【时序列】时序列数据如何一步步分解成趋势(trend)季节性(seasonality)和误差(residual)- 详细理解python sm.tsa.seasonal_decompose

    [时序列]时序列数据如何一步步分解成趋势(trend)季节性(seasonality)和误差(residual)- 理解python sm.tsa.seasonal_decompose 在做时序列分析 ...

  5. 在线客服软件海豚客服安卓SDK如何接入

    本篇分享在线客服系统海豚客服如何进行安卓SDK的接入,首先请点击下载SDK包:"dolphin_lib-release.aar" 一.将最小编译版本修改为17或者以上,通常在主mo ...

  6. 模型整合之模型堆叠——详细理解Stacking model

    详细理解Stacking model 如果你得到了10个不一样的model,并且每个model都各有千秋,这个时候你该怎么选?想必你一定是很为难吧,但通过集成方法,你可以轻松的将10个model合成为 ...

  7. 关于A类地址,B类地址,C类地址的划分和详细理解

    关于A类地址,B类地址,C类地址的划分和详细理解 IP地址的指派范围 网络类别 最大可指派的网络数 第一个可指派的网络号 最后一个可指派的网络号 每一个网络中的最大主机数 占IP地址总数比例 A 2^ ...

  8. 带你详细理解IP地址

    (1)子网掩码 之所以出现大量地址浪费,在于早期的地址分类采用的是固定的网络位与主机位的长度,不能灵活的规划,所以在后面打破了这个规则,32比特的IP还是分为网络号与主机号,但是不在采用固定的长度形式 ...

  9. android手游自动按键,天涯明月刀手游自动弹奏按键精灵使用详细教学 安卓ios使用教程...

    天涯明月刀手游自动弹奏案件精灵代码怎么编写和使用?天涯明月刀手游ios怎么自动弹奏?一起来看看吧. 天涯明月刀手游自动弹奏按键精灵使用详细教学 一.前言 由于游戏内触屏不精准,音符时长难以控制,多音/ ...

最新文章

  1. STL 之 list 容器详解
  2. Android 使用Listview的优化
  3. 淮海工学院c语言试卷,淮海工学院操作系统期末考试试题A卷2010
  4. 如何运用领域驱动设计 - 工作单元
  5. 如何为物联网选择微控制器?
  6. jq 检测元素内html变化,jq 监听 textarea 元素内容变化的方法
  7. Vue指令之v-show
  8. 贪心算法之哈夫曼编码问题
  9. 小学计算机学打字教学教案,第13课 键盘指法练习
  10. 做软件测试三,四年后的感想
  11. 如何建立线上问题快速响应机制
  12. cocos2d--仿真树叶飘落效果的实现(精灵旋转、翻转、钟摆运动等综合运用)
  13. The Devil Wears Prada-2
  14. Git 进阶 —— 时光穿梭机
  15. 导数求函数最大值和最小值习题
  16. 程序员应了解:知识技能金字塔
  17. 蛋花花分析到底该不该让孩子学编程
  18. 逐梦offer -- JVM篇
  19. cnpm安装 指定版本_vue npm install安装某个指定版本的方法
  20. [unity] 音频的二进制流转化为audioclip的两种方式

热门文章

  1. 战地2服务器怎么虚拟人数,战地2如何修改人数
  2. 跟开涛学SpringMVC
  3. 教你怎么解决Linux依赖包第一篇:pkgs.org资源网下载
  4. linux 安装qt mysql库_Linux下QT平台Mysql数据库开发环境配置
  5. 快排C语言三种实现方法(大同小异)
  6. 职称计算机cad考试 多少分通过,2017职称计算机考试AutoCAD知识之直线的绘制
  7. 【MATLAB深度学习工具箱】学习笔记--体脂估计算例再分析:拟合神经网络fitnet里面的数据结构】
  8. Jungle Scout中国市场首发亚马逊FBA卖家百万美金案例中文版详解
  9. SHELL脚本下获取文件时间转换时间戳,使用时间戳计算日期差
  10. iphonex 电话没声音 免提却有声音