环信SDK 客服和IM聊天 踩坑记录

1 、在使用前需要在Application初始化

    /**
     * 环信客服
     */
    private void initCECIM(){
        ChatClient.Options options = new ChatClient.Options();
        options.setAppkey("******");//必填项,appkey获取地址:kefu.easemob.com,“管理员模式 > 渠道管理 > 手机APP”页面的关联的“AppKey”
        options.setTenantId("*****");//必填项,tenantId获取地址:kefu.easemob.com,“管理员模式 > 设置 > 企业信息”页面的“租户ID”
        ChatClient.getInstance().init(this, options);
        // Kefu SDK 初始化
        if (!ChatClient.getInstance().init(this, options)){
            return;
        }
        //后面可以设置其他属性
        ChatClient.getInstance().init(this, new ChatClient.Options().setConsoleLog(true));
    }

    /**
     * 环信即时通讯
     */
    private void initEMOptions() {
        EMOptions options = new EMOptions();
        int pid = android.os.Process.myPid();
        String processAppName = getAppName(pid);
        // 如果APP启用了远程的service,此application:onCreate会被调用2次
        // 为了防止环信SDK被初始化2次,加此判断会保证SDK被初始化1次
        // 默认的APP会在以包名为默认的process name下运行,如果查到的process name不是APP的process name就立即返回
        if (processAppName == null || !processAppName.equalsIgnoreCase(partyApplication.getPackageName())) {
            // 则此application::onCreate 是被service 调用的,直接返回
            return;
        }
        // 默认添加好友时,是不需要验证的,改成需要验证
        options.setAcceptInvitationAlways(false);
        // 是否自动将消息附件上传到环信服务器,默认为True是使用环信服务器上传下载,如果设为 false,需要开发者自己处理附件消息的上传和下载
        options.setAutoTransferMessageAttachments(true);
        // 是否自动下载附件类消息的缩略图等,默认为 true 这里和上边这个参数相关联
        options.setAutoDownloadThumbnail(true);
        //初始化
        EMClient.getInstance().init(partyApplication, options);
        //在做打包混淆时,关闭debug模式,避免消耗不必要的资源
        EMClient.getInstance().setDebugMode(true);

    }

    private String getAppName(int pID) {
        String processName = null;
        ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
        List l = am.getRunningAppProcesses();
        Iterator i = l.iterator();
        PackageManager pm = this.getPackageManager();
        while (i.hasNext()) {
            ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo) (i.next());
            try {
                if (info.pid == pID) {
                    processName = info.processName;
                    return processName;
                }
            } catch (Exception e) {
            }
        }
        return processName;
    }

2、必须要在线程中登录

 /**
     * 注册
     *
     * @param userName
     * @param pwd
     */
    public static void onRegster(final String userName, final String pwd) {

        try {
            EMClient.getInstance().createAccount(userName, pwd);
            Log.i("", "注册" + userName + "\\n" + pwd);
        } catch (HyphenateException e) {
            Log.i("", "注册失败" + e.getMessage());
        }

    }
/**
     * 登陆
     *
     * @param userName
     * @param pwd
     */
    public static void onLogin(String userName, String pwd) {

        EMClient.getInstance().login(userName, pwd, new EMCallBack() {
            @Override
            public void onSuccess() {
                EMClient.getInstance().groupManager().loadAllGroups();
                EMClient.getInstance().chatManager().loadAllConversations();
                boolean updatenick = EMClient.getInstance().pushManager().updatePushNickname("");
                if (!updatenick) {
                    Log.i("onLogin", "update current user nick fail");
                }

            }

            @Override
            public void onError(int code, String error) {
                Log.d(TAG, "login: onError 失败: " + error);

            }

            @Override
            public void onProgress(int progress, String status) {
                Log.d(TAG, "login: onProgress");

            }
        });
    }



 /**
     * 注册
     *
     * @param userName
     * @param pwd
     */
    public static void onRegster(final String userName, final String pwd) {

        ChatClient.getInstance().register(userName, pwd, new Callback() {
            @Override
            public void onSuccess() {
                Log.i("注册成功");
              
            }

            @Override
            public void onError(int i, String s) {
                Log.i("注册失败" + s);
            }

            @Override
            public void onProgress(int i, String s) {

            }
        });


    }

    /**
     * 登录客服
     * @param uname
     * @param upwd
     */
    public static void login(final String uname, final String upwd) {
        ChatClient.getInstance().login(uname, upwd, new Callback() {
            @Override
            public void onSuccess() {
                Log.i("登录成功");
            }

            @Override
            public void onError(int i, String s) {
                Log.i("登录失败" + s);
            }

            @Override
            public void onProgress(int i, String s) {

            }
        });
    }

 

3、要想获得群昵称必须要先在线程中调用以下方法

   /**
     * 群昵称获取
     */
    private void GroupName() {
        new Thread() {
            @Override
            public void run() {
                try {
                    EMClient.getInstance().groupManager().getJoinedGroupsFromServer();
                    EMClient.getInstance().groupManager().getAllGroups();
                } catch (HyphenateException e) {

                }
            }
        }.start();
    }

4、删除会话或者切换账号时必须调用登出方法,否在聊天室里还是切换账号前的消息内容,能看见消息,但是你却无法聊天

使用如下方法

    /**
     * 删除会话
     */
    public static void logout() {
        try {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    EMClient.getInstance().logout(true);
                    ChatClient.getInstance().logout(false, new Callback() {
                        @Override
                        public void onSuccess() {

                        }

                        @Override
                        public void onError(int i, String s) {

                        }

                        @Override
                        public void onProgress(int i, String s) {

                        }
                    });
                }
            }).start();
        } catch (Exception e) {

        }

    }

 

环信SDK客服和及时聊天并发接入时,消息回掉都一样的方法,所以使用kefu-sdk-1.1.8.jar就够了,另外的so文件可以使用如下截图的,少了会编译报错:

环信SDK 客服和IM聊天 踩坑记录_第1张图片

环信并发接入权限也是个坑,必须要在登录前把权限都获取到,否则会报打不开SQLite数据库的错误,另外清单文件也需要添加几个,我贴几个容易被忽略的,关于权限的可以看看这个(https://github.com/Gxyong/huanxinSdk.git)


    
    
    
    

 回头我整合完再上传到我的https://github.com/Gxyong里面吧

 

你可能感兴趣的:(Android,环信SDK并发接入)