# iOS SDK
::: error 说明 IVS SDK 已停止迭代,新设备若需要接入,请使用EVS API进行接入。若需要SDK,请联系商务。 :::
介绍
iFLYOS 提供了开源的 iOS SDK 用于快速接入,封装了 IVS API 的交互实现。厂商既可以直接使用 iOS SDK,也可以在它的基础上做二次开发。
# 环境要求
- iOS9 及以上
- iPhone,iPad设备
# 快速上手
当前版本: v1.0.0
# 代码仓库
# 结构
- include
- curl
- openssl
- ivsSDKForIOS
- libivsWakeUpSDK.a
- libivsSDKForIOS.a
# 工程配置
# 引入资源
1.唤醒库
hotword1.irf
hotword2.irf
mlp.19.mid_nocmn.bin
state_filler_3000s_kladi_1179.txt
2.Gstreamer资源
cacert.pem
fonts.conf
gst_ios_init.h
gst_ios_init.m
Ubuntu-R.ttf
3.工程build Setting配置
File->new->创建PCH文件
build setting->Prefix Header-> <引入pch文件路径> , 添加
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
配置Build Setting -> Enable bitcode = NO
选择支持C++ language & Stander Library支持c++11
Header Search Path & Framework Search Path 添加GStreamer头文件和SDK路径
Build Setting -> Other linker Flags
-lstdc++
-lresolv
-ObjC
# 依赖库
libz.tbd
libsqlite3.tbd
libiconv.2.tbd
libc++.1.tbd
GStreamer.framework
GStreamer.framework 下载地址 (opens new window)
安装PKG后,找到目录:
/Library/Developer/GStreamer/iPhone.sdk/GStreamer.framework
注意
GStreamer.framework要放在link binary with libraries 的最下面
# 使用说明
# SDK 接口
接口 | 参数 | 返回值 | 说明 |
---|---|---|---|
create | IvsSDKClient | 创建 IVS SDK 客户端 | |
Initialization | IvsSDKClient | 初始化 IVS SDK 客户端 | |
setDataBase | IvsSDKClient | 设置本地数据库 | |
setAuthorizationUrl | url : 授权地址 | IvsSDKClient | 设置授权url |
setIVSService | url : ivs服务url | IvsSDKClient | 设置ivs服务url |
setLocal | local : 语言 | IvsSDKClient | 设置语言 |
setCA:ofType: | caFileName : CA文件名 type : 文件类型 | IvsSDKClient | 设置CA文件 |
setLog:level: | streamLogPrefix : 日志前缀 level : log level | IvsSDKClient | 设置Log |
setDeviceInfo | clientId:平台申请的clientId deviceId:设备唯一的ID | IvsSDKClient | 设置设备信息 |
connect | void | 连接ivs服务 | |
disconnect | void | 断开ivs服务 | |
reconnect | void | 重新连接ivs服务 | |
resetIVS | void | 重设ivs服务 | |
stopActivity | void | 停止当前的操作 | |
tap | void | 按键说话 | |
setContext | playload:{json} | void | 设置上下文 |
getContext | void | 返回上下文 | |
sendCustomEvent: dialogRequestIdString: playLoad:context: | eventName : 事件名,自定义事件名为"Custom" playLoad : playLoad字段,自定义事件数据(json格式) context : 上下文(json格式) dialogRequestIdString :一般不用设置 | void | 发送自定义事件 |
sendCustomEventAndContext: eventPlayLoad: | eventName : 事件名,自定义事件名为"Custom" eventPlayLoad : 事件playLoad字段,自定义事件数据(json格式) | void | 发送自定义事件&上下文 |
- 自定义指令
自定义下发的指令,具体内容格式参考:IVS消息格式
回调:k_Notification_Directive_Message
格式:
{
"directive": {
"header": {
"namespace": "Custom",
"name": "Custom",
"messageId": "ivs自行维护,不需要管",
"dialogRequestId": " ivs自行维护,不需要管"
},
"payload": {
……自定义指令下发
}
}
}
- 自定义事件
接口:(没有特殊事件,只需要填eventName和PlayLoad即可,自定义事件eventName一般情况都是填“Custom”) 格式:
{
"event": {
"header": {
"namespace": "Custom",
"name": "Custom",
"messageId": "IVS自行维护"
},
"payload": {
……自定义事件上报
}
}
}
- 自定义上下文 & 事件
调用: 自定义上下文依赖event事件上报
- 先调用setContext接口设置上下文playload
- 调用sendCustomEventAndContext上传上下文和事件
- 若想从客户端获取上下文,可以从getContext获取 格式:
{ context:[
"header": {
"namespace": "Custom",
"name": "Custom"
},
"payload": {
……自定义上下文
}
}]
,"event": {
"header": {
"namespace": "Custom",
"name": "Custom",
"messageId": "IVS自行维护"
},
"payload": {
……自定义事件上报
}
}
}
具体自定义指令,事件和上下文文档可查看后端自定义指令事件上下文文档
# 步骤
- 设置gstreamer , openSSL和curl并初始化
main.m中调用gst_ios_init();
函数AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
SSL_load_error_strings();
SSL_library_init();
curl_global_init(0L);
- 设置ivs配置和进行初始化(参考demo)
注意
setDataBase和Initialization要最后调用
example:
[[[[[[[[ivsSDKClient setLocal:@"zh-CN"]
setAuthorizationUrl:@"https://auth.iflyos.cn/oauth/ivs/"]
setDeviceInfo:clientId deviceId:deviceId]
setIVSService:@"https://ivs.iflyos.cn"]
setCA:@"cacert" ofType:@"pem"]
setLog:@"curl-log" level:@"DEBUG9"]
setDataBase]
Initialization];
- 初始化服务和授权 调用Initialization接口进行初始化
1.授权通过setAuthorizationUrl:<授权url>
2.授权URL:组合 “url?user_code=userCode”
3.WebView访问授权URL弹出授权页面,输入验证信息,点击授权
4.URL返回close://success代表成功,close://failed代表失败
- 连接
初始化完毕后,使用connect接口进行连接
- 唤醒
唤醒方式两种:Tap唤醒和语音唤醒
Tap唤醒:使用Tap接口
语音唤醒关键字:“嘿,小飞”/“来,小飞”
# 回调值说明
key | 返回值类型 | 返回值 | 说明 |
---|---|---|---|
k_notification_log | String | 指令={}日志 | 返回日志信息 |
k_notification_authorization | json | {url:”授权请求连接地址”,user_code:””} | 授权请求 |
k_notification_authorization_state | String | UNINITIALIZED | 尚未获得授权 |
k_notification_authorization_state | string | REFRESHED | 已授权/授权被刷新 |
k_notification_authorization_state | string | EXPIRED | 授权过期 |
k_notification_authorization_state | string | UNRECOVERABLE_ERROR | 授权失败 |
k_notification_connect_state | string | UDISCONNECT(未连接) | Ivs状态回调 |
k_notification_connect_state | string | PENDING | 连接中 |
k_notification_connect_state | string | IDLE | 空闲状态 |
k_notification_connect_state | string | LISTENING | 唤醒录音状态 |
k_notification_connect_state | string | THINKING | 等待服务器返回 |
k_notification_connect_state | string | SPERAKER | 正在播放音频 |
k_notification_connect_state | string | FINISH | 完成 |
k_notification_directive_message | string | “Directive:Message:{}” | son指令字符串 |
k_notification_audioInputProcess_error | string | "" | 音频输入错误返回的信息 |
k_notification_context | string | {json} | 返回Json上下文字符串 |
k_notification_event_and_context_state | string | 事件上报和上下文消息回调 | |
k_notification_event_and_context_state | string | PENDING | 消息尚未被处理用于发送 |
k_notification_event_and_context_state | string | SUCCESS | 消息已成功发送 |
k_notification_event_and_context_state | string | SUCCESS_NO_CONTENT | 消息已成功发送,但HTTPReponse没有内容 |
k_notification_event_and_context_state | string | NOT_CONNECTED | 发送失败,因为AVS没有连接 |
k_notification_event_and_context_state | string | NOT_SYNCHRONIZED | 发送失败,因为AVS不同步 |
k_notification_event_and_context_state | string | PROTOCOL_ERROR | 由于基础协议错误发送失败 |
k_notification_event_and_context_state | string | SERVER_INTERNAL_ERROR | 由于发送代码500的服务器上的内部错误,发送失败 |
k_notification_event_and_context_state | string | REFUSED | 由于服务器拒绝请求,发送失败 |
k_notification_event_and_context_state | string | CANCELED | 发送失败,因为服务器在传输完成之前取消它 |
k_notification_event_and_context_state | string | THROTTLED | 由于服务器上的负载过多,发送失败 |
k_notification_event_and_context_state | string | INVALID_AUTH | 提供给ACL的访问凭据无效 |
k_notification_event_and_context_state | string | BAD_REQUEST | 由于用户发送的请求无效,发送失败 |
k_notification_event_and_context_state | string | SERVER_OTHER_ERROR | 由于未知服务器错误发送失败 |
k_notification_event_and_context_msg | string | "" | 回调事件和context上报的具体错误信息 |