会议管理

入会

joinConference

-(void)joinConferenceWithThird:(TangClientInterfaceObject*) req  completion:(void (^)(BOOL success, NSError *error))completion;

参数

参数 描述
req 进入SDK需要传递的参数,见下面的详细说明
completion 入会相关回调
参数 描述
pcode 入会码/入会链接

用户信息

参数 描述
name 入会的用户名称。name和email可以二选一
email 入会的用户邮箱。name和email可以二选一
userID 用户ID,默认空,如果传入则为全时用户的用户名
iconUrl 头像链接,默认空,显示首字母头像,如果传入则为全时用户的头像

PreferredVoiceType参数说明

参数 描述
TCPreferredVoiceType_NONE=0 默认值,VOIP(如果管理中心配置支持)
TCPreferredVoiceType_NoVoice=7 不选语音方式入会
TCPreferredVoiceType_PSTN=6 PSTN方式入会
TCPreferredVoiceType_VOIP=1 以VoIP方式入会

更多入会方式

全时云会议iOS目前支持3种入会方式

快速加入会议

Pcode入会

  1. 在viewcontroller中
import <TangClientSDK/TangClientSDK.h>
  1. 调用 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,thirdHostIdthirdConfId即入会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(@"上传成功");
   }
  }];

共享屏幕配置

共享屏幕设置为会中重要组成部分,所有的共享屏幕操作依赖此设置

  1. 在Targets中点击加号,选择Broadcast Upload Extension 添加BroadcastExtension。工程中会自动生成BroadcastExtension文件夹和SampleHandler文件,SampleHandler的具体实详见Demo。

  1. 在Targets中证书设置 AppTarget 和 BroadcastExtension 同时支持 AppGroup

BoradcastExteionsion 注意设置iOS版本11.0,注意BulidSettings中Bitcode设置为NO。

  1. 在 Broadcast Upload Extension 的 SampleHandler 修改 kApplicationGroupIdentifier(设置自己的 App Group) 的值,详见demo中的SampleHandler
[[DesktopExtProvider alloc] initWithApplicationGroupIdentifier:kApplicationGroupIdentifier sampleHandler:self andEndErrMsg:nil];
  1. 在调用 -(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

注意事项

  1. 共享屏幕必须要通过开发者证书创建APPGroup,个人AppleID(非开发者 账号)无法实现共享功能
  2. APPGroup 要设置正确,企业证书和开发者证书需要区分
  3. 目前只有iOS11 (包含)以上版本支持共享屏幕功能
  4. 详见SampleHandler代码
-(void)applicationWillTerminate:(UIApplication *)application {
   [[TangClientInterface sharedTangClientInterface] releaseConfrence];
}
  1. 因为用到ReplayKit框架最低版本 9.0 所以App 必须iOS Target 最低版本 9.0

定制化功能

TangClientInterfaceObject类中参数,详情见:TangClientInterfaceObject

参数 描述
isShowInvite true: (默认值)启用邀请参会人功能 false: 隐藏邀请参会人功能
isShowChat true: (默认值)启用聊天功能 false: 隐藏聊天功能
isJumpJoin true: (默认值)启用入会预览功能 false: 隐藏入会预览功能
isShowAudio true: (默认值)在入会预览时开启音频功能 false: 在入会预览时关闭共享音频功能
isShowVideo true: 在入会预览时开启视频功能 false: 在入会预览时关闭共享视频功能(和管理中心存在优先级问题)
extraInfoList 自定义扩展会议信息,详情参考下文
preferredVoiceType 设置默认入会语音连接方式

投屏功能

支持版本

Framework 最低支持版本 iOS 11.0

集成方法

  1. 在 iOS 工程中引入 TangClientSDK.Framework,AudioEngineCore.framework,AVTangModule.framework,FlowCtrl.framework,GNetTangSDK.framework,qsnd.framework,TwirlingCapture.frameworkCastSDK.Framework
  2. 在BroadCast Target 中引入 GNetTangSDKIOSDesktop.framework

使用方法

  1. LoginManager 登录
  2. 连接硬件盒子
  3. 发起投屏

开发文档

LoginManager

初始化

userId、token来源: 1.账号密码登录返回 2.调用OpenApi获取(SDK集成方式)

初始化 SDK 需要传入 userIdtoken 这两个参数。

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

使用流程

  1. (必须) 设置屏幕分享 extension bundleId 和 groupId
  2. 连接盒子
    1. 连接盒子成功 -> 发起投屏
    2. 连接盒子失败,查看错误信息
  3. 发起投屏
    1. 投屏成功
    2. 投屏失败,查看错误信息

设置屏幕分享 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不一致