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

标题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> nameValuePair = new ArrayList<NameValuePair>(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集成融云音视频通话遇到的问题相关推荐

  1. 浅试uniapp 集成融云 实现视频通话

    1.集成所需插件 2.视频接通没有画面 需要再mainfest.json中增加配置 根据demo配置 3.视频需要在整个app内被监听 需要将代码写在app.vue里 但是连接需要写在 登录页面 需要 ...

  2. android讨论功能,集成融云Android SDK实现在群聊/讨论组中@人的功能

    集成融云Android SDK实现在群聊/讨论组中@人的功能 可以确定的是融云SDK本身不提供@的功能,需要自定义实现. 在实现这个功能时,基本模仿微信的做法: 在列表中显示有人@了你 通知显示有人@ ...

  3. 快速集成融云SDK– Android Studio

    现在很多应用都加入了即时通讯功能(客服等),选择第三方的SDK比较省事快捷,这里就介绍一下集成融云SDK时遇到的一些问题. 这个是官网的集成指南:http://www.rongcloud.cn/doc ...

  4. 集成融云 SDK 怎么实现多端同步未读数

    最近在集成融云 SDK 的时候,碰到了一个跟未读数有关的问题,现象是这样的: 比如我在其中 Web 端已经清除了某个会话的未读数然后退出,再换个设备登入,这个时候未读数还有,并没有清除掉,我就纳闷了, ...

  5. 项目中集成融云即时通讯

    http://blog.csdn.net/qq_28759359/article/details/52689948 项目中集成融云IM,能够单聊,离线能够收到消息,有聊天列表. 一我使用的是融云. I ...

  6. iOS 关于集成融云IM的一些常用方法

    容我磨叽一下 即使我也知道看这篇文章的人是不会看的,但是我还是想说啊,融云你们把文档好好写一下啦,APP什么的作为demo真的很鸡肋啊. 步入正题 这篇文章不是介绍集成融云的各种前期准备的(就是怎么注 ...

  7. Android集成阿里云旺即时通讯踩坑历程

    下载云旺的demo,将demo中的OneSDK直接拷贝,作为Moudle进行依赖,具体操作就不说了,OneSDK是最新的,一定不要进行修改, 进行依赖后,可能会遇到buildToolsVersion ...

  8. 融云发送图片消息_Web 端集成融云 SDK 如何发送正确图片消息给移动端展示?

    Web 端集成融云 SDK 如何发送正确图片消息给移动端展示? 前言 Web 端使用融云的即时通讯 SDK 在发送图片消息给移动端的时候,移动端一般会收到一个缩略图数据和展示高清图片地址,但是往往 W ...

  9. Android超简单集成融云IM单聊

    最近项目中需要集成即时通讯,于是就选择了融云,按照步骤一步一步来还是很简单的,我做的只是单聊,(可支持发送文字.表情.图片.语音)下面记录一下 先上图 步骤: 一,去融云官网注册账号然后创建应用,应用 ...

最新文章

  1. ​哪些开发问题最让程序员“头秃”?我们分析了Stack Overflow的11000个问题
  2. 怎样去掉警告 log4j:WARN No appenders could be found for logger
  3. python 水仙花_python 水仙花
  4. 4 MIGO报错-更正统一日记账分类账的定制设置
  5. React UI 库 React Suite 3.7.9 版本更新
  6. 2021鞍山市高考成绩怎么查询,鞍山师范学院
  7. 埃及分数怎么计算java_贪心算法之埃及分数问题(附c++源代码)
  8. ASP.NET 使用application和session对象写的简单聊天室程序
  9. stata15中文乱码_如何解决 Stata 14 的中文乱码问题?Chinese support in Stata 14
  10. 赋能智慧交通的5G关键技术
  11. NRF52832 RNG
  12. C语言经典例题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,两年内每个月的兔子总数为多少?
  13. VC++6.0 总是1error 问题的解决
  14. React Native关于使用CameraRoll出现的问题@react-native-camera-roll/camera-roll@react-native-community/cameraro
  15. 推荐一款免费的SQLsever的备份软件sqlBackupAndFtp
  16. python生成随机数列表
  17. linux 2 、Xshell连接Ubuntu
  18. 【技术美术图形部分】AO理论及优化 AO贴图如何参与渲染
  19. 填坑:Windows下使用OpenSSL生成自签证书(很简单,一个晚上搞明白的,让后来者少走弯路)...
  20. 从三个角度分析,UI设计师为什么要学习产品原型设计?

热门文章

  1. mooc北大软件工程课后习题答案与解析-第三周:结构化分析方法
  2. MySQL中 delimiter 关键字详解
  3. 网络通信协议-ICMP协议
  4. Redis面试题(2022版)
  5. cookie、session与token
  6. 【Qt】深度解析QVector和QList
  7. windows 10系统自动更新后卡顿
  8. 柯尼卡美能达AccurioPress C2070系列全新彩色生产型数字印刷系统重磅登场
  9. raid超级块组织,外部元数据与内部元数据
  10. python实现自动化(pyautogui全面总结)