云视频会议 AliMeetingUISDK 提供了一套用于加入视频会议的接口集合,开发者可以通过调用 AliMeetingUISDK(以下简称 SDK),可以在自己的 iOS 软件中快速集成阿里音视频会议。
背景信息
2 SDK 文件结构
首先下载 AliMeetingUISDK.framework + AliMeetingSDK.framework 到本地,sdk+Demo下载地址:
SDK:SDKFramework.zip
其中:
-
AliMeetingUISDK.framework
云视频会议UISDK核心库文件
-
AliMeetingSDK.framework
云视频会议MeetingSDK核心库文件
Demo Code:
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
修复昵称过长覆盖麦克风图标
修复用户未设置头像时头像展示错误