iOS SDK集成
一、下载和导入SDK
从官网下载 全链路SDK并导入到您的工程中。
第一步:将下载的libddsios.a和include头文件导入到您的工程中
1)设置Header search paths 指向include头文件 TARGETS-->Build Settings-->Header Search Paths
2)设置library search paths 指向.a库 TARGETS-->Build Settings-->Library Search Paths
第二步:添加依赖库和编译器选项
1)使用cocoapod 导入使用的第三方库(或直接下载导入源码到工程中)。
# https://github.com/ZipArchive/ZipArchive
pod 'SSZipArchive', '~> 2.1.1'
# https://github.com/tonymillion/Reachability
pod 'Reachability', '~> 3.2'
注:如果预编译文件PrefixHeader.pch编译有问题,请将预加载的OC类加判断标识,如下:
#ifdef __OBJC__
#import <xxx/xxx.h>
#endif
2)TARGETS-->Build Phases-->Link Binary With Libraries--> + -->libc++.tbd libz.1.2.8.tbd
3)other linker flag中添加 -lc++ -ObjC $(inherited)。(运行模拟器 debug 需要额外添加 -pagezero_size 10000 -image_base 100000000 ,注意,只需要对模拟器添加参数,针对release不能添加,否则apple不会通过审核。)
4)设置Bitcode为No TARGETS-->Build Settings-->Enable Bitcode。
第三步:添加资源文件
添加dds.bundle与package资源包(将package.zip解压后放入工程并对应K_DUICORE_ZIP与K_CUSTOM_ZIP)。
第四步:设置访问录音机的权限
在info.plist文件中,设置麦克风权限、网络服务权限。
二、快速集成
2.1.参数与配置
2.1.1 基本配置项
SDK所需要用的资源,可通过下面的配置项传入语音库。
参数名 | 取值 | 说明 | 是否必须 | 默认值 |
---|---|---|---|---|
K_PRODUCT_ID | 产品ID字符串 | 产品ID | 必须 | N/A |
K_ALIAS_KEY | prod/test/(自定义分支) | 产品分支 | 必须 | N/A |
K_USER_ID | 用户ID字符串 | 用户ID(用户唯一标识,数字、字母任意组合) | 必须 | N/A |
K_DUICORE_ZIP | 文件名字符串 | 预置在工程目录下的DUI产品配置资源包名 | 必须 | N/A |
K_CUSTOM_ZIP | 文件名字符串 | 预置在工程目录下的DUI产品配置资源包名 | 必须 | N/A |
K_DEVICE_ID | 设备ID | 用于授权认证的原始设备ID。若不填,则SDK自己收集设备ID | 非必须 | N/A |
2.1.2 参数与配置
授权分为API Key授权,以及Oauth授权(暂未启用)。
参数名 | 取值 | 说明 | 是否必须 | 默认值 |
---|---|---|---|---|
K_AUTH_TYPE | 字符串profile | 授权类型,profile是采用API Key授权,须要输入产品对应的API Key | 必须 | N/A |
K_API_KEY | 产品的API Key字符串 | 创建产品时,获取的API Key | 必须 | N/A |
K_PRODUCT_KEY | 产品Product Key | 用于设备注册请求签名,来源:DUI控制台-产品接入-授权管理 | 必须 | N/A |
K_PRODUCT_SECRET | 产品Product Secret | 用于设备注册请求签名,来源:DUI控制台-产品接入-授权管理 | 必须 | N/A |
2.2 处理授权
在SDK初始化时,可以设置DDSManagerDelegate 来监听授权的情况。
SDK初始化完毕后,您可以使用 onAuthSuccess 来判断当前是否授权成功。SDK初始化完毕后,SDK会默认调用startAuth方法做一次授权。
授权操作需要连接到互联网,若因网络原因导致的授权失败,待网络恢复后,可重新调用授权接口进行授权。
授权过程中可能会有0-N次onAuthFailed的回调,直至onAuthSuccess为止。
Profile文件的错误码范围从 "070601“ – "070622",处理流程请参考对应的描述。(iOS 详细接口指南 3.错误码描述)
startAuth
//开启授权(SDK初始化完毕后,SDK会默认调用startAuth方法做一次授权)
[[DDSManager shareInstance] startAuth];
2.2.1 API Key授权
采用API Key授权,在SDK初始化时,直接将授权类型(profile)、API Key、以及产品ID传入SDK。在创建产品可获取产品ID,授权管理时获取API Key。
2.3 权限说明
SDK需要的权限有:
权限 | 用途 |
---|---|
Privacy - Microphone Usage Description | 授权访问麦克风,用于采集音频 |
App Transport Security Settings 下添加 Allow Arbitrary Loads类型Boolean,值设为 YES | 授权开启网络服务,用于访问DUI服务 |
2.4 Log开关
使用Log测试请先在程序入口处调用如下代码,打开Log开关。
Log开关在[manager startWithdelegate:self DDSConfig:paramDic]方法前设置,日志保存在Documents/SDKLog.log。
Log开关设置
// 设置是否在控制台输出sdk的log信息, 默认NO(不输出log)
[DDSManager setLogEnabled:YES];
// 设置是否将sdk的log信息写入文件, 默认NO(不写入)
[DDSManager setLogWriteToFile:YES];
2.5 SDK初始化
使用以下方法来初始化SDK:
//设置音频策略
- (void)setAudioConfig{
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
}
//初始化DDSManager
- (void)initDDSManager{
NSMutableDictionary *paramDic = [[NSMutableDictionary alloc] init];
[paramDic setObject:@"xxx" forKey:K_PRODUCT_ID];
[paramDic setObject:@"prod" forKey:K_ALIAS_KEY];
[paramDic setObject:@"usergroup" forKey:K_USER_ID];
[paramDic setObject:@"2f0d470ac76d319fcc4a1d777bf65e08.zip" forKey:K_DUICORE_ZIP];
[paramDic setObject:@"product.zip" forKey:K_CUSTOM_ZIP];
//API Key授权
[paramDic setObject:@"profile" forKey:K_AUTH_TYPE];
[paramDic setObject:@"xxx" forKey:K_API_KEY];
[paramDic setObject:@"xxx" forKey:K_PRODUCT_KEY];
[paramDic setObject:@"xxx" forKey:K_PRODUCT_SECRET];
DDSManager *manager = [DDSManager shareInstance];
[manager startWithdelegate:self DDSConfig:paramDic];
}
//完成回调
-(void)onInitComplete:(BOOL)isFull {
if(isFull){
NSLog(@"onInitComplete DUI init");
}
else{
NSLog(@"DUI init faied");
}
}
//授权回调
-(void)onAuthSuccess{
NSLog(@"onAuthSuccess is successed");
//使用H5
dispatch_async(dispatch_get_main_queue(), ^{
NSString *path = [[DDSManager shareInstance] getValidH5Path];
url = [[NSURL alloc] initWithString:path];
self.request = [[NSURLRequest alloc] initWithURL:url];
self.web.delegate = self;
self.web.allowsInlineMediaPlayback = YES;
self.web.mediaPlaybackRequiresUserAction = NO;
self.web loadRequest:self.request];
});
//开唤醒
[[DDSManager shareInstance] enableWakeup];
}
-(void)onAuthFailed:(int)what Error:(NSString*)error{
//授权失败,可以重新调用授权接口
[[DDSManager shareInstance] startAuth];
NSLog(@" onAuthFailed is failed");
}
2.6 释放重启SDK
使用以下方法来释放重启SDK:
/*!
断开连接,释放SDK
*/
[[DDSManager shareInstance] stop];
//监听SDK释放完成通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(stopComplete) name:@"stopComplete" object:nil];
注意:收到这个通知后才可以重启语音库