美文网首页
记录刚做完的环信+ucloud直播遇到的问题

记录刚做完的环信+ucloud直播遇到的问题

作者: 安知鱼未忆_ | 来源:发表于2018-04-28 14:52 被阅读0次
    • 1.首先环信集成必须添加的
    <meta-data
        android:name="EASEMOB_APPKEY"
        android:value="yourHuanxinAppKey"
        /> 
    

    这个appkey必须是在环信后台配置完成后返回的appkey才可以

    • 2.easeUI中的glide是3.6.1,如果主程序中使用的是4.0以上的,那么就把easeUI中的版本改成与主moudle相同的版本
      要不然可能会出现:

    Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.

    如果出现这样的错误,也不要着急
    找到Androidstudio窗口的右下角 Gradle Console 在这其中的最底部会有一句这样一句try开头的错误代码

    Try:
    Run with --stacktrace option to get the stack trace. Run with --infoor --debug option to get more log output.
    Get more help at https://help.gradle.org

    点击try之后的

    Run with --stacktrace 
    

    会出现比如像下面格式的错误代码

    java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
    Error:com.android.dex.DexException: Multiple dex files define Lcom/nineoldandroids/animation/ArgbEvaluator;

    看到这个,那么好吧,你已经离解决问题不远了,这种问题主要是在最后一个类名的身上找突破口,比如Lcom/nineoldandroids/animation/ArgbEvaluator;
    中的ArgbEvaluator,双击shitf 全局搜索一下这个类名,看那些类库中使用到了,如下图这样:


    找到之后把多余的类库该删的删,该统一版本的统一版本,具体的就看你自己的了。
    ps:改完之后不要忘了Clean Project哦!
    • 3.如果直播时发送信息不显示名字
    messageView.init(chatroomId);
    messageView.setMessageViewListener(new RoomMessagesView.MessageViewListener() {
          @Override
          public void onMessageSend(String content) {
                        EMMessage message = EMMessage.createTxtSendMessage(content, chatroomId);
    //                        if (messageView.isBarrageShow) {
    //                            message.setAttribute(DemoConstants.EXTRA_IS_BARRAGE_MSG, true);
    //                            barrageLayout.addBarrage(content,
    //                                    EMClient.getInstance().getCurrentUser());
    //                        }
                            message.setChatType(EMMessage.ChatType.ChatRoom);
                            message.setAttribute("nickname", Configure.meBean.getData().getNickname());
                            EMClient.getInstance().chatManager().sendMessage(message);
                            message.setMessageStatusCallback(new EMCallBack() {
                                @Override
                                public void onSuccess() {
                                    //刷新消息列表
                                    messageView.refreshSelectLast();
                                }
                                @Override
                                public void onError(int i, String s) {
    showToast("消息发送失败!");
                                }
                                @Override
                                public void onProgress(int i, String s) {
    }
    });
                        }
    

    修改message.setAttribute中的value值,如果没有特殊需求一般情况都是修改为在登录时存储的用户名或者使用更新个人信息接口中的个人昵称。

    • 4.如果发起直播或者获取房间列表无法拉流成功

      把推拉流地址拿到,放到ucloud官方给的demo中测试一下,确定不是推拉流地址的问题

      如果出现错误码401,请试试在进入MainActivity

      • (1) 调一下环信登录接口确保环信的token有效,
      • (2) 而且还要在后台设置测试手机号或者帐号为主播帐号,
      • (3) 在ucloud后台的云直播中配置好初始化的推流地址
    • 5.需要配置的几个地方

      • (1) application类中进行初始化,并填入后台给予的secretkey
      • (2) Androidmenifast文件中,配置APPKEY及相关权限
      • (3)集成easeUI(注:最好不要直接copy代码,以加依赖形式进行添加),
    • 6.如果碰到

    Error:com.android.dex.DexException: Multiple dex files define Landroid/support/v4/content/ModernAsyncTask;

    这样的错误,莫慌,只要把主项目中的V4包改成与拥有ModernAsyncTask这个类的其他Android自带类库的最高版本相同就可以了,具体使这个类显示出来的方法同上 2中的搜索方法

    • 7.如果有只有推流成功,而无法拉流成功

      • 我遇到的情况是放到Ucloud直播demo中依然不行
        在这种情况下请先下载ucloud直播demo,然后把拉流的URL拿出来放到demo中去尝试,如果demo中无法拉流成功请到ucloud后台找到云直播live里的域名管理,看看有没有配置好。
    • 8.测试完成需要注意把手机号码改写为后台返回的值,要不然就会导致只能看你写死的那个手机号发起的直播了。(这一条你可以当做只看看的掠过,毕竟每人的情况不同,我这里是有了只允许单人直播的限制,所以需要用单个人的帐号或者手机号进行测试)

    • 9.如果项目中之前没有集成过环信+Ucloud直播那么在集成完成没有问题之后,要在登录注册时都要进行环信的本地登录
      具体代码如下:

    /***
         * 登录环信
         */
        private void loginHuanxin(final String username, final String password) {
            EMClient.getInstance().login(username,password.toLowerCase(),new EMCallBack() {//回调
                @Override
                public void onSuccess() {
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                List<EMGroup> grouplist = EMClient.getInstance().groupManager().getJoinedGroupsFromServer();
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                            EMClient.getInstance().groupManager().loadAllGroups();
                            EMClient.getInstance().chatManager().loadAllConversations();
                            Log.d("main", "登录聊天服务器成功!");
                        }
                    }).start();
    //                handler.sendEmptyMessage(1);
                }
    
    
                @Override
                public void onProgress(int progress, String status) {
    
                }
    
                @Override
                public void onError(int code, String message) {
                    Log.d("main", "登录聊天服务器失败!");
                    if (code == EMError.USER_NOT_FOUND){//如果登录环信服务器失败,导致用户名找不到时,调用环信本地注册接口方法,注册方法在下面贴出来
                        RegistHuanxin(username,password);
                    }
                }
            });
        }
    
    //注册环信的方法
     private void RegistHuanxin(final String username,final String pwd) {
            //注册失败会抛出HyphenateException
            new Thread(new Runnable() {
                public void run() {
                    try {
                        // call method in SDK
                        EMClient.getInstance().createAccount(username, pwd);
                        runOnUiThread(new Runnable() {
                            public void run() {
                                DemoHelper.getInstance().setCurrentUserName(username);
    
    //                                Toast.makeText(getApplicationContext(), getResources().getString(R.string.Registered_successfully), Toast.LENGTH_SHORT).show();
                            }
                        });
    loginHuanxin(username,pwd);//当登录失败重新注册时,需要重新登录一下。
                    } catch (final HyphenateException e) {
                        runOnUiThread(new Runnable() {
                            public void run() {
                                int errorCode=e.getErrorCode();
                                if(errorCode== EMError.NETWORK_ERROR){
                                    Toast.makeText(getApplicationContext(), getResources().getString(R.string.network_anomalies), Toast.LENGTH_SHORT).show();
                                }else if(errorCode == EMError.USER_ALREADY_EXIST){
                                    Toast.makeText(getApplicationContext(), getResources().getString(R.string.User_already_exists), Toast.LENGTH_SHORT).show();
                                }else if(errorCode == EMError.USER_AUTHENTICATION_FAILED){
                                    Toast.makeText(getApplicationContext(), getResources().getString(R.string.registration_failed_without_permission), Toast.LENGTH_SHORT).show();
                                }else if(errorCode == EMError.USER_ILLEGAL_ARGUMENT){
                                    Toast.makeText(getApplicationContext(), getResources().getString(R.string.illegal_user_name),Toast.LENGTH_SHORT).show();
                                }else{
                                    Toast.makeText(getApplicationContext(), getResources().getString(R.string.Registration_failed), Toast.LENGTH_SHORT).show();
                                }
                            }
                        });
                    }
                }
            }).start();
    
    
        }
    
    • 10.环信+ucloud做直播是除了登录和注册时需要进行环信的登录之外,你第二次打开APP,已经是自动登录的状态下,你的环信是不会自动登录的,所以你就需要一下的解决办法来缓和一下情绪
      如果在第二次打开需要在本地进行环信的重新登录,我的办法是在mainActivity中判断了token和 环信帐号 不为空时,进行一波环信的登录,是真的虚浮。

    待续....

    相关文章

      网友评论

          本文标题:记录刚做完的环信+ucloud直播遇到的问题

          本文链接:https://www.haomeiwen.com/subject/vjijlftx.html