阿里云旺(即时通讯)基础使用

xiaoxiao2021-02-28  56

在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() { @Override public void onSuccess(Object... objects) { Toast.makeText(LoginActivity.this, "Success", Toast.LENGTH_SHORT).show(); } @Override public void onError(int i, String s) { } @Override public 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); } @Override public void onUnreadChange() { mHandler.post(new Runnable() { @Override public 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); } } }); }

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

@Override public void onDisconnect(int i, String s) { if (i == YWLoginCode.LOGON_FAIL_KICKOFF) { //在其它终端登录,当前用户被踢下线, final AlertDialogUtil adl = new AlertDialogUtil(this,false,null); adl.setPositiveClickListener(new OnClickListener() { @Override public void onClick(View v) { adl.dismiss(); App.getInstance().logout(); //登出云旺 LoginHelper.getsInstance().loginOut(new IWxCallback() { @Override public void onSuccess(Object... objects) { Toast.makeText(MainActivity.this, "Exist Success", Toast.LENGTH_SHORT).show(); } @Override public void onError(int i, String s) { Toast.makeText(MainActivity.this, "Exist Error", Toast.LENGTH_SHORT).show(); } @Override public 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() { @Override public void onSuccess(Object... objects) { mIMKit = LoginHelper.getsInstance().getIMKit(); mConversationService = mIMKit.getConversationService(); initListener(); Toast.makeText(MainActivity.this, "Success", Toast.LENGTH_SHORT).show(); } @Override public void onError(int i, String s) { } @Override public void onProgress(int i) { } }); } } } @Override public void onReConnecting() { Toast.makeText(this, "onReconnecting", Toast.LENGTH_SHORT).show(); } @Override public void onReConnected() { Toast.makeText(this, "onReconnected", Toast.LENGTH_SHORT).show(); }

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

转载请注明原文地址: https://www.6miu.com/read-36236.html

最新回复(0)