中文帮助文档>SDK

iOS SDK开发指南

1. 简介

1.1 什么是轻码云iOS SDK?

轻码云平台iOS SDK 是基于armv7、armv7s、arm64 处理器的api,提供直拨、回拨、p2p通讯能力,您可以轻松为您的iOS app添加语音通话功能。
从v1.0.1版本开始,轻码云iOS SDK向开发者提供.framework形式的开发包,同时提供真机调试版和模拟器调试版,此方式更加简单。方便开发者使用。

1.2 适用对象

本SDK提供给那些具有一定iOS编程经验的读者使用。您在使用中遇到任何问题,都可以通过qq技术交流群(416331855)反馈给我们。
2. 开发者注册
开发者在使用SDK之前需要获得轻码云开发者资格,并获取ACCOUNT SID用来进行api调用点击立即注册.
另一个重要的参数是appId,在应用的开发阶段开发者可以使用我们提供的测试appId进行SDK测试.
详细内容请查看新手指引
3. SDK 文件介绍
QMYSDK.framework 真机模拟器开发包。
4. SDK开发环境配置

4.1 P2P语音支持

由于iOS对app后台的限制,请在"Info.plist"中进行如下配置,否则影响SDK的使用。
<key>UIBackgroundModes</key>
<array>
    <string>voip</string>
    <string>audio</string>
</array>

权限相关

在iOS10中,由于权限限制,请在"Info.plist"中添加如下配置,否则在使用音频,视频,和通讯录的时候会崩溃。 <key>NSCameraUsageDescription</key> <string>需要使用你的相机</string> <key>NSContactsUsageDescription</key> <string>需要访问你的系统通讯录</string> <key>NSMicrophoneUsageDescription</key> <string>需要访问你的麦克风</string> <key>UIBackgroundModes</key>

网络相关

