会议管理
入会
joinConference,pcode入会默认使用此方法
-(void)joinConfrenceWithReq:(TangClientInterfaceObject*) req completion:(void (^)(BOOL success, NSError *error))completion;
joinConference,link入会默认使用此方法
-(void)joinConfrenceWithLink:(TangClientInterfaceObject*) req completion:(void (^)(BOOL success, NSError *error))completion;
joinConference,第三方入会方法,注意,此方法需要额外定制功能,客户自行使用时,默认使用以上两个方法
-(void)joinConferenceWithThird:(TangClientInterfaceObject*) req completion:(void (^)(BOOL success, NSError *error))completion;
参数
参数 | 描述 |
---|---|
req | 进入SDK需要传递的参数,见下面的详细说明 |
completion | 入会相关回调 |
参数 | 描述 |
---|---|
pcode | 入会码/入会链接 |
用户信息
参数 | 描述 |
---|---|
name | 入会的用户名称。name和email可以二选一 |
入会的用户邮箱。name和email可以二选一 | |
userID | 用户ID,默认空,如果传入则为全时用户的用户名 |
iconUrl | 头像链接,默认空,显示首字母头像,如果传入则为全时用户的头像 |
PreferredVoiceType参数说明
参数 | 描述 |
---|---|
TCPreferredVoiceType_NONE=0 | 默认值,VOIP(如果管理中心配置支持) |
TCPreferredVoiceType_NoVoice=7 | 不选语音方式入会 |
TCPreferredVoiceType_PSTN=6 | PSTN方式入会 |
TCPreferredVoiceType_VOIP=1 | 以VoIP方式入会 |
TangClientInterface.h中接口说明
修改视频展示比例
方法 | 描述 | 说明 |
setVideoDisplayScale | 设置视频显示比例模块 | 0:铺满,1:原始比例 |
更多入会方式
全时云会议iOS目前支持3种入会方式
快速加入会议
Pcode入会
- 在viewcontroller中
import <TangClientSDK/TangClientSDK.h>
- 调用 joinConfrenceWithReq 加入会议。自行设置TangClientInterfaceObject中必传的两个属性name和pcode,其他属性可以根据需要自行设置。
示例,可直接使用如下代码入会:
[[TangClientInterface
sharedTangClientInterface]initLocaleLanguage:LocaleLanguage_Chinese];
TangClientInterfaceObject *sampleObj = [[TangClientInterfaceObject alloc]init];
sampleObj.name = @"测试1";
sampleObj.pcode = @"028525330390961049 ";//此密码仅供集成测试使用,详细请沟通技术支持获取
sampleObj.userId = @"";
// Do any additional setup after loading the view.
TangClientConfiguration * configs = [TangClientConfiguration defaultConfiguation];
[[TangClientInterface sharedTangClientInterface] setTangClientConfig:configs];
[[TangClientInterface sharedTangClientInterface] joinConfrenceWithReq:sampleObj completion:^(BOOL finished, NSError *error) {
if(!finished){
if(error!=nil){
if([error code]!=15007){ //取消入会,不要弹出提示
NSLog(@"error : %@",error.localizedDescription);
}
}
}
}];
链接加入会议
1.在viewcontroller中
import <TangClientSDK/TangClientSDK.h>
2.调用 joinConfrenceWithLink加入会议。自行设置TangClientInterfaceObject中必传的两个属性name和pcode,pcode此时作为入会链接使用,例如以https://....,
开头的云会议链接。其他属性可以根据需要自行设置。
示例,可直接使用如下代码入会:
[[TangClientInterface
sharedTangClientInterface]initLocaleLanguage:LocaleLanguage_Chinese];
TangClientInterfaceObject *sampleObj = [[TangClientInterfaceObject alloc]init];
sampleObj.name = @"测试1";
sampleObj.pcode = @"https://... ";//此密码仅供集成测试使用,详细请沟通技术支持获取
sampleObj.userId = @"";
// Do any additional setup after loading the view.
TangClientConfiguration * configs = [TangClientConfiguration defaultConfiguation];
[[TangClientInterface sharedTangClientInterface] setTangClientConfig:configs];
[[TangClientInterface sharedTangClientInterface] joinConfrenceWithLink:sampleObj completion:^(BOOL finished, NSError *error) {
if(!finished){
if(error!=nil){
if([error code]!=15007){ //取消入会,不要弹出提示
NSLog(@"error : %@",error.localizedDescription);
}
}
}
}];
第三方入会
1.在viewcontroller中
import <TangClientSDK/TangClientSDK.h>
2.调用joinConferenceWithThird加入会议。自行设置TangClientInterfaceObject中必传的属性name
,thirdConfId
,thirdConfName
,thirdHostId
,thirdConfId
即入会id,其他属性可以根据需要自行设置。
示例,可直接使用如下代码入会:
[[TangClientInterface sharedTangClientInterface] joinConferenceWithThird:tangClientInterface completion:^(BOOL success, NSError *error) {
}];
退会
-(void)exitConfrence;
释放SDK
-(void)releaseConfrence;
上传日志到server
-(void)uploadLogs:(NSString * )userId description:(NSString *)description completion:(void (^)(BOOL finished, NSError error))completion;
NSString * userId = @"test123";
NSString * description = @"日志上传test123";
[[TangClientInterface sharedTangClientInterface] uploadLogs: userId descri ption:description completion:^(**BOOL** finished, NSError *error) {
if(!finished){
NSLog(@"error : %@",error.localizedDescription);
}else{
NSLog(@"上传成功");
}
}];
共享屏幕配置
共享屏幕设置为会中重要组成部分,所有的共享屏幕操作依赖此设置
- 在Targets中点击加号,选择Broadcast Upload Extension 添加BroadcastExtension。工程中会自动生成BroadcastExtension文件夹和SampleHandler文件,SampleHandler的具体实详见Demo。
- 在Targets中证书设置 AppTarget 和 BroadcastExtension 同时支持 AppGroup
BoradcastExteionsion 注意设置iOS版本11.0,注意BulidSettings中Bitcode设置为NO。
- 在 Broadcast Upload Extension 的 SampleHandler 修改 kApplicationGroupIdentifier(设置自己的 App Group) 的值,详见demo中的SampleHandler
[[DesktopExtProvider alloc] initWithApplicationGroupIdentifier:kApplicationGroupIdentifier sampleHandler:self andEndErrMsg:nil];
- 在调用 -(void)joinConfrenceWithReq:(TangClientInterfaceObject) req completion:(void (^)(BOOL success, NSError error))completion 之前设置 APPGroup
[[TangClientInterface sharedTangClientInterface] setApplicationGroupIdentifier:@"group.com.gnet.betaCloud.sjtest"];//自己的APPGroup
[[TangClientInterface sharedTangClientInterface] setBroadcastExtensionBundleIdentifier:@"com.quanshi.tangclientSDK.demo.BroadcastExtension"]; //自己的BroadcastExtension的BundleIdentifier
注意事项
- 共享屏幕必须要通过开发者证书创建APPGroup,个人AppleID(非开发者 账号)无法实现共享功能
- APPGroup 要设置正确,企业证书和开发者证书需要区分
- 目前只有iOS11 (包含)以上版本支持共享屏幕功能
- 详见SampleHandler代码
-(void)applicationWillTerminate:(UIApplication *)application {
[[TangClientInterface sharedTangClientInterface] releaseConfrence];
}
- 因为用到ReplayKit框架最低版本 9.0 所以App 必须iOS Target 最低版本 9.0
定制化功能
TangClientInterfaceObject类中参数,详情见:TangClientInterfaceObject
参数 | 描述 | 备注 |
---|---|---|
isShowInvite | true: (默认值)启用邀请参会人功能 false: 隐藏邀请参会人功能 | |
isShowChat | true: (默认值)启用聊天功能 false: 隐藏聊天功能 | |
isJumpJoin | true: (默认值)启用入会预览功能 false: 隐藏入会预览功能 | |
isShowAudio | true: (默认值)在入会预览时开启音频功能 false: 在入会预览时关闭共享音频功能 | |
isMuteMicrophoneWhenJoin | true: 在入会后自我静音 false: (默认值)在入会后不自我静音 | 说明:仅支持网络语音入会场景 |
isOpenLoudspeaker | true: (默认值)在入会后打开免提 false: 在入会后关闭免提 | 说明:仅支持网络语音入会场景 |
isShowVideo | true: 在入会预览时开启视频功能 false: 在入会预览时关闭共享视频功能(和管理中心存在优先级问题) | |
extraProperties | 自定义扩展会议信息,详情参考下文 | |
preferredVoiceType | 设置默认入会语音连接方式 |
//调用示例
TangClientInterfaceObject *sampleObj = [[TangClientInterfaceObject alloc]init];
sampleObj.name = @“用户名称”;
sampleObj.pcode = @“会议pcode”;
sampleObj.isShowVideo = YES;
sampleObj.isShowAudio = YES;
sampleObj.isMuteMicrophoneWhenJoin = YES;
sampleObj.isOpenLoudspeaker = YES;
TangClientConfiguration *tangClientConfig = [TangClientConfiguration defaultConfiguation];
NSMutableArray *properties = [NSMutableArray array];
for (int i = 0; i < 5; i ++) {
TCExtraItem *item = [TCExtraItem new];
if (i == 0) {
item.key = @"会议密码:";
item.value = @"0123466789";
item.type = TCExtraItemPcode;
}else if (i == 1) {
item.key = @"主持人:";
item.value = @"自定义主持人";
item.type = TCExtraItemHost;
} else {
item.key = [NSString stringWithFormat:@"%@-%d:",@"链接",i+1];
item.value = [NSString stringWithFormat:@"%@-%d",@"www.quanshi.com",i+1];
item.type = TCExtraItemLink;
}
item.visible = YES;
[properties addObject:item];
}
tangClientConfig.extraProperties = [properties copy];
[[TangClientInterface sharedTangClientInterface] setTangClientConfig:tangClientConfig];
[[TangClientInterface sharedTangClientInterface] joinConfrenceWithReq:sampleObj completion:^(BOOL finished, NSError *error) {
}];
投屏功能
支持版本
Framework 最低支持版本 iOS 11.0
集成方法
- 在 iOS 工程中引入 TangClientSDK.Framework,AudioEngineCore.framework,AVTangModule.framework,FlowCtrl.framework,GNetTangSDK.framework,qsnd.framework,TwirlingCapture.framework 和 CastSDK.Framework
- 在BroadCast Target 中引入 GNetTangSDKIOSDesktop.framework
使用方法
- LoginManager 登录
- 连接硬件盒子
- 发起投屏
开发文档
LoginManager
初始化
userId、token来源: 1.账号密码登录返回 2.调用OpenApi获取(SDK集成方式)
初始化 SDK 需要传入 userId 和 token 这两个参数。
delegate 可以通过单独赋值或者初始化方法传入。用于接收登录成功,失败,登录状态以及连接状态的回调。
初始化相关方法:
/// 初始化
/// - Parameters:
/// - userId: userId
/// - token: token
- (nullable NSError *)initializationAddressWithUserId:(NSString *)userId token:(NSString *)token;
/// 初始化
/// - Parameters:
/// - userId: userId
/// - token: token
/// - delegate: LoginDelegate
- (nullable NSError *)initializationAddressWithUserId:(NSString *)userId token:(NSString *)token delegate:(id<LoginDelegate>)delegate;
delegate相关方法:
/// 登录成功
- (void)onLoginResult:(BOOL)success error:(nullable NSError *)error;
/// 退出登录
- (void)onLoginoutResult:(BOOL)success error:(nullable NSError *)error;
typedef NS_ENUM(NSUInteger, QSLoginStatus) {
QSLoginStatus_Unknown, // 未知
QSLoginStatus_Processing, // 登录中
QSLoginStatus_Success, // 登录成功
QSLoginStatus_Fail, // 登录失败
};
/// 登录状态变更回调
/// - Parameters:
/// - status: 登录状态
/// - error: error 信息
- (void)loginStatus:(QSLoginStatus)status error:(NSError *)error;
typedef NS_ENUM(NSUInteger, QSConnectionStatus) {
QSConnectionStatus_NotConnect, // 未连接
QSConnectionStatus_Connecting, // 连接中
QSConnectionStatus_Connect, // 已连接
QSConnectionStatus_Disconnect // 断开连接
};
/// 连接状态变更回调
/// - Parameter status: 连接状态
- (void)onConnectionStatusDidChange:(QSConnectionStatus)status;
身份认证
认证(默认type类型)
/// 登录
/// cleanType 默认为 QSLoginCleanType_AllowMultipleDevicesOnSamePlatform
- (void)auth;
认证(自定义 type 类型)
typedef NS_ENUM(NSUInteger, QSLoginCleanType) {
QSLoginCleanType_AllowMultipleDevicesOnSamePlatform = 0, // 允许同平台多设备登录
QSLoginCleanType_NotAllowMultipleDevicesOnSamePlatform, // 不允许同平台多设备登录, 如果检测到同平台有设备登录会抛出 error code
QSLoginCleanType_ForceLogin, // 强制登录,会直接提出同平台登录的其他设备
};
/// 登录
/// - Parameter type: cleanType
- (void)authWithCleanType:(QSLoginCleanType)type;
退出身份认证
/// 退出登录
- (void)loginout;
投屏
使用默认 UI
隐藏导航栏参数
showNavigationBarWhenViewControllerDismiss 离开以下 ViewController 需要显示导航栏传 NO,需要隐藏导航栏传 YES
启动扫描投屏码界面
二维码扫描需要使用摄像头,使用该 UI 时请确认在 info.plist 中增加了摄像头权限
<key>NSCameraUsageDescription</key> <string>需要访问你的相机来扫描二维码</string>
使用 GNETScanQRCodeViewController 类进行初始化
启动输入投屏码界面
使用 GNETInputCodeViewController 类进行初始化
自定义 UI
使用流程
- (必须) 设置屏幕分享 extension bundleId 和 groupId
- 连接盒子
- 连接盒子成功 -> 发起投屏
- 连接盒子失败,查看错误信息
- 发起投屏
- 投屏成功
- 投屏失败,查看错误信息
设置屏幕分享 extension bundleId 和 groupId
/// 设置 屏幕分享 extension bundleId 和 groupId
/// - Parameters:
/// - extensionBundleId: share extension bundleId
/// - groupId: groupId
- (void)setupShareExtensionBundleId:(NSString *)extensionBundleId groupId:(NSString *)groupId;
连接盒子
@protocol CastConnectDelegate <NSObject>
/// 连接盒子成功的回调
- (void)onSuccessConnectToBox;
/// 连接盒子失败的回调
/// - Parameter error: 错误信息
- (void)onFailConnectToBox:(NSError *)error;
@end
/// 盒子连接状态回调
@property (nonatomic, weak) id<CastConnectDelegate> connectDelegate;
/// 通过投屏码连接盒子
/// - Parameters:
/// - code: 投屏码
/// - timeout: 连接超时时间 (默认15s,值范围5s-30s)
- (void)connectToBoxWithCode:(NSString *)code timeout:(NSInteger)timeout;
发起投屏
@protocol CastingDelegate <NSObject>
/// 投屏成功的回调
- (void)onSuccessCasting;
/// 投屏失败的回调
/// - Parameter error: 错误信息
- (void)onFailedCasting:(NSError *)error;
/// 投屏状态更新的回调
/// - Parameter status: 投屏状态
- (void)onCastingStatusDidChange:(QSCastingStatus)status;
@end
/// 投屏回调
@property (nonatomic, weak) id<CastingDelegate> castingDelegate;
/// 发起投屏
- (void)startCasting;
结束投屏
@protocol CastingDelegate <NSObject>
/// 结束投屏成功的回调
- (void)onSuccessStopCasting;
/// 结束投屏失败的回调
/// - Parameter error: 错误信息
- (void)onFailedStopCasting:(NSError *)error;
@end
/// 投屏回调
@property (nonatomic, weak) id<CastingDelegate> castingDelegate;
/// 结束投屏
- (void)endCasting;
投屏错误码
错误码(FAILED.code) | 说明 |
---|---|
200 | 取消投屏 |
201 | 获取设备信息错误或发送消息异常 |
202 | 参数校验失败 |
203 | 获取会议信息失败 |
204 | 当前设备正在开会或投屏 |
205 | 等待投屏设备响应超时 |
206 | 加入失败 |
207 | 投屏失败 |
208 | 投屏码为空或不正确 |
209 | Group BundleID 为空(iOS 特有) |
210 | Share Extension BundleID 为空(iOS 特有) |
入会错误码
</table
错误码 |
含义 |
50101 |
服务器出了点小问题,稍等再试一下吧 |
50102 |
服务器出了点小问题,稍等再试一下吧 |
50103 |
服务器出了点小问题,稍等再试一下吧 |
50104 |
服务器出了点小问题,稍等再试一下吧 |
50105 |
服务器出了点小问题,稍等再试一下吧 |
50106 |
服务器出了点小问题,稍等再试一下吧 |
50107 |
服务器出了点小问题,稍等再试一下吧 |
50200 |
入会失败,请重试(50200) |
50209 |
没有找到相关会议 |
50310 |
获取ums帐号信息失败 |
50311 |
你没有主持人权限,请联系贵公司管理员或客服400-810-1919 |
50312 |
会议密码失效,请联系会议主持人 |
50313 |
你的主持人试用权限已到期,请联系客服400-810-1919 |
50314 |
会议密码失效,请联系会议主持人 |
52014 |
QSBOSS服务器连接失败 |
52015 |
QSBOSS创建帐号失败 |
52016 |
UMS服务器连接失败 |
52017 |
获取站点信息为空 |
52018 |
获取用户信息为空 |
52019 |
获取用户产品信息为空 |
52020 |
用户加入会议方式错误 |
50404 |
帐号所属站点被禁用 |
50406 |
帐号被禁用 |
50407 |
帐号已过期 |
50408 |
帐号已欠费 |
50794 |
获取参会人信息失败,无法识别的签到类型标识 |
50701 |
请输入正确的会议密码 //会议密码不正确,请重新输入 |
50703 |
你的帐号已欠费,请联系贵公司管理员或客服400-810-1919 |
50704 |
你没有主持人权限,请联系贵公司管理员或客服400-810-1919 |
50705 |
帐号已禁用,请联系贵公司管理员或客服400-810-1919 |
50707 |
入会失败,请重试(50707) |
50708 |
会议已过期 |
50709 |
会议已取消,请联系会议主持人 |
50710 |
50710 |
50711 |
请在会议开始前30分钟内入会 |
50712 |
主持人已在会中,不能重复入会 |
50713 |
你已在会中,不能重复入会 |
50714 |
会议已锁定,如需入会请联系主持人 |
50715 |
会中人数已满\n如想入会请通知贵公司管理员协助 |
50716 |
贵公司的会议服务已终止,请联系贵公司管理员或客服400-810-1919 |
50717 |
用户入会站点不正确 |
50718 |
帐号或密码错误 |
50719 |
验证码不正确 |
50720 |
会议已取消 |
50721 |
会议未开始 |
50722 |
会议解锁失败 |
50723 |
入会失败,请重试(50723) |
50724 |
Billingcode异常 |
50725 |
会议锁定失败 |
50727 |
临时会议id创建失败 |
50728 |
预约会议,会议表不存在 |
50729 |
仅注册用户可以入会 |
50730 |
仅本公司用户可以入会 |
50731 |
你使用了别人的主持人密码,为了会议安全,建议使用参会人身份入会 |
50732 |
你使用了自己的参会人密码,会影响你主持会议,建议使用主持人密码%@入会 |
50811 |
踢人失败 |
51002 |
服务器出了点小问题,稍等再试一下吧 |
51003 |
服务器出了点小问题,稍等再试一下吧 |
51004 |
服务器出了点小问题,稍等再试一下吧 |
51005 |
服务器出了点小问题,稍等再试一下吧 |
51006 |
服务器出了点小问题,稍等再试一下吧 |
51007 |
服务器出了点小问题,稍等再试一下吧 |
51008 |
服务器出了点小问题,稍等再试一下吧 |
51010 |
服务器出了点小问题,稍等再试一下吧 |
51011 |
服务器出了点小问题,稍等再试一下吧 |
51101 |
服务器出了点小问题,稍等再试一下吧 |
51102 |
服务器出了点小问题,稍等再试一下吧 |
51106 |
服务器出了点小问题,稍等再试一下吧 |
51109 |
服务器出了点小问题,稍等再试一下吧 |
51201 |
服务器出了点小问题,稍等再试一下吧 |
52229 |
云会议SDK需要更新才能入会,请联系贵公司管理员或全时客服400-810-1919. |
-1004 |
网络不可用,请检查你的网络设置 |
-1005 |
网络不可用,请检查你的网络设置 |
-1006 |
网络不可用,请检查你的网络设置 |
-1001 |
网络不可用,请检查你的网络设置 |
-999 |
取消请求 |
15000 |
入会失败 |
15001 |
入会失败(网络连接失败) |
15002 |
入会失败(网络认证失败) |
15003 |
入会失败(获取会议信息失败) |
15004 |
入会失败(获取用户信息失败) |
15005 |
不能访问麦克风,去“设置”中允许访问麦克风才能使用网络语音 |
15006 |
入会失败 |
15007 |
取消入会 |
15101 |
channelAuthError |
16000 |
json解析失败 |
17000 |
如需使用该功能,请联系贵公司管理员或全时客服400-810-1919. |
17001 |
入会过程中,不能重复入会 |
-1 |
服务器出了点小问题,稍等再试一下吧 |
-200 | 入会userid传入与url链接解析获取的userid不一致 |