会议管理

入会

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可以二选一
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入会

  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: 在入会预览时关闭共享音频功能  
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

    集成方法

    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不一致