分享一些Android集成融云音视频通话遇到的问题

最近应公司需要加入音视频聊天的功能,领导也没吱声就跟融云那边把商务谈好了,让我开始做,之前也没接触过这方面的东西,查阅资料发现音视频这块都是比较笼统的大致介绍一下,最后也是坎坷了一番完成了任务,接下来我们看步骤。

标题1:通话用到的SDK

首先融云给我们提供了多种SDK应对不同的方案,我们这里主要使用的是CallKit就是这种带UI的音视频通话,注意这里它指的UI是类似微信有音视频通话时弹出接听的界面。我之前就理解成了消息列表的页面走了点儿弯路。然后我们就可以到通运的官网下载CallKit的SDK啦。

标题2:自动导入遇到的问题,建议手动导入

下载好SDK之后我们将它解压然后在Studio中将他引入,融云这边提供了两种引入方式,自动引入跟手动引入,注意这里第一个问题就来了,大家呢千万别图省事儿就选择自动导入,因为后面可能会出现被呼叫方无法唤醒接听页面的问题,尽量选择手动导入File–>new–>Import Model,引入之后根据官方文档的手动导入进行配置就可以。

标题3:初始化

然后我们继续按照开发文档继续往下进行初始化,在Application的onCreate()方法中调用RongIM.init(this,appKey);这个方法就可以了,appKey这个参数就是你在融云生成的AppKey,这一块文档中写的很详细。

标题4:获取Token

接下来就要进行最重要的环节了获取Token这一块融云写的文档比较模糊我就直接把代码放上来了,创建一个类

public class GetToken {
    public static String GetRongCloudToken(String username,String yhid) {
        StringBuffer res = new StringBuffer();

        String url = "https://api.cn.ronghub.com/user/getToken.json";

        String App_Key = "开发者平台分配的 App Key"; //开发者平台分配的 App Key。

        String App_Secret = "开发者平台分配的 App_Secret ";

        String Timestamp = String.valueOf(System.currentTimeMillis() / 1000);//时间戳,从 1970 年 1 月 1 日 0 点 0 分 0 秒开始到现在的秒数。

        String Nonce = String.valueOf(Math.floor(Math.random() * 1000000));//随机数,无长度限制。

        String Signature = sha1(App_Secret + Nonce + Timestamp);//数据签名。

        Log.e("GetToken",Signature);

        HttpClient httpClient = new DefaultHttpClient();

        HttpPost httpPost = new HttpPost(url);

        httpPost.setHeader("App-Key", App_Key);

        httpPost.setHeader("Timestamp", Timestamp);

        httpPost.setHeader("Nonce", Nonce);

        httpPost.setHeader("Signature", Signature);

        httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");

        List nameValuePair = new ArrayList(1);

        nameValuePair.add(new BasicNameValuePair("userId",yhid));
        nameValuePair.add(new BasicNameValuePair("name",username));
       
        Log.i("getTOKEN",nameValuePair.toString());

        HttpResponse httpResponse = null;

        try {

            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair,"utf-8"));

            httpResponse = httpClient.execute(httpPost);

            BufferedReader br = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));

            String line = null;

            while ((line = br.readLine()) != null) {

                res.append(line);

            }
        } catch (IOException e) {

            e.printStackTrace();

        }



        UserRespone userRespone = JSON.parseObject(res.toString(), UserRespone.class);

        Log.e("GetToken",userRespone.getCode()+"");

        return userRespone.getToken();

    }

    //SHA1加密//http://www.rongcloud.cn/docs/server.html#通用_API_接口签名规则

    private static String sha1(String data){

        StringBuffer buf = new StringBuffer();

        try{

            MessageDigest md = MessageDigest.getInstance("SHA1");

            md.update(data.getBytes());

            byte[] bits = md.digest();

            for(int i = 0 ; i < bits.length;i++){

                int a = bits[i];

                if(a<0) a+=256;

                if(a<16) buf.append("0");

                buf.append(Integer.toHexString(a));

            }

        }catch(Exception e){



        }

        return buf.toString();

    }

}

GetRongCloudToken()这个方法需要传递三个参数,UserId,UserName,以及用户头像,这块儿融云给出的文档三个参数都是必传参数,但是根据你的情况来定,传一个一样可以生成,我是在登陆的时候获取的Token然后进行连接服务器的,当然获取Token要请求接口是个耗时操作,进行的时候你们应该懂得,如果是测试阶段你可以到融云平台直接获取Token具体操作也直接给大家把在融云的官网登录之后–>服务管理–>API调用–>获取Token参数写进去提交之后就生成了。

标题4:建立连接

获取到Token之后我们就可以根据官方文档给出的RongIM.connect()方法建立连接了,这个官方文档中都有,就不做过多介绍了。

标题5:发起单人通话

以上步骤都完成后就可以调用RongCallKit.startSingleCall(MainActivity.this, "1001", RongCallKit.CallMediaType.CALL_MEDIA_TYPE_VIDEO);进行担任同化了,第二个参数是你要进行通话的对方的userid,至于第三个就是音频视频的类型了。

标题6:无法唤醒接收方语音视频消息的提示页面

因为我选择的是手动导入 所以可以直接修改CallKit下的源码,解决方案是打开CallKit找到RongCallModule类然后仔啊onCreate()方法第一行增加代码mViewLoaded = true。这就是前面说的推荐手动导入的原因,自动导入都是jar包你根本没有权限修改,我提了三次工单他都说让我修改这个,后面改成手动导入解决了问题。

获取Token的代码转自:https://blog.csdn.net/lwqldsyzx/article/details/52180106
希望可以帮到大家,对了,集成的时候尽量对照官方文档集成,少搜博客,不然越弄越乱,我这个只用到了单聊如果遇到了群聊的问题大家自己研究一下吧

你可能感兴趣的:(分享一些Android集成融云音视频通话遇到的问题)