版本記錄
| 版本號(hào) | 時(shí)間 |
|---|---|
| V1.0 | 2018.09.11 |
前言
大家都知道隨著人工智能的發(fā)展,會(huì)掀起來另外一個(gè)工業(yè)革命,而語音識(shí)別就是人工智能的初始階段,但是每個(gè)公司做的都不一樣,涉及到一系列的語音的采集和算法實(shí)現(xiàn),蘋果的Siri就是業(yè)界語音識(shí)別的代表性的產(chǎn)品。接下來的幾篇我們就詳細(xì)解析一下SiriKit這個(gè)框架。感興趣的可以看下面幾篇文章。
1. SiriKit框架詳細(xì)解析(一)—— 基本概覽(一)
2. SiriKit框架詳細(xì)解析(二)—— 請(qǐng)求授權(quán)使用SiriKit和INPreferences類(一)
3. SiriKit框架詳細(xì)解析(三)—— 創(chuàng)建Intents App擴(kuò)展(一)
Structuring Your Code to Support App Extensions - 構(gòu)建代碼以支持App擴(kuò)展
將您的后端服務(wù)移至私有框架,以便您的應(yīng)用和應(yīng)用擴(kuò)展程序可以使用它們。
應(yīng)用擴(kuò)展程序是代表您的應(yīng)用,vending服務(wù)或在系統(tǒng)詢問時(shí)向系統(tǒng)提供信息的代理。 由于它們會(huì)擴(kuò)展您應(yīng)用的行為,因此應(yīng)用擴(kuò)展程序通常需要訪問您的應(yīng)用使用的相同后端服務(wù)和數(shù)據(jù)。
如果您的應(yīng)用和應(yīng)用擴(kuò)展程序共享服務(wù),請(qǐng)考慮按以下方式構(gòu)建代碼:
Implement your core services in a private shared framework - 在私有共享框架中實(shí)現(xiàn)您的核心服務(wù)。 私有共享框架允許您在一個(gè)代碼模塊中放置用于訪問服務(wù)的代碼,并使用來自多個(gè)目標(biāo)的代碼。 共享框架通過確保每個(gè)可執(zhí)行文件使用相同的代碼路徑來最小化兩個(gè)可執(zhí)行文件的大小并使測(cè)試更容易。
Use a shared container to store common resources - 使用共享容器來存儲(chǔ)公共資源。 將相關(guān)圖像和數(shù)據(jù)文件放入共享容器中,以便您的應(yīng)用和應(yīng)用擴(kuò)展程序可以訪問它們。 您可以在每個(gè)目標(biāo)的
Capabilities選項(xiàng)卡中啟用共享容器支持。
Dispatching Intents to Handler Objects - 將意圖調(diào)度到處理對(duì)象
為SiriKit提供一個(gè)能夠處理給定意圖的對(duì)象。
當(dāng)用戶使用Siri或Maps向您的應(yīng)用發(fā)出請(qǐng)求時(shí),SiriKit會(huì)加載您的Intents應(yīng)用擴(kuò)展并創(chuàng)建其INExtension子類的實(shí)例。 擴(kuò)展對(duì)象的工作是為SiriKit提供用于處理特定意圖的處理程序?qū)ο蟆?您可以從擴(kuò)展對(duì)象的handler(for:)方法中提供這些對(duì)象。
對(duì)于所有Intents應(yīng)用程序擴(kuò)展,handler(for:)方法的結(jié)構(gòu)是相同的,并且該方法必須為Intents應(yīng)用程序擴(kuò)展支持的所有意圖返回有效的新對(duì)象。 Listing 1顯示了支持消息和VoIP呼叫域中的意圖的方法版本。 在檢查提供的intent對(duì)象的類型之后,該方法創(chuàng)建并返回能夠處理該intent的對(duì)象。
// Listing 1
Providing handler objects to SiriKit
override func handler(for intent: INIntent) -> Any {
switch intent {
case is INSendMessageIntent,
is INSearchForMessagesIntent,
is INSetMessageAttributeIntent:
return MyMessageHandler()
case is INStartAudioCallIntent:
return MyAudioCallHandler()
case is INStartVideoCallIntent:
return MyVideoCallHandler()
default:
// The app extension should only be called for intents it knows about.
fatalError()
}
}
從處理程序返回的對(duì)象handler(for:)方法必須實(shí)現(xiàn)處理相應(yīng)意圖所需的特定協(xié)議。 每個(gè)intent對(duì)象都有一個(gè)關(guān)聯(lián)的協(xié)議,其名稱基于intent的名稱。 例如,在處理INStartAudioCallIntent對(duì)象時(shí),您提供了一個(gè)采用INStartAudioCallIntentHandling協(xié)議的對(duì)象。 該協(xié)議定義了您的對(duì)象必須實(shí)現(xiàn)的方法來解析任何意圖參數(shù),并讓SiriKit知道您如何處理意圖。
SiriKit通常在處理單個(gè)intent對(duì)象時(shí)創(chuàng)建處理程序?qū)ο蟮亩鄠€(gè)副本,并且在每個(gè)對(duì)象上只調(diào)用一個(gè)方法。 不要將緩存的狀態(tài)信息存儲(chǔ)在處理程序?qū)ο笾校驗(yàn)樵诤罄m(xù)方法調(diào)用期間不會(huì)出現(xiàn)該信息。 相反,應(yīng)該始終對(duì)每個(gè)方法中的任何所需數(shù)據(jù)發(fā)出新的請(qǐng)求。
后記
本篇主要講述了構(gòu)建代碼以支持App擴(kuò)展和將意圖調(diào)度到處理對(duì)象,感興趣的給個(gè)贊或者關(guān)注~~~
