开放平台

    云会议IOS客户端SDK 使用说明

    最后更新于:2019-07-01

    1. 集成云会议IOS客户端SDK

    SDK接口以IOS下标准的framework的形式提供,并提供接口定义C头文件。

    ####文件目录说明

    frameWork

    - TangClientSDK.framework

    - Dependency

    - Bugly.framework

    - tc_default.bundle

    - GNetTangSDK.framework

    参考信息文件配置:Sample

    >1,将framework文件拖入工程

    >2,target-> info ->custom ios target propertys 添加 App Transport Security Settings ->Allow Arbitrary Loads = YES

    >3,General ->Embedded Binaries 添加 两个framework

    >4,searchpath,Xcode会自动加入,如果没有自动加入,请参考sample

    最终集成如下图所示

    iOS-oneMeeting-Sdk-embeded

    2 初始化环境#

    SDK环境分为两种:线上环境,测试环境

    如果使用测试环境,在初始化的代码块添加
         [[TangClientInterface sharedTangClientInterface]initEnvironment:Environment_online];
    
    如果使用线上正式环境,则在初始化代码块添加
         [[TangClientInterface sharedTangClientInterface]initEnvironment:Environment_online];
    
    初始化语言

    SDK中的语言默认和IOS系统一致,目前支持中文和英文(翻译中),非中文系统都会加载英文。如果想设定语言,请调用下面API

    初始化为中文
        [[TangClientInterface sharedTangClientInterface]initLocaleLanguage:LocaleLanguage_Chinese];
    
    初始化为英文
        [[TangClientInterface sharedTangClientInterface]initLocaleLanguage:LocaleLanguage_English];
    

    API接口如下###

    ​ ​

    #import <Foundation/Foundation.h>
    #import "TangClientInterfaceObject.h"
    
    typedef NS_ENUM(NSUInteger, TCMeetingWindowStatus) {
        TCMeetingWindowStatus_Nil,
        TCMeetingWindowStatus_Mini,
        TCMeetingWindowStatus_Max
    };
    
    typedef NS_ENUM(NSUInteger, Environment) {
        Environment_online,
        Environment_beta = 1,
        Environment_offline = 3,
    };
    
    typedef NS_ENUM(NSUInteger, LocaleLanguage) {
        LocaleLanguage_Chinese=0,
        LocaleLanguage_English=1
    };
    typedef NS_ENUM(NSUInteger, ConferenceStatus) {
        ConferenceStatus_END=1, //结束会议
        ConferenceStatus_LEAVE=2, //离开会议
        ConferenceStatus_OFFLINE=3, //断线
        ConferenceStatus_ONLINE=4//重新连接上
    
    };
    
    @interface TangClientInterface : NSObject
    
    /**
     云会议窗口的状态
     
     */
    @property(readonly)TCMeetingWindowStatus windowStatus;
    
    /**
     sharedTangClientInterface
     
     */
    +(instancetype )sharedTangClientInterface;
    
    /**
     初始化云会议系统的环境,默认为:Online 如果需要切换到Beta环境,请调用此API  [initEnvironment Environment_beta]
     
     */
    -(void)initEnvironment:(Environment )environment;
    
    /**
     初始化云会议系统的语言,默认为:系统语言(中文,英文),如设定过语言则按照设定的语音来
     设定语言DEMO:[initLocaleLanguage LocaleLanguage_Chinese]
     
     */
    -(void)initLocaleLanguage:(LocaleLanguage)localeLanguage ;
    

    /**
     初始化云会议系统的LogPath
     如果未设置,默认值为全时定义的默认路径 /AppData/Documents/QuanshiFiles/log
     
     */
    -(void)initLogPath:(NSString*)logPath;
    
    /**
     * @brief 是否有GNetTang的会议实例创建过,主要用在 同时使用 TangClientSDK.framework 和GNetTangSDK.framework 会冲突,可以调用该接口,询问一下,当前是否有会议进行中。
    */
    -(BOOL) isConferenceCreated;
    

    /**
    加入会议 
     @TangClientInterfaceObject 详细请参见:TangClientInterfaceObject
     @completion
        success 是否成功
        succes为YES error的时候为空
        succes为NO 的时候 , error不为空 读取NSString *errorMsg =  error.userInfo[@"ERRORMESSAGE"];
     */
    -(void)joinConfrenceWithReq:(TangClientInterfaceObject*) req completion:(void (^)(BOOL success, NSError *error))completion;
    
    /**
     离开会议
    
     */
    -(void)exitConfrence;
    
    /**
     退出会议的回调通知,请在 joinConfrenceWithReq 前,调用此方法
     finished:标识会议是否结束
      @conFinishBolck  finished error
     
     */
    -(void)setConfrenceFinishBlock:(void (^)(BOOL finished, NSError *error))conFinishBolck;
    
    /**
     会议的回调通知,请在 joinConfrenceWithReq 前,调用此方法
      @conStatusBolck
     
     */
    -(void)setConfrenceStatusBlock:(void (^)(ConferenceStatus status, NSError *error))conStatusBolck;
    
    /**
     上传日志 到server
       @userId  用户ID
        @description  问题的描述
     */
    -(void)uploadLogs:(NSString * )userId description:(NSString *)description completion:(void (^)(BOOL finished, NSError *error))completion;
    /*
     平台sdk version
     */
    +(NSString *)gnetTangVersion;
    /**
     *  SDK 版本信息
     *
     *  @return SDK版本号
     */
    + (NSString *)sdkVersion;
    

    TangClientInterfaceObject 参数说明###

    	#import <Foundation/Foundation.h>
    
    	typedef NS_ENUM(NSUInteger, TCAllowUserChooseVoiceType) {
    	    TCAllowUserChooseVoiceType_Nil=0, //不设置,按照BOSS配置来
    	    TCAllowUserChooseVoiceType_PSTN_VOIP=7, //电话+VOIP
    	    TCAllowUserChooseVoiceType_CallIn_VOIP=3, //电话主动呼入+VOIP
    	    TCAllowUserChooseVoiceType_PSTN=6, //仅电话
    	    TCAllowUserChooseVoiceType_VOIP=1, //仅VOIP
    	    TCAllowUserChooseVoiceType_CallIn=2, //仅主动呼入
    	};
    	
    	typedef NS_ENUM(NSUInteger, TCPreferredVoiceType) {
    	    TCPreferredVoiceType_NONE=0, //不设置,根据 AllowUserChooseVoiceType 来决定是下面哪种方式
    	    TCPreferredVoiceType_NoVoice=7, //不选语音入会
    	    TCPreferredVoiceType_PSTN=6, //PSTN入会
    	    TCPreferredVoiceType_VOIP=1, //VOIP入会
    	};
    

    	/**
    	 云会议邀请接口的人员定义
    	 
    	 */
    	@interface TCInvitePhone : NSObject
    	@property (nonatomic, copy) NSString *name;
    	@property (nonatomic, copy) NSString *phoneNumber;
    	@property (nonatomic, copy) NSString *userId;
    	@end
    	
    	@interface TCHadInviteList : NSObject
    	@property (nonatomic, assign) NSInteger totalCount;
    	@property (nonatomic, assign) NSInteger hadCount;
    	@property (nonatomic, strong) NSArray<TCInvitePhone*>*attendeeList
        @property (nonatomic, copy) NSString *pcode; //(参会人pcode)
        @property (nonatomic, copy) NSString *conferenceId;//(会议ID)
        @property (nonatomic, copy) NSString *tempConferenceId;//(临时会议ID)
    	@end
    	/**
    	 云会议邀请接口
    	 
    	 */
    	@protocol TangClientInterfaceInviteDelegate<NSObject>
    	
    	@required
    	/*
    	 *会中点击邀请,调用的接口
    	 */
    	-(NSInteger)inviteWithAttendeeList:(TCHadInviteList*)hadInviteList completion:(void (^)(BOOL success, NSError *error,NSArray<TCInvitePhone*>*phoneList))completion;
    	
    	/*
    	 *会中参会人变化
    	 */
    	-(void)onHadAttendCountChanged:(NSInteger)count;
    	
    	@end
    	
    	@interface TangClientInterfaceObject : NSObject
    

    	/**
    	 name 参会者姓名   必填. 值可以为:邮箱|用户名
    	 邮箱:值为邮箱时后台会根据邮箱匹配出在全时用户系统中对应的用户姓名作为入会后参会者姓名
    	
    	用户名:该名称作为入会后参会者姓名
    	 */
    	@property(nonatomic,strong) NSString *name;
    	
    	/**
    	 email :可为空。
    	 
    	 */
    	@property(nonatomic,strong) NSString *email;
    	
    	/**
    	 pcode 入会密码  必填 。值可以为参会人密码 |主持人密码
    	*/
    	@property(nonatomic,strong) NSString *pcode;
    	/**
    	 userId 参会人全时系统中的UserID  可为空。如果传入userId 后台会根据UserId去匹配全时用户系统中用户,参会人姓名以全时系统中用户名为准
    	 
    	 */
    	@property(nonatomic,strong) NSString *userId;
    	/**
    	 iconUrl 入会头像 可为空,为空使用该用户自己设定的头像
    	 
    	 */
    	@property(nonatomic,strong) NSString *iconUrl;
    	/**
    	 conferenceId 会议的ID,可为空 ,如果该会议是预约会议必须要传入
    	 
    	 */
    	@property(nonatomic,strong) NSString *conferenceId;
    

    	/**
    	 from 来源:可为空。
    	 
    	 */
    	@property(nonatomic,strong) NSString *from;
    	@property(nonatomic,strong) NSString *ucDomain;
    	
    	/**
    	 isShowInvite 控制是否显示 邀请参会人.
    	 
    	 */
    	@property(nonatomic,assign) BOOL isShowInvite;
    

    	/**
    	 isShowChat :控制是否显示聊天
    	 
    	 */
    	@property(nonatomic,assign) BOOL isShowChat;
    	
    	/**
    	 isShowCallSelf 控制显示自我外呼
    	 此API废弃,请使用 allowUserChooseVoiceType,设置 为TCAllowUserChooseVoiceType_CallIn_VOIP || TCAllowUserChooseVoiceType_CallIn 可实现
    	 */
    	//@property(nonatomic,assign) BOOL isShowCallSelf;
    

    	/**
    	 allowUserChooseVoiceType 控制SDK语音的方式,默认为     AllowUserChooseVoiceType_Nil=1,不设置,按照BOSS配置来
    	TCAllowUserChooseVoiceType:
    	    TCAllowUserChooseVoiceType_Nil, //不设置,按照BOSS配置来
    	    TCAllowUserChooseVoiceType_PSTN_VOIP, //电话+VOIP
    	    TCAllowUserChooseVoiceType_CallIn_VOIP, //电话主动呼入+VOIP
    	    TCAllowUserChooseVoiceType_PSTN, //仅电话
    	    TCAllowUserChooseVoiceType_VOIP, //仅VOIP
    	    TCAllowUserChooseVoiceType_CallIn, //仅主动呼入
    	 设置的allowUserChooseVoiceType值,必须是BOSS中配置的子集
    	    BOSS中配置的子集范围:
    	    TCAllowUserChooseVoiceType_PSTN_VOIP:电话+VOIP,电话主动呼入+VOIP,仅电话,仅VOIP,仅主动呼入
    	    TCAllowUserChooseVoiceType_CallIn_VOIP:电话主动呼入+VOIP,仅VOIP,仅主动呼入
    	    TCAllowUserChooseVoiceType_PSTN:仅电话,仅主动呼入
    	    TCAllowUserChooseVoiceType_VOIP:仅VOIP
    	    TCAllowUserChooseVoiceType_CallIn:仅主动呼入
    	 */
    	@property(nonatomic,assign) TCAllowUserChooseVoiceType allowUserChooseVoiceType;
    	
    	/*
    	 默认入会方式 取值范围:
    	 TCPreferredVoiceType_NONE=0, //不设置,根据 AllowUserChooseVoiceType 来决定是下面哪种方式
    	 TCPreferredVoiceType_NoVoice=7, //不选语音入会
    	 TCPreferredVoiceType_PSTN=6, //PSTN入会
    	 TCPreferredVoiceType_VOIP=1, //VOIP入会
    	 
    	 推荐配置为:TCJoinConferenceVoiceType_NONE,不设置
    	 
    	 */
    	@property(nonatomic,assign) TCPreferredVoiceType preferredVoiceType;
    	
    	/*
    	 默认入会方式 为: TCPreferredVoiceType_PSTN PSTN入会,拨打的手机码号可以直接传入
    	 
    	 */
    	@property(nonatomic,strong) NSString *pstnCallNumber;
    	
    	/**
    	 isShowNameInput 入会时如果发现Name,emial,userId都为空 或者 会中已有主持人的情况下,会弹出 输入参会人姓名 对话框,让用户重新姓名后再入会.
    	 
    	 */
    	@property(nonatomic,assign) BOOL isShowNameInput;
    	
    	/**
    	当前邀请的delegate实现对象,提供用户自定义实现邀请UI的,如果不设置,SDK默认为 弹出拨号邀请界面
    	*/
    	@property(nonatomic,assign) id<TangClientInterfaceInviteDelegate> currentInviteDelegate;
    	
    	/**
    	extName 用户传入微信,QQ 邀请中带入的ID,没有的话不传入或者设置nil
    	extType 用户传入微信,QQ 邀请中带入的类型,没有的话不传入或者设置nil
    	Key:extName,value:extName's value
    	 */
    	@property(nonatomic,strong) NSDictionary *extPrama;
    	@end
    

    3 加入会议#

    在初始化完成后,即可在需要加入会议的代码中调用入会的API。

    加入会议需要有参数 userId , username ,pCode

    调用方式:

    	TangClientInterfaceObject *sampleObj = [[TangClientInterfaceObject alloc]init];
    	sampleObj.name = "姓名";
    	sampleObj.pcode ="入会密码";
    	sampleObj.userId = "全时系统中的UserID"; //可以为空,建议传入
    	sampleObj.conferenceId="xxxxx"; //conferenceId 会议的ID,可为空 ,如果该会议是预约会议必须要传入
    	sampleObj.preferredVoiceType=TCPreferredVoiceType_NONE;  //建议设置为 NONE ,让SDK来弹出语音选择框,让用户选择语音方式入会
    
    	/**设置退会回调**/
    	[[TangClientInterface sharedTangClientInterface] setConfrenceFinishBlock:^(BOOL finished, NSError *error) {
    	   //TODO:: deal back
    	
    	}];
    
    	/**设置状态回调**/
    	[[TangClientInterface sharedTangClientInterface] setConfrenceStatusBlock:^(ConferenceStatus status, NSError *error) {
        	//TODO:: deal ConferenceStatus
       		 NSLog(@"setConfrenceStatusBlock ->%zi",status);
    
    	}];
    	/**加入会议**/
    	[[TangClientInterface sharedTangClientInterface] joinConfrenceWithReq:sampleObj completion:^(BOOL finished, NSError *error) {
    	    NSLog(@"error ->%@",error);
    	}];
    

    4 上传日志#

    上传日志接口,调用此接口会将全时SDK中记录的日志上传到云会议的服务器,并通知开发人员 上传日志需要有参数 userId , description

    调用方式:

    	/**上传日志**/
      	NSString* userId="全时系统中的UserID";
        NSString*  description=@"";
    
        [[TangClientInterface sharedTangClientInterface] uploadLogs: userId description:description completion:^(BOOL finished, NSError *error) {
           //TODO:: deal back
    
        }];
    
    

    5 退会接口#

    退会接口接口,调用此接口参会人(主持人)会离开会议。 上传日志需要有参数 userId , description

    调用方式:

    	/**退出会议**/ 
    
        [[TangClientInterface sharedTangClientInterface] exitConfrence];
    
    

    6 小球配置#

    在tc_default.bundle中config/appConfig.plist配置文件中,通过设置showMinimzeFucBtn:YES启用小球功能

    7 小球状态读取#

    读取windowStatus可以读取到会中是处于小球状态,还是最大化的状态

    	typedef NS_ENUM(NSUInteger, TCMeetingWindowStatus) { 
    		TCMeetingWindowStatus_Mini, //变为小球了
    		TCMeetingWindowStatus_Max 
    	}; 
    
    	/** 
    	云会议窗口的状态 
    
    	*/ 
    	@property(readonly)TCMeetingWindowStatus windowStatus; 
    	/**读取会中窗口状态**/
    	[[TangClientInterface sharedTangClientInterface] windowStatus];
    
    

    8 设置会议状态回调#

    调用方式:

    	/**设置状态回调**/
    	[[TangClientInterface sharedTangClientInterface] setConfrenceStatusBlock:^(ConferenceStatus status, NSError *error) {
        	//TODO:: deal ConferenceStatus
       		 NSLog(@"setConfrenceStatusBlock ->%zi",status);
    
    	}];
    

    9 设置退会接口回调#

    调用方式:

    	/**设置退会回调**/
    	[[TangClientInterface sharedTangClientInterface] setConfrenceFinishBlock:^(BOOL finished, NSError *error) {
    	   //TODO:: deal back
    	
    	}]; 
    

    10 是否有GNetTang会议实例存在#

    调用方式:

    	/**
     	* @brief 是否有GNetTang的会议实例创建过,主要用在 同时使用 TangClientSDK.framework 和	GNetTangSDK.framework 会冲突,可以调用该接口,询问一下,当前是否有会议进行中。
    	*/
    	-(BOOL) isConferenceCreated;; 
    	[[TangClientInterface sharedTangClientInterface] isConferenceCreated];
    
    

    12 初始化云会议系统的LogPath#

    调用方式:

    	/**
    	 初始化云会议系统的LogPath
    	 如果未设置,默认值为全时定义的默认路径 /AppData/Documents/QuanshiFiles/log
    	 
    	 */
    	-(void)initLogPath:(NSString*)logPath;
     
    	[TangClientInterface initLogPath:log的路径];
    
    

    13 读取版本号API#

    调用方式:

    	/*
    	 平台sdk version
    	 */
    	+(NSString *)gnetTangVersion;
    	/**
    	 *  SDK 版本信息
    	 *
    	 *  @return SDK版本号
    	 */
    	+ (NSString *)sdkVersion;
    
    

    14 自定义邀请UI#

    调用方式:

    	/*
    	1.实现 TangClientInterfaceInviteDelegate 接口
    	2.入会时,设置当前邀请自定义的代码 currentInviteDelegate 
    
    	TangClientInterfaceObject *sampleObj = [[TangClientInterfaceObject alloc]init];
    	sampleObj.currentInviteDelegate= [[TangClientInterfaceInviteDelegate alloc] init]; //此处代码替换为自定义实现的邀请代码
    
    具体实现可以参考DEMO实现
    
    	  */;
    

    入会错误码#

    错误码 含义
    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 服务器出了点小问题,稍等再试一下吧

    注意事项#

    1.云会议SDK类型都是TC开头的,请开发避免冲突

    2.App方向设置,配置target支持 UIInterfaceOrientationMaskAllButUpsideDown,如果不希望支持多方向,请在您的delegate文件中实现

    • (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
      return UIInterfaceOrientationMaskPortrait; }

    3.NSUserDefault中全时使用了 PhoneNumber,keyNetworkNoticeConfig 的Key,不要重复使用

    4.IOS的Platform SDK的兼容版本为9.0以上版本

    5.因为全时云会议在会中会可能需要使用到音频(麦克风,喇叭),视频(摄像头),请避免这些资源的竞争

    6.进入会议后,不要修改StateBar 颜色,显示隐藏状态。(小球状态下除外)

    7.进入会议后,不要修改会中window 的 NavgationBar

    8.调用会议接口,必须在主线程里面调用

    9.全时会中操作了 idleTimerDisabled,会中不自动锁定屏幕

    10.在会中时,集成方的App不要主动去弹出 UIAlertView,如果方向和声明的主方向不一致的话,会导致崩溃

    11.TanbClientInterfaceObject接口中,allowUserChooseVoiceType一定要是BOSS中配置的子集。

    12.目前TangClientSDK去除了对Bugly编译的连接,强烈建议第三方应用在自己App中集成Bugly,这样Crash后问题好跟踪。如何集成 参考TangClientSample 的DEMO 项目 或者 参考 Bugly官网。集成Bugly后可以使用我们提供的默认BuglyId(56e74d5b48),也可以使用自己的(请把QQ:4331420加入到自己的Bugly网站管理中)。

    13.在会中的时候,以及最大化的时候sdk会设置自己为keywindow,变小球最小化的时候会把key window还原,因此,请考虑到key window的变化而进行对keywindow的操作,以免发生以下错误案例 :

    最小化的时候执行[self performSelector:@selector(hideView) withObject:nil afterDelay:1]
    -(void)hideView{
    	[[UIApplication sharedApplication].keyWindow.subviews enumerateObjectsUsingBlock:^(__kindof 		UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
      	  if ([obj isEqual:self.aview]) {
       	     obj.hidden = YES;
      	  }
    	}];
    }
    

    如果一秒内手动最大化,则会导致self.aview不会隐藏,因为key window已经发生了变化

    14.对于入会joinConfrenceWithReq 的callback的返回值, 如果错误码返回 15007 (取消入会),建议第三方应用不要提示用户。 如果错误码返回 17001 (入会过程中,不能重复入会),建议:浮层提示用户,或者不提示 其他错误码正常提示。