# 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 下载地址

安装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事件上报

  1. 先调用setContext接口设置上下文playload
  2. 调用sendCustomEventAndContext上传上下文和事件
  3. 若想从客户端获取上下文,可以从getContext获取 格式:
{  context:[
     "header": {
        "namespace": "Custom",
        "name": "Custom"
    },
    "payload": {
       ……自定义上下文
        }
    }]
   ,"event": {
        "header": {
            "namespace": "Custom",
            "name": "Custom",
            "messageId": "IVS自行维护"
        },
        "payload": {
            ……自定义事件上报
        }
    }
}

具体自定义指令,事件和上下文文档可查看后端自定义指令事件上下文文档

# 步骤

  1. 设置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);
  1. 设置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];
  1. 初始化服务和授权 调用Initialization接口进行初始化
1.授权通过setAuthorizationUrl:<授权url>
2.授权URL:组合 “url?user_code=userCode”
3.WebView访问授权URL弹出授权页面,输入验证信息,点击授权
4.URL返回close://success代表成功,close://failed代表失败
  1. 连接

初始化完毕后,使用connect接口进行连接

  1. 唤醒
唤醒方式两种: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上报的具体错误信息