云视频会议 AliMeetingUISDK 提供了一套用于加入视频会议的接口集合,开发者可以通过调用 AliMeetingUISDK(以下简称 SDK),可以在自己的 iOS 软件中快速集成阿里音视频会议。

背景信息

2 SDK 文件结构

首先下载 AliMeetingUISDK.framework + AliMeetingSDK.framework 到本地,sdk+Demo下载地址:

SDK:SDKFramework.zip

其中:

  • AliMeetingUISDK.framework

    云视频会议UISDK核心库文件

  • AliMeetingSDK.framework

    云视频会议MeetingSDK核心库文件

Demo Code:

AliMeetingUISDKSample-OC.zip

AliMeetingUISDKSample-Swift.zip

3 快速入门教程

3.1 描述

本文面向有一定的 cocoa 以及 Objective-C 或者 Swift 基础的开发者,旨在引导读者快速接入 SDK。

3.2 依赖及环境配置

AliMeetingUISDK需要Xcode10.0及以上版本

AliMeetingUISDK支持iOS9.0及以上版本

AliMeetingUISDK支持使用 Objective-C、Swift 语言接入,支持 armv7 & arm64

限制:armv7 及 iPhone 6 以下设备只支持音频会议,不支持视频会议

3.3 工程创建

1. 添加AliMeetingUISDK.framework

创建工程先把下载好的AliMeetingUISDK.framework和AliMeetingSDK.framework文件加入工程目录中

添加路径为 Xcode - General - Frameworks, Libraries, and Embedded Content

添加路径为 Xcode - Build Phases - Copy Files,同时将Destination选项改为Frameworks

2. 开启 VOIP 模式

需要打开 Background Modes 开关,并勾选“Voice over IP”选项以允许应用在后台时能够正常通话

3. 在 info.plist 添加照相机和麦克风权限和网络权限

4. 修改Enable Bitcode为NO

修改路径为 Xcode - Build Setting 搜索Enable Bitcode

3.4 业务代码集成

3.4.1 swift 版本

1. 构建入会信息,添加各项入会参数

let meetingConfig: [String: Any] = [
                                            AliMeetingConfigKey.meetingCode: meetingCode,
                                            AliMeetingConfigKey.meetingToken: meetingToken,
                                            AliMeetingConfigKey.meetingUUID: meetingUUID,
                                            AliMeetingConfigKey.memberUUID: memberUUID,
                                            AliMeetingConfigKey.meetingDomain: meetingDomain,
                                            AliMeetingConfigKey.clientAppID: clientAppID,
                                            AliMeetingConfigKey.userID: userID
                                        ]

注:meetingConfig以下参数需要从ISV 服务端获取:

