====== iOS SDK开发指南 ====== 说明:本指南以iOS为开发平台的接入说明,方便有iOS研发基础的开发者快速了解整合云之讯通讯服务接口。其中本部分指南只包含通讯服务的接入方式和基于平台提供的Demo为蓝本进行在线体验。如需开发出针对企业和开发者所需的个性化应用,仍然需要具备一定经验的iOS开发经验(例如界面控件的开发以及与应用服务器配合调试的基础) 本指南一共包含两块信息:
====== 第一节. 快速体验 ======
/*!
* @brief 实例化UCSTcpClient的一个单例对象
* @discussion 这个方法是生成UCSTcpClient的唯一方法,请不要使用init()等其他初始化方法,否知会出现未知的错误
* @return UCSTcpClient类型的单例对象
*/
+ (instancetype)sharedTcpClientManager;
如果需要监听TCP连接状态,则必须要设置TCP的代理,TCP连接状态回调包括,TCP连接成功,连接失败,重连成功,重连失败,账号在其他地方登录被踢线等。
/*!
* @brief 设置代理.
* @discussion 如果需要通过回调监控tcp连接状态之类的,就必须设置这个代理
* @param delegate tcp事件回调代理
*/
- (void)setTcpDelegate:(id ) delegate;
代理对象需要遵守的协议为:UCSTCPDelegateBase
初始化代码参考:
{
//获取到tcp sdk的UCSTcpClient对象,并传入代理实现的类实例
UCSTcpClient * ucsTcpClient = [UCSTcpClient sharedTcpClientManager];
[ucsTcpClient setTcpDelegate:self];
}
监听TCP连接状态回调代码参考:
- (void)didConnectionStatusChanged:(UCSConnectionStatus)connectionStatus error:(UCSError *)error
{
//TCP连接成功,连接失败,重连成功,重连失败,账号在其他地方登录被踢线等
}
=====5.2 Video SDK初始化=====
初始化SDK,该类提供拨打电话,接听以及拒接等方法。
#pragma mark - -------------------初始化函数-----------------------
//初始化实例
- (UCSService *)initWithDelegate:(id)delegate;
//设置代理方法
-(void)setDelegate:(id< UCSEventDelegate>)delegate;
云之讯Demo代码参考:
{
//注意:一定要设置代理
UCSService* ucsService = [[UCSService alloc] init];
[ucsService setDelegate:self];
// 另一种方式
UCSService* ucsService = [[UCSService alloc] initWithDelegate:self];
}
初始化成功回调(注:初始化成功后再调用tcp链接云平台)
:
- (void)onInitEngineSuccessful:(NSInteger)result{
//result为0的时候初始化成功,建议初始化成功后再调用tcp链接云平台
}
=====5.3 连接云平台=====
云之讯语音通话能力是建立在客户端和云平台连接成功的基础上,在连接断开的情况下,功能都不可用。云之讯语音通话能力是通过tcp长连接与云平台进行交互的,所以我们这里调用Tcp SDK中接口去连接云平台。请保证Video SDK的代理和Tcp SDK的代理已经设置正确。
如果是云平台的新账号体系则使用token的登陆方式,如果之前有使用过云之讯有关的能力,旧版本的账号体系,应该使用明文的登陆方式。
连接云平台,由UCSTcpClient的单例对象调用下面的方法
/*!
* @brief 连接云平台.
* @discussion (注意: 除非是为了兼容旧的IMSDK,否则请使用这个登陆方式)。
* @param token 加密的token
* @param success 成功回调
* @param failure 登陆失败回调,注意:登陆账号被踢线(在其他地方登录)也会回调这个block
*/
- (void)login_connect:(NSString *)token
success:(void (^)(NSString *userId))success
failure:(void (^)(UCSError *error))failure;
/*!
* @brief 连接云平台.
* @discussion (注意:这个登陆方式是为了兼容旧的IMSDK,后面可能会废弃)。使用这个接口的唯一场景是: 用户已经在现有的app中集成了我们旧的IMSDK,并且不希望更改成新的登陆方式(云之讯建议你更改成新的登陆方式)。其他场景下,请使用新的登陆方式。
* @param accountSid 账号sid
* @param accountToken 账号token
* @param clientNumber clientNumber
* @param clientPwd clientPwd
* @param success 成功回调
* @param failure 失败回调
*/
- (void)login_connect_old:(NSString *)accountSid
withAccountToken:(NSString *)accountToken
withClientNumber:(NSString *)clientNumber
withClientPwd:(NSString *)clientPwd
success:(void (^)(NSString *userId))success
注意:连接平台,我们提供了以上两个方法,但是我们建议你使用前一个方法。还有一点,每一次连接云平台前,我们都建议你先做一次断开操作。
你可以使用下面这个方法来执行断开操作:
/*!
* @brief 断开客户端和云平台的连接
* @param flag 是否关闭离线推送的bool值。YES关闭,NO不关闭。(单独使用Video sdk的时候设置为YES)
* @discussion 在客户端不需要继续与云平台保持连接的时候,调用这个方法断开连接。断开连接后,客户端将不会在收到与云平台的消息推送,也无法发送消息到云平台。
*
*/
- (void)login_uninitWithFlag:(BOOL)flag;
关于云之讯的重连机制:
当客户端和云平台的异常断开后,客户端处于Active的状态下,SDK会自动尝试重连云平台。
主动调用SDK提供的断开连接的方法不属于异常断开,SDK不会尝试重连。
云之讯Demo的参考代码:
{
//每次连接之前,先断开tcp连接。
[[UCSTcpClient sharedTcpClientManager] login_uninitWithFlag:0];
//使用token登陆。Token由用户的as服务器下发。这里不赘述。
[[UCSTcpClient sharedTcpClientManager] login_connect:im_token success:^(NSString *userId) {
// 连接云平台成功,业务自己处理
} failure:^(UCSError *error) {
// 连接云平台失败,业务自己处理
}];
}
======6. 集成VideoSDK基本功能======
下面以 语音通话 为案例,介绍如何在现有应用内添加通话服务。
=====6.1 创建语音通话连接=====
#pragma mark - -------------------呼叫控制函数-----------------------
/**
* 拨打电话
* @param callType 电话类型 0:语音电话 2:视频电话
* @param called userId号码
* @return
*/
- (void)dial:(NSInteger)callType andCalled:(NSString *)calledNumber andUserdata:(NSString *)callerData;
云之讯Demo代码参考:
{
//拨打语音通话(对方的云之讯账号,即userId)
[self.ucsCallService dial:callType andCalled:calledNumber andUserdata:callerData];
}
=====6.2 对方振铃回调=====
创建成功并连接被叫过程中代理函数(当发起呼叫后对方振铃时回调此函数)
- (void) onAlerting:(NSString*)callid;
=====6.3 对方接听时候回调=====
对方接听的代理函数(当接听成功后回调此函数)
-(void) onAnswer:(NSString*) callid;
=====6.4 呼叫失败回调=====
呼叫失败(被叫拒接,被叫忙等原因)的代理函数,可参考错误码查找失败原因
//呼叫失败,可根据reason查找错误原因 // TODO
- (void) onDialFailed:(NSString*)callid withReason:(UCSReason*)reason;
=====6.5 通话挂断回调=====
通话过程中,对方挂断的代理函数
//通话过程中,通话挂断,可以通过reason查看挂断原因 // TODO
- (void) onHangUp:(NSString*)callid withReason:(UCSReason*)reason;
=====6.6 通话呼入=====
//实现代理函数
-(void)onIncomingCall:(NSString*)callid withcalltype:(UCSCallTypeEnum) callType withcallerNumber:(NSString*)callerNumber {
//有免费电话呼入处理 //TODO
}
=====6.7 通话呼入=====
接听免费通话
- (void) answer: (NSString*)callid; {
//接听成功 //T0D0
}
=====6.8 挂断或者被叫拒绝通话=====
/**
* 挂断电话
* @param callid 电话id
*/
- (void) hangUp: (NSString*)callid;
======7. 编译运行及工程打包======
=====7.1 编译=====
在用Xcode打开工程后,看是需要用真机还是用模拟器运行应用,默认是模拟器下编译运行的,单击左上角的三角符号就可以进行应用运行, 如果是真机则需要你插上真机连接电脑,然后在最上面有单击"iPhone6.1SimuLator"(6.1为模拟器的版本)后可以看到显示你iPhone的机器 名字,并且选择后点击左上角的三角符号进行运行即可。如下图所示:
{{ :图片32.png |}}
=====7.2 查看工程日志=====
查看编译器日志。 选择xcode右上角区的的按钮
{{ :图片33.png |}}
=====7.3 工程打包=====
首先要从弹出的列表中选择第一项
{{ :图片34.png |}}
然后选择xcode的菜单Product→Archive项
{{ :图片35.png |}}
单击Export…按钮
{{ :图片36.png |}}
根据需要选择,测试请选择第二项,然后点击Next
{{ :图片37.png |}}
在下列窗口中请选择程序的签名证书
{{ :图片38.png |}}
点击Choose后,选择第一项,确认无误后点击Next
{{ :图片38.1.png |}}
点击Choose后,核对app的信息,确认无误后点击Next
{{ :图片39.png |}}
点击Next后结束打包,打包出来的.ipa文件,默认保存在桌面。
=====最后一步:关于错误码=====
[[video_sdk:iosv3returncode|错误码]]请参考平台文档说明。