[TOC]

## 第一步:獲取appid
appid是第三方應用集成訊飛開放平臺SDK的身份標識,SDK靜態庫和appid是綁定的,每款應用必須保持唯一,否則會出現10407錯誤碼。appid在開放平臺申請應用時可以獲得,下載SDK后可從SDK中sample文件夾的Demo工程里找到(例如: /sample/MSCDemo/MSCDemo/Definition.h 的APPID_VALUE)
## 第二步:工程配置
### 添加庫
將開發工具包中lib目錄下的iflyMSC.framework添加到工程中。同時請將Demo中依賴的其他庫也添加到工程中。 按下圖示例添加 SDK 所需要的 iOS系統庫:

|庫名稱 |添加范圍 |功能 |
| :---: | :---: | --- |
|iflyMSC.framework |必要 |訊飛開放平臺靜態庫。 |
| libz.tbd | 必要 |用于壓縮、加密算法。 |
| AVFoundation.framework |必要 |用于系統錄音和播放 。 |
|SystemConfiguration.framework |系統庫 | 用于系統設置。 |
| Foundation.framework | 必要 | 基本庫。 |
|CoreTelephoney.framework |必要 |用于電話相關操作。 |
|AudioToolbox.framework | 必要 |用于系統錄音和播放。 |
|UIKit.framework | 必要 | 用于界面顯示。 |
| CoreLocation.framework | 必要 | 用于定位。 |
|Contacts.framework |必要 |用于聯系人。 |
| AddressBook.framework |必要 | 用于聯系人。 |
| QuartzCore.framework |必要 |用于界面顯示。 |
| CoreGraphics.framework | 必要 |用于界面顯示。 |
|libc++.tbd | 離線識別,Aiui必要 | 用于支持C++。 |
|Libicucore.tbd | Aiui必要 | 系統正則庫。 |
**注意**:
1. 添加iflyMSC.framework時,請檢查工程BuildSetting中的framwork path的設置,如果出現找不到framework的情況,可以將path清空,在Xcode中刪除framework,然后重新添加。
2. iflyMSC.framework最低支持iOS 8.0。
3. 如果使用了離線識別,還需要增加libc++.tbd。
4. 如果使用aiui,需要添加libc++.tbd,libicucord.tbd。
### 設置Bitcode
在Xcode 7,8默認開啟了Bitcode,而Bitcode 需要工程依賴的所有類庫同時支持。MSC SDK暫時還不支持Bitcode,可以先臨時關閉。后續MSC SDK支持Bitcode 時,會在訊飛開放平臺上進行SDK版本更新,QQ支持群中同時會有相關提醒,請關注。關閉此設置,只需在Targets - Build Settings 中搜索Bitcode 即可,找到相應選項,設置為NO。

### 用戶隱私權限配置
iOS 10發布以來,蘋果為了用戶信息安全,加入隱私權限設置機制,讓用戶來選擇是否允許。
隱私權限配置可在info.plist 新增相關privacy字段,MSC SDK中需要用到的權限主要包括麥克風權限、聯系人權限和地理位置權限:
~~~
<key>NSMicrophoneUsageDescription</key>
<string></string>
<key>NSLocationUsageDescription</key>
<string></string>
<key>NSLocationAlwaysUsageDescription</key>
<string></string>
<key>NSContactsUsageDescription</key>
<string></string>
~~~
即在Info.plist 中增加下圖設置:

## 第三步:初始化
初始化示例:
~~~
//Appid是應用的身份信息,具有唯一性,初始化時必須要傳入Appid。
NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@", @"YourAppid"];
[IFlySpeechUtility createUtility:initString];
~~~
| 參數 | 說明 | 必填 |
| :---: | --- | :---: |
| appid |8位16進制數字字符串,應用的唯一標識,與下載的SDK一一對應。 |是 |
| usr | 開發者在云平臺上注冊的賬號。 |否 |
| pwd | 賬號對應的密碼,與賬號同時存在。 |否 |
**注意**:
初始化是一個異步過程,可放在App啟動時執行初始化,具體代碼可以參照Demo的MSCAppDelegate.m。
#### **AIUI初始化**
如果使用的是aiui的業務,那么需要執行aiui的初始化模塊。具體可以參照demo的AiuiService。
初始化的配置文件是aiui.cfg,請關注demo的具體內容。
注意:調用aiui初始化的代碼文件,請修改成.mm的形式。
~~~
//包含頭文件
#include "iflymsc/AIUI.h"
#include "iflymsc/AIUIConstant.h"
//aiui初始化,請aiui.cfg和meta_vad_16k.jet文件,需要從demo中獲取。
void AiuiInitialize()
{
//讀取配置參數
NSString *appPath = [[NSBundle mainBundle] resourcePath];
NSString *cfgFilePath = [[NSString alloc] initWithFormat:@"%@/aiui.cfg",appPath];
NSString *cfg = [NSString stringWithContentsOfFile:cfgFilePath encoding:NSUTF8StringEncoding error:nil];
//設置模型vad的資源路徑
NSString *vadFilePath = [[NSString alloc] initWithFormat:@"%@/meta_vad_16k.jet",appPath];
//將cfg里的vad_res_path字符串替換成模型vad的資源路徑
NSString *cfgString = [cfg stringByReplacingOccurrencesOfString:@"vad_res_path" withString:vadFilePath];
const char *cfgBuffer = [cfgString UTF8String];
m_angent = IAIUIAgent::createAgent(cfgBuffer, &m_listener);
if (NULL != m_angent)
{
IAIUIMessage * wakeupMsg = IAIUIMessage::create(AIUIConstant::CMD_WAKEUP);
m_angent->sendMessage(wakeupMsg);
wakeupMsg->destroy();
}
}
~~~
#### **添加AIUI結果解析文件**
解析aiui結果時需要在工程中添加**結果解析文件**,否則編譯會報錯。
文件在Demo中的位置:MSCDemo -> tools -> jsoncpp。
## 第四步:啟動服務
所有的服務皆遵循如下的流程,如下圖:

所有服務的API詳細說明可參見:http://mscdoc.xfyun.cn/ios/api/
AIUI的API詳細說明可參見:http://mscdoc.xfyun.cn/aiui/develop_manual.pdf