Xcode7之后,ATS禁止HTTP的明文传输,网络请求会报错 : Application Transport Security has blocked a cleartext HTTP (http://) resource load

since it is insecure. Temporary exceptions can be configured via your app's Info.plist file. 可以修改Info.plist文件,让它允许明文传输。 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>

使用编译报错

使用QMYSDK的时候,如果编译报错: "vtable for __cxxabiv1::__class_type_info", referenced from:" 需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm,或者创建的.m的文件,然后后缀改为.mm即可)

4.2 引入SDK

将所需的QMYSDK.framework拷贝到工程所在文件夹下。在 TARGETS -> Build Phases -> Link Binary With Libaries中点击+按钮,在弹出的窗口中点击Add Other按钮,选择QMYSDK.framework文件添加到工程中。
引入头文件
#import "QMYSDK.framework/Headers/QMYService.h"
5. api调用

5.1 连接轻码云平台

在调用sdk语音能力之前必须要先登录轻码云平台。
/**
*  客户端连接到云平台,明文登录方式
*  该接口首先会去获取SID地址,获取成功,会再去连接云平台服务器
   如果获取失败,则不会去连接云平台服务器
*  @param sid    开发者账户
*  @param appId  应用ID
*  @param number 账户(子账号)
*  @param pwd    密码(子账号密码)
*  @param clientPhone  账号电话号码
*  @param delegate  连接代理(登录云平台代理)
*  @param Block  SIP地址获取的回调(error为空则成功,不为空则失败)
*
*/
+ (void)connectAccountSid:(NSString *)sid appId:(NSString *)appId clientNumber:(NSString *)number clientPwd:(NSString *)pwd 

clientPhone:(NSString *)clientPhone delegate:(id)delegate Block:(void (^)(NSInteger respCode, NSError *error))block; /* ************* 实现代理方法 ************* */ @protocol QMYConnectionDelegate /** * 服务器连接成功 * */ - (void)onConnectionSuccessful; /** * 服务器连接失败 * @param reason * */ - (void)onConnectionFailed:(int)resaon;

5.2 落地呼叫

使用落地直拨接口可以让你的app具备 app -> 电话 的语音通讯能力,要求主叫方连接互联网且网络质量良好。
/**
 *  发起直拨呼叫
 *
 *  @param phone   被叫的手机号码或标准座机号码
 *  @param displayNum 被叫显号
 *  返回callid   callid 用于响应回调时与挂断时的唯一标识。
 */
+ (NSString *)dialPhone:(NSString *)phone displayNum:(NSString *)displayNum;
/**
 *  设置呼叫代理回调
 *
 *  @param delegate   通话状态回调代理
 */
+ (void)setCallStateDelegate:(id) delegate;
//呼叫代理
@protocol QMYCallStateDelegate 
@optional
/**
 *  直拨/p2p 状态回调
 *  @param state   直拨/p2p 状态
 *  @param reason  如果直拨/p2p 状态为挂断 挂断原因
 */
- (void)onCallStateChanged:(NSString *)callId callState:(CALL_STATE)state disconnectReason:(DISCONNECTED_REASON)reason;
/**
 *  回拨状态回调
 *  @param state   状态码
 *  @param reason   状态消息
 */
- (void)onCallbackState:(NSString *)state reason:(NSString *)reason;
@end
//直拨/p2p 状态
typedef NS_ENUM(NSUInteger, CALL_STATE)
{
    CALL_STATE_NULL,//错误
    CALL_STATE_CALLING,//正在呼叫
    CALL_STATE_CONFIRMED,//通话中
    CALL_STATE_CONNECTING,//正在连接...
    CALL_STATE_DISCONNECTED,//挂断
    CALL_STATE_EARLY,//响铃中
};
//发生错误时错误码
typedef NS_ENUM(NSUInteger, DISCONNECTED_REASON)
{
    DISCONNECTED_NULL,//错误
    DISCONNECTED_BadRequest,//错误请求
    DISCONNECTED_Unauthorized,//未授权
    DISCONNECTED_Forbidden,//禁止
    DISCONNECTED_NotFound,//用户不存在
    DISCONNECTED_RequestTimeout,//请求超时
    DISCONNECTED_TemporarilyUnavailable,//暂时无人接听
    DISCONNECTED_Busy,//忙
};

5.3 p2p呼叫

使用p2p呼叫接口可以让你的app具备 app -> app 的语音通讯能力,要求主叫方与被叫方连接轻码云平台且网络质量良好。
/**
 *  发起p2p呼叫
 *
 *  @param phone   被叫的client帐号
 *  @param displayNum 被叫显号
 *  返回callid  callid 用于响应回调时与挂断时的唯一标识。
 */
+ (NSString *)MakeP2pCall:(NSString *)phone displayNum:(NSString *)displayNum;
回调接口设置参照落地呼叫

5.4 双向回拨

使用p2p呼叫接口可以让你的app具备 发起 电话 -> 电话 通讯的能力,只在发起时消耗主叫方极少流量。
/**
 *  回拨呼叫。回拨的主被叫号码需要规整为国际标准号码。
 *
 *  @param phone   被叫的手机号码或标准座机号码
 *  @param fromNum 呼叫主叫所要显示的号码(没有可以不传)
 *  @param toNum   toNum 呼叫被叫所要显示的号码(没有可以不传)
 */
+ (void)callbackPhone:(NSString *)phone fromNum:(NSString *)fromNum toNum:(NSString *)toNum;
回拨回调状态码为@"00000"时表示成功,其它请参照状态码表
//呼叫代理
@protocol QMYCallStateDelegate 
@optional
/**
 *  直拨状态回调
 *  @param state   直拨状态
 *  @param reason  如果直拨状态为挂断 挂断原因
 */
 
- (void)onCallStateChanged:(NSString *)callId callState:(CALL_STATE)state disconnectReason:(DISCONNECTED_REASON)reason;
/**
 *  回拨状态回调
 *  @param state   状态码
 *  @param reason   状态消息
 */
- (void)onCallbackState:(NSString *)state reason:(NSString *)reason;
@end

5.5 p2p来电

要想接收P2P来电,必须要先登录轻码云平台,然后设置回调。
/**
 *  设置来电代理回调
 *
 *  @param delegate   来电回调代理
 */
+ (void)setInComingCallDelegate:(id) delegate;
/**
 *  设置呼叫代理回调
 *
 *  @param delegate   通话状态回调代理
 */
+ (void)setCallStateDelegate:(id) delegate;
//来电代理
@protocol QMYInComingCallDelegate 
/**
 *  收到来电
 *  @param callId
 *  @param callerPhone 来显
 */ @param callerName  对方client账号
- (void)onIncomingCallReceive:(NSString *)callId withCallerPhone:(NSString *)callerPhone withCallerName:(NSString *)callerName;
@end
/**
 *  接听来电
 *
 *  @return 是否接听成功
 */
+ (BOOL)acceptCall:(NSString *)callId;

5.6 挂断电话

/**
 *  挂断电话
 *  @return 是否挂断成功
 *
 */
+ (BOOL)handUp:(NSString *)callId;

5.7 发送DTMF

/**
 *  发送DTMF
 *
 *  @param DTMF_KEYCODE   dtmf键值
 *  @return 发送是否成功
 */
 + (BOOL)sendDTMF:(DTMF_KEYCODE)keyCode withCallId:(NSString *)callid;
//dtmf按键表
 typedef NS_ENUM(NSUInteger, DTMF_KEYCODE)
 {
 DTMF_KEYCODE_0 = 0,
 DTMF_KEYCODE_1,
 DTMF_KEYCODE_2,
 DTMF_KEYCODE_3,
 DTMF_KEYCODE_4,
 DTMF_KEYCODE_5,
 DTMF_KEYCODE_6,
 DTMF_KEYCODE_7,
 DTMF_KEYCODE_8,
 DTMF_KEYCODE_9,
 DTMF_KEYCODE_10,
 DTMF_KEYCODE_STAR,
 DTMF_KEYCODE_POUND,
 };

5.8 设置扬声器

/**
*  设置扬声器
*
*  @param on   NO:关闭 YES:打开
*  @return 设置是否成功
*/
+ (BOOL)setSpeakerOn:(BOOL)on;

5.9 设置静音

/**
 *  设置静音
 *
*  @param on   NO:关闭 YES:打开
*  @return 设置是否成功
*/
+ (BOOL)setMute:(BOOL)on withCallId:(NSString *)callid;

6.0 是否开启视频

/**
是否开启视频

@param useVideo YES打开本地摄像头
*/
+ (void)setUseVideo:(BOOL)use;

6.1 设置视频显示的View

/**
设置视频显示的View

@param remote 对方视频窗口
@param local 本地视频窗口
*/
+ (void)setCameraView:(UIView *)remote local:(UIView *)local;

6.2 更新拔号选项

/**
* 更新拔号选项(可以在音频通话中切换成视频通话或在视频通话中换成音频)
* @param callId:通话ID
* @param VideoCall.START_VIDEO:切换成视频通话     VideoCall.STOP_VIDEO:切换成音频通话
*/
+ (void)updateDialOptions:(NSString *)callid VideoCall:(VIDEOCALL)videoCall;

6.3 更新拔号选项

/**
关闭视频

*/
+ (void)closeCamera;

6.4 注销

/**
 *  客户端断开云平台连接
 */
+ (void)disconnect;
6 qmysdk ios demo
"
ios demo 使用了CocoaPods进行第三方库管理,所以请先安装CocoaPods,然后在工程目录下使用 pod update命令 安装依赖的第三方库。
官方网站 http://www.qingmayun.com
qq交流群 416331855