在App的oncreate方法中

//必须首先执行这部分代码, 如果在":TCMSSevice"进程中,无需进行云旺(OpenIM)和app业务的初始化,以节省内存;SysUtil.setApplication(this);if(SysUtil.isTCMSServiceProcess(this)){return;}//第一个参数是Application Context//这里的APP_KEY即应用创建时申请的APP_KEY,同时初始化必须是在主进程中if(SysUtil.isMainProcess()){YWAPI.init(this, YWIMKit_APP_KEY);}//云旺自定义类初始化CustomSampleHelper.initCustom();

云旺进程初始化完毕后,就要初始化云旺的SDK对象了,因为我们涉及到页面的所有内容都是云旺的SDK对象来操作的,并且每个用户对应唯一的SDK对象,更换用户就要重新获取,

这个SDK对象可以建一个帮助类去维护,

// openIM UI解决方案提供的相关API,创建成功后,保存为全局变量使用private YWIMKit mIMKit;public YWIMKit getIMKit() {return mIMKit;}public void setIMKit(YWIMKit imkit) {mIMKit = imkit;}public void initIMKit(String userId, String appKey) {//初始化SDK对象mIMKit = YWAPI.getIMKitInstance(userId, appKey);addPushMessageListener();}

所以在我们项目中做登录的时候我们就要根据用户来进行初始化了,并且要进行云旺的登录操作