(关于云视频会议的开发流程请参考文档:https://help.aliyun.com/document_detail/145896.html

AliMeetingConfigKey.meetingCode /// 会议码,必填项

AliMeetingConfigKey.meetingToken /// 会议 token,必填项

AliMeetingConfigKey.meetingUUID /// 会议唯一标识,必填项

AliMeetingConfigKey.memberUUID /// 入会企业成员 ID(企业内唯一标识),必填项

AliMeetingConfigKey.meetingDomain /// 会议链接使用的 domain,必填项

AliMeetingConfigKey.clientAppID /// 入会客户端 ID,必填项

AliMeetingConfigKey.userID /// 入会用户 ID (用户唯一标识),必填项

2. 自定义分享操作

 ///自定义分享操作
                                        AliMeetingUISDKManager.shared.copyAction = {
                                            print("copy share")
                                        }
                                        AliMeetingUISDKManager.shared.dingTalkShareAction = {
                                            print("ding talk share")
                                        }
                                        AliMeetingUISDKManager.shared.wechatShareAction = {
                                            print("wechat share")
                                        }

3. 自定义会后评价

// 自定义会后评价默认不展示,配置后展示)
                                        AliMeetingUISDKManager.shared.feedbackURL = URL(feedbackURL)
                                        AliMeetingUISDKManager.shared.feedbackCustomCookie = "version=ga"

4. 邀请入会

///邀请入会(不实现就不展示邀请入口)
AliMeetingUISDKManager.shared.sendAnInvitation = {
            print("邀请入会")
        }

5. 用户入会/离开回调

 ///用户入会/离开回调
    AliMeetingUISDKManager.shared.onMeetingUserStatusChange = {
            (clicent, event) in
            print(clicent.name)
            print(event)
        }

注:用户状态改变类型

///Meeting User状态事件
@objc public enum AliMeetingSDKUserStatusEvent : Int {
    ///成员上线
    case Online
    ///成员离线
    case Offline
    ///静音
    case AudioMute
    ///取消静音
    case AudioUnMute
    ///禁视频
    case VideoMute
    ///打开视频
    case VideoUnMute
    ///说话中
    case StartTalking
    ///结束说话
    case StopTalking
    ///主讲人切换
    case MainSpeaker
    ///网络变化
    case NerworkChange
}

6. 只有发起人才可以静音他人设置

/// 只有发起人才可以静音他人(默认false)
        AliMeetingUISDKManager.shared.onlyMasterCanMuteAudio = true

7. 只有发起人才可以静音他人设置

/// 只有发起人才可以挂断他人(默认false)
        AliMeetingUISDKManager.shared.onlyMasterCanHangUp = true

8. 入会成功回调

 ///入会成功回调
    AliMeetingUISDKManager.shared.onMeetingJoinedSuccess = {
            print("入会成功")
        }

9. 退会成功回调

///退会成功回调
    AliMeetingUISDKManager.shared.onMeetingEnding = {
            (code,reason) in
            print(code.rawValue)
            print(reason)
        }

注:会议结束原因枚举

///会议结束原因枚举
@objc public enum ALiMeetingSDKFinishCode : Int {

    ///用户主动退会
    case NORMAL_QUIT

    ///信令错误
    case SIGNALING_ERROR

    ///会议已取消
    case MEETING_CANCELLED

    ///用户被移除会议
    case REMOVED_FROM_MEETING

    ///用户通过其它端入会,当前端被强制退会
    case HANGUP_BY_SELF

    ///用户被其他人挂断
    case HANGUP_BY_SERVER

    ///信令连接失败
    case SIGNALING_CONNECT_FAILED

    ///ICE连接失败
    case ICE_CONNECT_FAILED
}

10. 设置日志等级

///设置日志等级
        AliMeetingUISDKManager.shared.logLevel = .All

注:日志等级

///  日志级别
@objc public enum LoggingLevel : Int {

    /// 关闭
    case Off

    /// 输出Error日志
    case Error

    /// 输出Error、Warning日志
    case Warning

    /// 输出Error、Warning、Info日志
    case Info

    /// 输出Error、Warning、Info、Debug日志
    case Debug

    /// 输出Error、Warning、Info、Debug、Verbose日志
    case Verbose

    /// 输出所有日志
    case All
}

11. 加入会议

AliMeetingUISDKManager.shared.joinMeeting(withConfig: meetingConfig)

3.4.2 OC 版本

1. 构建入会信息,添加各项入会参数

NSDictionary *meetingConfig = @{AliMeetingConfigKey.meetingCode: meetingCode,
        AliMeetingConfigKey.meetingToken: meetingToken,
        AliMeetingConfigKey.meetingUUID: meetingUUID,
        AliMeetingConfigKey.memberUUID: memberUUID,
        AliMeetingConfigKey.meetingDomain:meetingDomain,
        AliMeetingConfigKey.clientAppID: clientAppID,
        AliMeetingConfigKey.userID: userID};

注:meetingConfig以下参数需要从ISV 服务端获取:

(关于云视频会议的开发流程请参考文档:https://help.aliyun.com/document_detail/145896.html

AliMeetingConfigKey.meetingCode /// 会议码,必填项

AliMeetingConfigKey.meetingToken /// 会议 token,必填项

AliMeetingConfigKey.meetingUUID /// 会议唯一标识,必填项

AliMeetingConfigKey.memberUUID /// 入会企业成员 ID(企业内唯一标识),必填项

AliMeetingConfigKey.meetingDomain /// 会议链接使用的 domain,必填项

AliMeetingConfigKey.clientAppID /// 入会客户端 ID,必填项

AliMeetingConfigKey.userID /// 入会用户 ID (用户唯一标识),必填项

2. 自定义分享操作

 ///自定义分享操作
    AliMeetingUISDKManager.shared.copyAction = ^{
        NSLog(@"copy share");
    };
    AliMeetingUISDKManager.shared.dingTalkShareAction = ^{
        NSLog(@"ding talk share");
    };
    AliMeetingUISDKManager.shared.wechatShareAction = ^{
        NSLog(@"wechat share");
    };

3. 自定义会后评价

// 自定义会后评价(默认不展示,配置后展示)
    NSString *urlStr = [NSString stringWithFormat:urlStr];
    AliMeetingUISDKManager.shared.feedbackURL = [NSURL URLWithString:urlStr];
    AliMeetingUISDKManager.shared.feedbackCustomCookie = @"version=ga";

4. 邀请入会

///邀请入会(不实现就不展示邀请入口)
        AliMeetingUISDKManager.shared.sendAnInvitation = ^{
            NSLog(@"邀请入会");
        };

5. 用户入会/离开回调

 ///用户入会/离开回调
    AliMeetingUISDKManager.shared.onMeetingUserStatusChange = ^(ALiMeetingSDKMeetingClient * _Nonnull client, enum AliMeetingSDKUserStatusEvent event) {
        NSLog(@"%@",client.name);
        NSLog(@"%ld",event);
    };

注:用户状态改变类型

/// Meeting User状态事件
typedef SWIFT_ENUM(NSInteger, AliMeetingSDKUserStatusEvent, closed) {
  ///成员上线
  AliMeetingSDKUserStatusEventOnline = 0,
  ///成员离线
  AliMeetingSDKUserStatusEventOffline = 1,
  ///静音
  AliMeetingSDKUserStatusEventAudioMute = 2,
  ///取消静音
  AliMeetingSDKUserStatusEventAudioUnMute = 3,
  ///禁视频
  AliMeetingSDKUserStatusEventVideoMute = 4,
  ///打开视频
  AliMeetingSDKUserStatusEventVideoUnMute = 5,
  ///说话中
  AliMeetingSDKUserStatusEventStartTalking = 6,
  ///结束说话
  AliMeetingSDKUserStatusEventStopTalking = 7,
  ///主讲人切换
  AliMeetingSDKUserStatusEventMainSpeaker = 8,
/// 网络变化
  AliMeetingSDKUserStatusEventNerworkChange = 9,
};

6. 只有发起人才可以静音他人设置

/// 只有发起人才可以静音他人(默认false)
        AliMeetingUISDKManager.shared.onlyMasterCanMuteAudio = YES;

7. 只有发起人才可以静音他人设置

/// 只有发起人才可以挂断他人(默认false)
        AliMeetingUISDKManager.shared.onlyMasterCanHangUp = YES;

8. 入会成功回调

 ///入会成功回调
    AliMeetingUISDKManager.shared.onMeetingJoinedSuccess = ^{
        NSLog(@"加入会议成功");
    };

9. 退会成功回调

///退会成功回调
    AliMeetingUISDKManager.shared.onMeetingEnding = ^(enum ALiMeetingSDKFinishCode code, NSString * _Nonnull reson) {
        NSLog(@"%ld",code);
        NSLog(@"%@",reson);
    };

注:会议结束原因枚举

/// 会议结束原因枚举
typedef SWIFT_ENUM(NSInteger, ALiMeetingSDKFinishCode, closed) {
/// 用户主动退会
  ALiMeetingSDKFinishCodeNORMAL_QUIT = 0,
/// 信令错误
  ALiMeetingSDKFinishCodeSIGNALING_ERROR = 1,
/// 会议已取消
  ALiMeetingSDKFinishCodeMEETING_CANCELLED = 2,
/// 用户被移除会议
  ALiMeetingSDKFinishCodeREMOVED_FROM_MEETING = 3,
/// 用户通过其它端入会,当前端被强制退会
  ALiMeetingSDKFinishCodeHANGUP_BY_SELF = 4,
/// 用户被其他人挂断
  ALiMeetingSDKFinishCodeHANGUP_BY_SERVER = 5,
/// 信令连接失败
  ALiMeetingSDKFinishCodeSIGNALING_CONNECT_FAILED = 6,
/// ICE连接失败
  ALiMeetingSDKFinishCodeICE_CONNECT_FAILED = 7,
};

10. 设置日志等级

 ///设置log等级
    AliMeetingUISDKManager.shared.logLevel = LoggingLevelAll;

注:log等级

/// 日志级别
typedef SWIFT_ENUM(NSInteger, LoggingLevel, closed) {
/// 关闭
  LoggingLevelOff = 0,
/// 输出Error日志
  LoggingLevelError = 1,
/// 输出Error、Warning日志
  LoggingLevelWarning = 2,
/// 输出Error、Warning、Info日志
  LoggingLevelInfo = 3,
/// 输出Error、Warning、Info、Debug日志
  LoggingLevelDebug = 4,
/// 输出Error、Warning、Info、Debug、Verbose日志
  LoggingLevelVerbose = 5,
/// 输出所有日志
  LoggingLevelAll = 6,
};

11. 加入会议

 [AliMeetingSDKManager.shared joinMeetingWithConfig:meetingConfig];

3.5 编译、运行

疑难解答

  • swfitCore库无法找到问题

    如果运行出现以下错误:

      dyld: Library not loaded: @rpath/libswiftCore.dylib

    请进行以下操作:

    • 在工程设置Build Settings中进行以下设置:
    • 按command + shift + k清理工程文件,重新编译运行

SDK ReleaseNote

1.0.0.1 (2020-01-17)

sdk 初始化版本

1.0.0.2 (2020-03-04)

添加疑难解答

1.0.0.3 (2020-03-19)

添加入会成员会中状态回调

将会议评价设置为可选回调

增加加人UI入口(可开放给ISV自定义窗口邀请)

1.0.0.4 (2020-04-10)

添加只有发起人才可以静音他人设置

添加只有发起人才可以静音他人设置

添加入会成功回调

添加退会成功回调

1.0.0.5 (2020-04-14)

修复上传App Store报错ERROR ITMS-90034

修复昵称过长覆盖麦克风图标

修复用户未设置头像时头像展示错误