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 接口

接口参数返回值说明
createIvsSDKClient创建 IVS SDK 客户端
InitializationIvsSDKClient初始化 IVS SDK 客户端
setDataBaseIvsSDKClient设置本地数据库
setAuthorizationUrlurl : 授权地址IvsSDKClient设置授权url
setIVSServiceurl : ivs服务urlIvsSDKClient设置ivs服务url
setLocallocal : 语言IvsSDKClient设置语言
setCA:ofType:caFileName : CA文件名
type : 文件类型
IvsSDKClient设置CA文件
setLog:level:streamLogPrefix : 日志前缀
level : log level
IvsSDKClient设置Log
setDeviceInfoclientId:平台申请的clientId
deviceId:设备唯一的ID
IvsSDKClient设置设备信息
connectvoid连接ivs服务
disconnectvoid断开ivs服务
reconnectvoid重新连接ivs服务
resetIVSvoid重设ivs服务
stopActivityvoid停止当前的操作
tapvoid按键说话
setContextplayload:{json}void设置上下文
getContextvoid返回上下文
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_logString指令={}日志返回日志信息
k_notification_authorizationjson{url:”授权请求连接地址”,user_code:””}授权请求
k_notification_authorization_stateStringUNINITIALIZED尚未获得授权
k_notification_authorization_statestringREFRESHED已授权/授权被刷新
k_notification_authorization_statestringEXPIRED授权过期
k_notification_authorization_statestringUNRECOVERABLE_ERROR授权失败
k_notification_connect_statestringUDISCONNECT(未连接)Ivs状态回调
k_notification_connect_statestringPENDING连接中
k_notification_connect_statestringIDLE空闲状态
k_notification_connect_statestringLISTENING唤醒录音状态
k_notification_connect_statestringTHINKING等待服务器返回
k_notification_connect_statestringSPERAKER正在播放音频
k_notification_connect_statestringFINISH完成
k_notification_directive_messagestring“Directive:Message:{}”son指令字符串
k_notification_audioInputProcess_errorstring""音频输入错误返回的信息
k_notification_contextstring{json}返回Json上下文字符串
k_notification_event_and_context_statestring事件上报和上下文消息回调
k_notification_event_and_context_statestringPENDING消息尚未被处理用于发送
k_notification_event_and_context_statestringSUCCESS消息已成功发送
k_notification_event_and_context_statestringSUCCESS_NO_CONTENT消息已成功发送,但HTTPReponse没有内容
k_notification_event_and_context_statestringNOT_CONNECTED发送失败,因为AVS没有连接
k_notification_event_and_context_statestringNOT_SYNCHRONIZED发送失败,因为AVS不同步
k_notification_event_and_context_statestringPROTOCOL_ERROR由于基础协议错误发送失败
k_notification_event_and_context_statestringSERVER_INTERNAL_ERROR由于发送代码500的服务器上的内部错误,发送失败
k_notification_event_and_context_statestringREFUSED由于服务器拒绝请求,发送失败
k_notification_event_and_context_statestringCANCELED发送失败,因为服务器在传输完成之前取消它
k_notification_event_and_context_statestringTHROTTLED由于服务器上的负载过多,发送失败
k_notification_event_and_context_statestringINVALID_AUTH提供给ACL的访问凭据无效
k_notification_event_and_context_statestringBAD_REQUEST由于用户发送的请求无效,发送失败
k_notification_event_and_context_statestringSERVER_OTHER_ERROR由于未知服务器错误发送失败
k_notification_event_and_context_msgstring""回调事件和context上报的具体错误信息
iFLYOS文档中心