在這里放出原文鏈接地址
Part 2.1: 創建 Intents Extension
Intents Extension
實際上就是在你 App 包里面的 一個 App Extension
, 所有和 SiriKit
進行的交互, 都是通過 Intents Extension
進行的. 盡管大多數時候, 與 SiriKit
進行交互操作都是通過 Intents Extension
進行的, 但是你的 App 仍然需要知道這些交互, 并且在某些時候, 你的 App 還需要對這些交互事件進行一些積極的響應.
當你需要添加一個 Intents Extension
到你的 App 時, 你需要做如下的幾個步驟:
- 讓你的 App 擁有使用
Siri
的能力. 查看: Configuring Your Xcode Project - 在你的工程中, 添加一個
Intents Extension
的 Target, 并且配置它的Info.plist
文件. 查看: Configuring Your Xcode Project - 在程序運行時, 向你的用戶請求使用
Siri
的權限. 查看: Requesting Siri Authorization In Your iOS App - 聲明一個用來操作
Intents
的對象. 查看: Resolving And Handling Intents - 為你的 App 定義任何你將會用到的自定義詞匯(Custom Vocabulary). 查看: Specifying Custom Vocabulary
注意:
你可以添加一個Intents UI Extension
到你的項目中, 來自定義Siri
或Maps
的顯示界面. 需要注意的是,Intents UI Extension
不是Intents Extension
的替代品, 所以當你添加了Intents UI Extension
時, 你還需要添加Intents Extension
. 了解更多內容, 請查看: Creating an Intents UI Extension
了解如何創建 App Extensions
, 請查看: App Extension Programming Guide
了解如何創建 App Extensions
, 請查看: App Extension Programming Guide
Part 2.2: 配置 Xcode 工程
配置 Xcode 工程需要幾個步驟, 除了在工程中添加一個 Intents Extension
的 Target 以外, 你還需要對你的 App 做一些小小的修改.
為了使用 SiriKit
, 你需要讓你的 App 擁有使用 Siri
的能力. 這其實很簡單, 操作步驟就好像你讓 App 擁有 iCloud
、推送
、內購買
能力一樣. 這將會在你的工程中添加一個 entitlements
, 讓 App Store
知道你的 App 是支持 Siri
的.
讓你的 App 擁有使用 Siri
能力的幾個步驟:
- 在 Xcode 中打開你的工程.
- 在 Xcode 的設置中, 選擇你的 App Target.
- 選擇 Capabilities 這個標簽.
- 打開
Siri
對應的開關.
上一張圖, 這樣看的更清晰.
當你為工程添加了使用 Siri
的能力之后, 你就可以為你的工程創建一個 Intents Extension
的 Target 了. 添加這個 Target 后, 將會為你提供幾個構建 Intents Extension
時的基礎文件, 還會將它添加到你的 App Bundle 中.
添加一個 Intents Extension
需要如下幾步:
使用 Xcode 打開你的工程.
-
在頂部的菜單欄選擇 File > New > Target.
操作步驟圖例 -
在出現的對話框中選擇對應平臺的
Intents Extension
, 然后點擊Next
.
操作步驟圖例 為你的
Intents Extension
指定一個名字, 并且配置其他的一些選項. 注意: 如果你希望自定義一部分的Siri
的 UI, 那么你需要勾選Include UI Extension
這個選項.配置完之后, 點擊 Finish.
注意:
你也許將會在你的工程中添加不止一個Intents Extension
, 但是每一個Extension
都必須要支持不同的Intents
. 一般來說, 為了提供更好的性能 或 減少內存占用的時候, 我們才會創建許多Extension
.
在你的工程中添加了 Intents Extension
的 Target 之后, 配置 Xcode 為你提供的 Info.plist
文件來指定你的 App 都支持哪些 Intents
. SiriKit
使用這個 plist 文件來確定你的 App 都支持哪些 Intents
.
指定支持的 Intents
需要如下幾步:
-
在 Xcode 中, 選擇
Intents Extension
文件夾下的Info.plist
文件. 注意: 在我這個工程中, 則是SiriKitIntentsExtension
文件夾下的Info.plist
文件.
Info.plist 在 plist 文件中, 展開
NSExtension
和NSExtensionAttributes
就這兩個 key, 然后我們將會看到IntentsRestrictedWhileLocked
和IntentsSupported
這兩個 key.在
IntentsSupported
這個 key 中, 添加Extension
需要支持的Intent
的字符串. 字符串實際就是Intent
類的名稱.IntentsSupported
這個 key 是必須的, 你可以再這里支持所有的Intent
, 也可以是其中的一部分.在
IntentsRestrictedWhileLocked
這個 key 中, 你可以添加當屏幕處于鎖定狀態下的時候支持的Intent
.IntentsRestrictedWhileLocked
是一個可選的 key, 有些Intent
, 例如涉及到了交易的Intent
, 通常都需要用戶解鎖自己的設備. 你可以使用這個 key 來設置一些默認情況下不需要解鎖設備就能夠使用的Intent
.
當一個用戶語言表達的非常不清晰的時候, SiriKit
將會分析出很多的 Intent
, 此時 SiriKit
就將會使用你提供的 IntentsSupported
key 所對應的內容, 根據內容的順序來確定將哪一個 Intent
發送給你的 App. 在你組織 IntentsSupported
key 所對應的內容的時候, 你應該將和你 App 最相關的一條放在第一位. 當你支持不同領域的 Intent
并且 這些領域的語義又很接近的時候, 區分 Intent
的先后順序是非常有意義的. 例如: 你的 App 同時支持打電話和發信息的時候, 你也許希望發送信息的行為優先于打電話的行為.
有些Intent
需要一些額外的配置步驟. 例如: 當你在實現一個旅行預訂的 App 時, Maps
期待你可以提供一個 GeoJSON
文件來描述你服務的覆蓋范圍. 更多詳細的配置步驟, 請查看: Intents Domains
Part 2.3: 為你的 App 請求用戶許可
在你的 App 使用 SiriKit
之前, 必須要經過用戶的許可才行. 請求用戶的許可需要如下幾個步驟:
- 在你項目中的
Info.plist
文件中, 添加NSSiriUsageDescription
這個 key, 這個 key 對應的是一個字符串的值, 該字符串描述了在你的 App 中SiriKit
的應用場景. - 在項目中調用
INPreferences
的requestSiriAuthorization:
類方法.
當你的 App 第一次調用 requestSiriAuthorization:
方法時, 系統將會彈出一個提示框來詢問用戶是否授權你的 App 使用 SiriKit
, 這個提示框中包含了上文提到的 NSSiriUsageDescription
這個 key 所對應的值, 就是剛才我們在 info.plist
中配置的字符串. 此時用戶可以選擇接受, 同樣也可以選擇拒絕. 無論用戶選擇了哪一項, 他都可以去 Setting
中修改你 App 的授權狀態. 系統會將你 App 的授權狀態記錄下來, 所以在接下來再次調用 requestSiriAuthorization
方法時將不會再一次向用戶彈出授權的提示框.
Part 2.4: 測試你的 Extension
測試 Extension
的時候, 需要是用真機才行. Xcode 允許你直接在工程中運行 Extension
, 并且可以再真機運行的同時對其進行 Debug 操作.
在你的設備中運行 Extension
:
- 選擇
Intents Extension
的 scheme. (當你在工程中添加了一個Intents Extension
的 Target 之后, Xcode 會自動生成一個對應的 scheme) - 對你的 scheme 進行配置.
-
Command + R
運行. - Xcode 會彈出一個提示, 此時選擇
Siri
或Maps
來運行. Xcode 將會構建你的 App 和Extension
, 在你的設備中安裝并且運行它們.
當你第一次安裝 Extension
的時候, Siri
可能無法直接識別出你的 Extension
. 所以在你測試相關指令之前, 你可能需要耐心的等待幾分鐘. 同樣的, 如果你更新了你的 Info.plist
文件, 你可能也需要耐心的等幾分鐘讓 Siri
來識別你的修改.
Lemon龍說:
如果您在文章中看到了錯誤 或 誤導大家的地方, 請您幫我指出, 我會盡快更改
如果您有什么疑問或者不懂的地方, 請留言給我, 我會盡快回復您
如果您覺得本文對您有所幫助, 您的喜歡是對我最大的鼓勵
如果您有好的文章, 可以投稿給我, 讓更多的 iOS Developer 在簡書這個平臺能夠更快速的成長