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

在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();
    }

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
阿里云apsara clouder基础技能认证是阿里云官方推出的一项认证考试,旨在评估个人对阿里云产品和服务的基础技能和应用能力。该认证考试覆盖了与云计算基础知识、阿里云产品及其应用、安全性和数据管理等相关内容。 首先,完成阿里云apsara clouder基础技能认证需要具备一定的云计算基础知识。考生需要了解云计算的基本概念、特点和应用场景,以及云计算服务的核心原理和基础架构等。 其次,考生需要熟悉阿里云的产品和服务。阿里云提供了丰富的云计算服务,如ECS、RDS、SLB、OSS等,考生需要了解每个产品的特点、功能和适用场景,并能够根据需求选择合适的产品进行配置和应用。 此外,考生还需要了解阿里云的安全性和数据管理。阿里云具备强大的安全能力和数据保护机制,如数据加密、访问控制、流量防护等,考生需要了解这些安全措施并能够正确配置和使用。 最后,考生需要具备解决问题和故障排除的能力。在实际应用中,可能会遇到各种技术难题和故障情况,考生需要能够识别问题并有能力解决或处理,保障系统的稳定性和可靠性。 综上所述,阿里云apsara clouder基础技能认证是一项测试个人对阿里云产品和服务的基础技能和应用能力的认证考试,通过考试能力评估,考生可以展示自己对云计算和阿里云的理解和应用水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值