iOS 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上报的具体错误信息