String uid = GlobalInfo.getInstance(LoginActivity.this).getUid();if (!TextUtils.isEmpty(GlobalInfo.getInstance(LoginActivity.this).getUid())){//登录成功后SDK对象重新初始化LoginHelper.getsInstance().initIMKit(uid,App.YWIMKit_APP_KEY);LoginHelper.getsInstance().login_im(uid, GlobalInfo.getInstance(LoginActivity.this).getImPassword(), new IWxCallback() {@Overridepublic void onSuccess(Object... objects) {Toast.makeText(LoginActivity.this, "Success", Toast.LENGTH_SHORT).show();}@Overridepublic void onError(int i, String s) {}@Overridepublic void onProgress(int i) {}});}

云旺登录后界面的展示,这里只涉及最近联系人界面和用户之间的单聊界面
在这里是在单独的Activity页面中将聊天列表已fragment的方式进行嵌套进来,核心代码如下

private void initView() {FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();if (LoginHelper.getsInstance().getIMKit()!=null){mIMKit = LoginHelper.getsInstance().getIMKit();mConversationService = mIMKit.getConversationService();conversationListFragment = mIMKit.getConversationFragment();}fragmentTransaction.add(R.id.fragment, conversationListFragment,"conversationListFragment");fragmentTransaction.commit();}

这样我们最近联系人列表就出来了

单聊的话就比较简单了,拿到对方的id就可以了

Intent intent = LoginHelper.getsInstance().getIMKit().getChattingActivityIntent(userid);startActivity(intent);

接下来就是一些重要的监听

未读消息的监听,在MainActivity中,

实现的接口的分别是IYWConversationUnreadChangeListener,IYWConnectionListener,后一个是连接状态的监听
private void initListener() {mConversationService.addTotalUnreadChangeListener(this);mIMKit.getIMCore().addConnectionListener(this);}
@Overridepublic void onUnreadChange() {mHandler.post(new Runnable() {@Overridepublic void run() {//获取当前登录用户的所有未读数int unReadCount = mConversationService.getAllUnreadCount();//设置桌面角标的未读数mIMKit.setShortcutBadger(unReadCount);
//                sendBadgeNumber(unReadCount);if (unReadCount > 0) {messageCountTv.setVisibility(View.VISIBLE);if (unReadCount < 100) {messageCountTv.setText(unReadCount + "");} else {messageCountTv.setText("99+");}} else {messageCountTv.setVisibility(View.GONE);}}});}

对于连接状态的监听,实现方法如下

@Overridepublic void onDisconnect(int i, String s) {if (i == YWLoginCode.LOGON_FAIL_KICKOFF) {//在其它终端登录,当前用户被踢下线,final AlertDialogUtil adl = new AlertDialogUtil(this,false,null);adl.setPositiveClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {adl.dismiss();App.getInstance().logout();//登出云旺LoginHelper.getsInstance().loginOut(new IWxCallback() {@Overridepublic void onSuccess(Object... objects) {Toast.makeText(MainActivity.this, "Exist Success", Toast.LENGTH_SHORT).show();}@Overridepublic void onError(int i, String s) {Toast.makeText(MainActivity.this, "Exist Error", Toast.LENGTH_SHORT).show();}@Overridepublic void onProgress(int i) {Toast.makeText(MainActivity.this, "Existing", Toast.LENGTH_SHORT).show();}});Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);startActivity(i);finish();}});//作为系统弹出框 可覆盖在任意界面adl.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);adl.show();}else {//不是在其他端登录的话进行重新登录连接的操作String uid = GlobalInfo.getInstance(MainActivity.this).getUid();if (!TextUtils.isEmpty(GlobalInfo.getInstance(MainActivity.this).getUid())){//登录成功后SDK对象重新初始化LoginHelper.getsInstance().initIMKit(uid,App.YWIMKit_APP_KEY);LoginHelper.getsInstance().login_im(uid, GlobalInfo.getInstance(MainActivity.this).getImPassword(), new IWxCallback() {@Overridepublic void onSuccess(Object... objects) {mIMKit = LoginHelper.getsInstance().getIMKit();mConversationService = mIMKit.getConversationService();initListener();Toast.makeText(MainActivity.this, "Success", Toast.LENGTH_SHORT).show();}@Overridepublic void onError(int i, String s) {}@Overridepublic void onProgress(int i) {}});}}}@Overridepublic void onReConnecting() {Toast.makeText(this, "onReconnecting", Toast.LENGTH_SHORT).show();}@Overridepublic void onReConnected() {Toast.makeText(this, "onReconnected", Toast.LENGTH_SHORT).show();}

基本的操作就介绍这些,接下来是自定义的一些类

阿里云旺(即时通讯)基础使用相关推荐

  1. Android集成阿里云旺即时通讯踩坑历程

    下载云旺的demo,将demo中的OneSDK直接拷贝,作为Moudle进行依赖,具体操作就不说了,OneSDK是最新的,一定不要进行修改, 进行依赖后,可能会遇到buildToolsVersion ...

  2. 阿里云旺即时通信OpenIM(一)基础学习

    文章目录 概述 下载 申请 创建项目 概述 OpenIM是阿里百川开发的一套即时通信的第三方SDK,可以帮我们快速实现即时通信的功能.免费,功能不是很强大,而且已经停止维护和更新了.我在论坛上看到很多 ...

  3. 阿里云基本概念与基础架构(一)

    阿里云基本概念与基础架构 文章目录 阿里云基本概念与基础架构 1.云的基本介绍 1.1.什么是云平台 1.2.云平台的分类 1.3.为什么使用云平台 2.阿里云基础架构 2.1.云平台有那些厂商 2. ...

  4. 微信小程序接入腾讯云IM即时通讯(获取聊天历史记录开发步骤)

    微信小程序接入腾讯云IM即时通讯(获取聊天历史记录开发步骤) 1.先看文档: 获取 C2C 历史消息 :https://cloud.tencent.com/document/product/269/1 ...

  5. 新一代微服务全家桶AlibabaCloud+Docker+JDK11阿里云容器部署零基础到项目实战

    新一代微服务全家桶AlibabaCloud+Docker+JDK11阿里云容器部署零基础到项目实战 近年来,微服务架构已经成为企业标配,它以更加灵活的部署方式和高度解耦的架构设计,为企业带来了极大的业 ...

  6. 融云 web 即时通讯

    融云 web 即时通讯 ☺ 官网https://www.rongcloud.cn/?utm_source=baiduBrand&utm_term=rongyun 老版本但更为详细的开发文档ht ...

  7. 基于融云的即时通讯开发(一)

    一.概述 现在的应用中,即时通讯功能已经很普遍了,从这篇文章开始,我们以第三方平台融云的服务为基础,研究一下如何开发一个具有及时通信功能的软件. 首先,进入融云的官网,地址如下: http://ron ...

  8. 兼具高效与易用,融云 IM 即时通讯长连接协议设计思路

    无论是 PC 端还是移动端,接入网络实现通信都需要建立双端的连接.关注[融云全球互联网通信云]了解更多 客户端和服务端建立连接后不断开,然后进行通信(也就是发送报文)的方式就是长连接. 与之相反,短连 ...

  9. 【完结】有三AI阿里云的深度学习基础课程暂时完结,欢迎扩散学习

    2021年3月份有三AI与阿里天池联合推出了深度学习系列课程, 课程内容包括人工智能与深度学习发展背景,深度学习典型应用,卷积神经网络,循环神经网络,生成对抗网络,深度学习开源框架等内容,目前已经基本 ...

最新文章

  1. HDU 1398 Square Coins
  2. fdisk -l 找不到分区怎么办?想办法找到隐藏分区。
  3. 如何格式化电脑_U盘提示格式化后如何恢复数据
  4. python输出日期的模版_python按日期区间生成markdown日记模板
  5. office365中文版
  6. sourcetree回退已推送的代码
  7. C++ const成员Demo - Win32 版本
  8. ftp上传当天文件的方法_五种方法将文件上传到FTP服务器
  9. ITK:使用GMM EM进行分布式采样
  10. 【Python】import xxx 文件的加载顺序分析
  11. linux怎么取消挂在u盘,linux下如何挂载U盘
  12. matlab length_MATLAB入门
  13. 小熊的日记图文列表布局小程序模板
  14. 计算机网络「二」—— 物理层(多图详解)
  15. bgp协议 怎么知道相邻路由的ip地址_三级网络技术考前选择题1—BGP
  16. eclipse adt开发android ndk没有NDK选项问题的解决方案
  17. 【尚硅谷】JavaScript基础实战丨JS入门到精通_01-06
  18. Windows server2012r2安装密钥
  19. 09 Python 利用爱心曲线函数打印自定义内容为爱心形状
  20. CORS跨域-Nginx使用方法(Access-Control-Allow-Origin错误提示)

热门文章

  1. 菜鸟成长手册:八大品牌内存真伪巧识别
  2. 移动端video标签适配
  3. php是什么意思啊cf手游图片,有关于cf手游辅助功能的相关介绍
  4. Js获取屏幕宽度、高度
  5. operating system之操作系统概述
  6. wap2.0有关windows mobile模拟器测试环境的搭建
  7. 数学物理方程的Matlab实现
  8. 证明无向完全图的边数等于N阶取二(Cn2)
  9. 开发合身的进销存管理软件(转)
  10. 适合入门的一些现成的人工智能项目