阿里雲旺(即時通訊)基礎使用

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

基本的操作就介紹這些,接下來是自定義的一些類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章