全部产品
云市场

Android开发文档

更新时间:2019-05-29 22:53:39

一、接入前准备

接入客户端SDK前请先阅读融合通信服务整体接入流程并理解以下概念

  • token

    为了保证安全性,融合通信SDK通过服务端下发的临时token作为身份标识与服务进行交互。临时token可通过融合通信服务pop接口从阿里云获得(详见服务端接入文档),并且具有时效性。SDK在token即将失效或其他需求而需要更新token时,会通过回调通知接入方,App需自行实现接口获取最新token并传递给SDK。推荐的交互流程如下: pic

  • 账号

    融合通信SDK需要使用融合通信账号接入,关于融合通信账号的申请与使用请参阅融合通信服务整体接入流程。融合通信账号与上述临时Token一一对应不能交叉使用。

  • 版本

    融合通信SDK分为音频版本与视频版本,视频版本支持所有功能,音频版本仅支持音频通话,可以通过版本号区分当前版本是否支持视频(音频版本号以.audio结尾),也可以调用API判断。

二、依赖接入

  • gradle(暂未开放)

    • gradle 3.4及以上版本

      1. implementation 'com.alicom.rtc:alicomRTC:latest.release@aar'){
      2. transitive true
      3. }
      4. or
      5. api ('com.alicom.rtc:alicomRTC:latest.release@aar'){
      6. transitive true
      7. }
    • gradle 3.4以下版本

      1. compile ('com.alicom.rtc:alicomRTC:latest.release@aar'){
      2. transitive true
      3. }
  • maven(暂未开放)

    1. <dependency>
    2. <groupId>com.alicom.rtc</groupId>
    3. <artifactId>alicomRTC</artifactId>
    4. <version>最新版本号</version>
    5. <type>aar</type>
    6. </dependency>
  • 本地依赖

    请先下载融合通信SDK(暂未开放下载,请联系客服经理) ,解压后放至项目目录,然后根据项目打包环境,自行引入本地依赖。

    gradle配置参考:

    1. implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])

    如若使用本地依赖,请确保项目中已引入以下依赖:

    1. 'com.alibaba:fastjson:1.2.48'
    2. 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.1'
  • 注意

    • 如若接入方项目构建中因引入其他依赖包从而导致出现类重复或冲突,请联系业务经理。

    • 目前sdk中暂只包含armeabi架构so库,故在打包时请在build.gradle加入以下配置:

      1. android{
      2. ......
      3. ndk {
      4. abiFilters 'armeabi'
      5. }
      6. }

      如若需要其他架构so库,请联系业务经理。

三、混淆配置

主线版本混淆配置:

  1. -keep class * implements java.io.Serializable{*;}
  2. -keep class org.artc.webrtc.**{*;}
  3. -keep class org.eclipse.paho.client.mqttv3.**{*;}
  4. -keep class com.taobao.artc.internal.**{*;}
  5. -keepclasseswithmembernames class * {
  6. native <methods>;
  7. }

四、快速开始

  1. 创建实例

    1. //建议将AlicomRTC作为单例使用,多个实例会导致资源冲突与状态紊乱
    2. AlicomRTC alicomRTC = AlicomRTC.create(context);
  2. 设置参数与回调(可选)

    1. //添加一个监听服务状态的回调
    2. alicomRTC.addListener(new ServiceListener() {
    3. //服务连接成功,当前处于可用状态
    4. public void onServiceAvailable() {}
    5. //服务连接失败、或者连接断开了,正在销毁资源,当前处于不可操作
    6. public void onServiceUnavailable(int errCode, String errMsg) {}
    7. //服务已销毁完成,当前处于未连接状态
    8. public void onServiceIdle(){}
    9. //收到点对点音频来电
    10. public void onReceivingAudioCall(Call call){}
    11. //收到点对点视频频来电
    12. public void onReceivingVideoCall(VideoCall videoCall){}
    13. });
    14. //可选,设置本地默认的视频采集分辨率
    15. alicomRTC.setDefaultCaptureConfig(CaptureConfig.FPS15_360P);
    16. //可选,设置默认的呼叫超时时间
    17. alicomRTC.setDefaultCallTimeout(60);
  3. 连接服务

    1. /*
    2. * 连接服务,有账号模式需调用initWithRtcId传入融合通信账号,
    3. *无账号模式则调用initWithCustomId传入自定义账号,
    4. *以及TokenUpdater的实现用于获取token
    5. *(Token的具体获取过程由接入方自己实现,
    6. *由接入方app从接入方服务端获取,
    7. *而服务端通过pop服务从云通信获取)。
    8. *SDK每过一段时间就会请求新的token,
    9. *接入方需要实现方法实时获取id对应最新token。
    10. *连接成功时会在第2步添加的ServiceListener中回调。
    11. */
    12. TokenUpdater tokenUpdater = new new TokenUpdater() {
    13. @Override
    14. public void updateToken (TokenHandler tokenHandler){
    15. //get latest token string from network, then
    16. tokenHandler.setToken(Token.fromJsonString(latestTokenString));
    17. }
    18. }
    19. //调用此方法进行初始化连接
    20. alicomRTC.initWithRtcId(userId, tokenUpdater);
  4. 开始通话

    ServiceListener中的onServiceAvailable回调被唤起时,表示服务已经连接成功,此时可以开始发起各类通话:

    发起voip2voip呼叫

    1. //Call代表了一通具体的通话
    2. alicomRTC.builder().voipCall(targetUserId).listener(listener).build().start();

    发起voip2pstn呼叫

    1. //targetShowNumber为被叫方显示的来电号码,需要从云通信购买可用号码
    2. alicomRTC.builder().pstnCall(targetShowNumber, targetPhoneNumber).listener(listener).build().start();

    接听电话

    1. //在ServiceListener中
    2. public void onReceivingAudioCall(Call call) {
    3. call.start();
    4. }

    挂断/拒绝电话

    1. call.stop();
  5. 销毁服务

    1. alicomRTC.destroy();

五、API 概述

  • 入口

    • AlicomRTC为API入口,包含初始化服务、添加生命周期回调、销毁服务、设置全局默认属性、构建通话入口以及一些全局公共方法
    • TokenUpdater是接入方需要实现的获取最新token的方法,sdk在需要时会唤起该回调获取最新token,接入方在获取到最新token串后可以调用Token.fromJsonString()方法快捷的获取实例并调用TokenHandler.setToken()方法设置token

      |center

    • 调用AlicomRTC.builder方法可以获得构建器用于创建各类通话,并可以设置部分参数

      |center

  • 通信

    • 融合通信服务SDK将不同通话功能与类型分拆到了相应的类。比如VideoCall就表示视频点对点通话,包含了视频点对点通话中所有的操作方法,每一个该类的实例表示具体的一次通话,不可重复使用。而基类TalkVideoTalk分别定义了音频与视频通话的公共方法,没有对应的具体实现

      |center

  • 监听

    • 接口TalkListener中定义了所有公共回调,具体类型的监听回调接口都继承与该接口。

      |center

    • 每一个具体的通话类型都对应一个事件监听回调,接入方可以在构建通话时设置监听,也可以调用相应set方法设置监听。

      |center

六、API Reference

完整的API Reference请见:

API Reference

七、FAQ

7.1 事件回调会在什么线程回调呢?

请注意,SDK中所有的Listener回调都会在主线程回调到接入方。

7.2 每次SDK回调需要更新Token时都要向服务端获取最新的Token吗?

是的,你答对了,真聪明。

7.3 我可以实例化多个AlicomRTC吗?

建议将AlicomRTC作为单例使用,否则多个实例间会造成Token互斥以及底层资源冲突。