问题描述
环信3.0,我集成了EaseUI,可以成功登录并执行了登录成功的回调. EMClient.getInstance().login(userName, pwd, new EMCallBack() { @Override public void onSuccess() { EMClient.getInstance().groupManager().loadAllGroups(); EMClient.getInstance().chatManager().loadAllConversations(); Log.v("环信登录成功","!!!!!!!!!!!"); } @Override public void onError(int i, String s) { } @Override public void onProgress(int i, String s) { Log.e("环信聊天", "登录聊天服务器失败"); } });登录到聊天界面后我发送了文本消息,接着就提示我User has not login.然后我在发送处加了判断当前用户是否登录 protected void sendMessage(EMMessage message){ if(!EMClient.getInstance().isLoggedInBefore()) { Log.v("你并没有登录","!!!!!!!!!!!!!!!!!"); } if (message == null) { return; } if(chatFragmentListener != null){ //设置扩展属性 chatFragmentListener.onSetMessageAttributes(message); } // 如果是群聊,设置chattype,默认是单聊 if (chatType == EaseConstant.CHATTYPE_GROUP){ message.setChatType(ChatType.GroupChat); }else if(chatType == EaseConstant.CHATTYPE_CHATROOM){ message.setChatType(ChatType.ChatRoom); } //发送消息 EMClient.getInstance().chatManager().sendMessage(message); message.setMessageStatusCallback(new EMCallBack() { @Override public void onSuccess() { Log.v("====成功发送了消息====","====成功发送了消息===="); } @Override public void onError(int i, String s) { Log.v("====消息发送失败原因=====","code=="+i+"====desc==="+s); } @Override public void onProgress(int i, String s) { } }); //刷新ui if(isMessageListInited) { messageList.refreshSelectLast(); } }Log.v("你并没有登录","!!!!!!!!!!!!!!!!!");并没有打印,看到社区也有很多类似的问题,但始终没有一个合理的解释
解决方案
好吧,经过1个多小时和客服小哥纠缠终于解决了问题出在初始化 以下我是我修改后初始化的代码 /*环信*/ private void initEmChat(){ EMOptions options = initChatOptions(); if (EaseUI.getInstance().init(context, options)) { //设为调试模式,打成正式包时,最好设为false,以免消耗额外的资源 EMClient.getInstance().setDebugMode(true); } } private EMOptions initChatOptions(){ // 获取到EMChatOptions对象 EMOptions options = new EMOptions(); // 默认添加好友时,是不需要验证的,改成需要验证 options.setAcceptInvitationAlways(false); // 设置是否需要已读回执 options.setRequireAck(true); // 设置是否需要已送达回执 options.setRequireDeliveryAck(false); //使用gcm和mipush时,把里面的参数替换成自己app申请的 //设置google推送,需要的GCM的app可以设置此参数 options.setGCMNumber("324169311137"); //在小米手机上当app被kill时使用小米推送进行消息提示,同GCM一样不是必须的 options.setMipushConfig("2882303761517426801", "5381742660801"); //集成华为推送时需要设置// options.setHuaweiPushAppId("10492024"); return options; } 重点就在于 EMClient.getInstance().setDebugMode(true);这句话 必须在EaseUI初始化之后才能执行