Part2: 創建 Intents Extension

在這里放出原文鏈接地址

Part 2.1: 創建 Intents Extension

Intents Extension 實際上就是在你 App 包里面的 一個 App Extension , 所有和 SiriKit 進行的交互, 都是通過 Intents Extension 進行的. 盡管大多數時候, 與 SiriKit 進行交互操作都是通過 Intents Extension 進行的, 但是你的 App 仍然需要知道這些交互, 并且在某些時候, 你的 App 還需要對這些交互事件進行一些積極的響應.

當你需要添加一個 Intents Extension 到你的 App 時, 你需要做如下的幾個步驟:

  1. 讓你的 App 擁有使用 Siri 的能力. 查看: Configuring Your Xcode Project
  2. 在你的工程中, 添加一個 Intents Extension 的 Target, 并且配置它的 Info.plist 文件. 查看: Configuring Your Xcode Project
  3. 在程序運行時, 向你的用戶請求使用 Siri 的權限. 查看: Requesting Siri Authorization In Your iOS App
  4. 聲明一個用來操作 Intents 的對象. 查看: Resolving And Handling Intents
  5. 為你的 App 定義任何你將會用到的自定義詞匯(Custom Vocabulary). 查看: Specifying Custom Vocabulary

注意:
你可以添加一個 Intents UI Extension 到你的項目中, 來自定義 SiriMaps 的顯示界面. 需要注意的是, 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 能力的幾個步驟:

  1. 在 Xcode 中打開你的工程.
  2. 在 Xcode 的設置中, 選擇你的 App Target.
  3. 選擇 Capabilities 這個標簽.
  4. 打開 Siri 對應的開關.

上一張圖, 這樣看的更清晰.

操作步驟圖例

當你為工程添加了使用 Siri 的能力之后, 你就可以為你的工程創建一個 Intents Extension 的 Target 了. 添加這個 Target 后, 將會為你提供幾個構建 Intents Extension 時的基礎文件, 還會將它添加到你的 App Bundle 中.

添加一個 Intents Extension 需要如下幾步:

  1. 使用 Xcode 打開你的工程.

  2. 在頂部的菜單欄選擇 File > New > Target.


    操作步驟圖例
  3. 在出現的對話框中選擇對應平臺的 Intents Extension, 然后點擊 Next.

    操作步驟圖例

  4. 為你的 Intents Extension 指定一個名字, 并且配置其他的一些選項. 注意: 如果你希望自定義一部分的 Siri 的 UI, 那么你需要勾選 Include UI Extension 這個選項.

  5. 配置完之后, 點擊 Finish.

注意:
你也許將會在你的工程中添加不止一個 Intents Extension , 但是每一個 Extension 都必須要支持不同的 Intents. 一般來說, 為了提供更好的性能 或 減少內存占用的時候, 我們才會創建許多 Extension.

在你的工程中添加了 Intents Extension 的 Target 之后, 配置 Xcode 為你提供的 Info.plist 文件來指定你的 App 都支持哪些 Intents. SiriKit 使用這個 plist 文件來確定你的 App 都支持哪些 Intents.

指定支持的 Intents 需要如下幾步:

  1. 在 Xcode 中, 選擇 Intents Extension 文件夾下的Info.plist 文件. 注意: 在我這個工程中, 則是 SiriKitIntentsExtension 文件夾下的 Info.plist 文件.

    Info.plist

  2. 在 plist 文件中, 展開 NSExtensionNSExtensionAttributes就這兩個 key, 然后我們將會看到 IntentsRestrictedWhileLockedIntentsSupported 這兩個 key.

  3. IntentsSupported 這個 key 中, 添加 Extension 需要支持的 Intent 的字符串. 字符串實際就是 Intent 類的名稱. IntentsSupported 這個 key 是必須的, 你可以再這里支持所有的 Intent, 也可以是其中的一部分.

  4. 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 之前, 必須要經過用戶的許可才行. 請求用戶的許可需要如下幾個步驟:

  1. 在你項目中的 Info.plist 文件中, 添加 NSSiriUsageDescription 這個 key, 這個 key 對應的是一個字符串的值, 該字符串描述了在你的 App 中 SiriKit 的應用場景.
  2. 在項目中調用 INPreferencesrequestSiriAuthorization: 類方法.

當你的 App 第一次調用 requestSiriAuthorization: 方法時, 系統將會彈出一個提示框來詢問用戶是否授權你的 App 使用 SiriKit, 這個提示框中包含了上文提到的 NSSiriUsageDescription 這個 key 所對應的值, 就是剛才我們在 info.plist 中配置的字符串. 此時用戶可以選擇接受, 同樣也可以選擇拒絕. 無論用戶選擇了哪一項, 他都可以去 Setting 中修改你 App 的授權狀態. 系統會將你 App 的授權狀態記錄下來, 所以在接下來再次調用 requestSiriAuthorization 方法時將不會再一次向用戶彈出授權的提示框.

Part 2.4: 測試你的 Extension

測試 Extension 的時候, 需要是用真機才行. Xcode 允許你直接在工程中運行 Extension, 并且可以再真機運行的同時對其進行 Debug 操作.

在你的設備中運行 Extension:

  1. 選擇 Intents Extension 的 scheme. (當你在工程中添加了一個 Intents Extension 的 Target 之后, Xcode 會自動生成一個對應的 scheme)
  2. 對你的 scheme 進行配置.
  3. Command + R 運行.
  4. Xcode 會彈出一個提示, 此時選擇 SiriMaps 來運行. Xcode 將會構建你的 App 和 Extension, 在你的設備中安裝并且運行它們.

當你第一次安裝 Extension 的時候, Siri 可能無法直接識別出你的 Extension. 所以在你測試相關指令之前, 你可能需要耐心的等待幾分鐘. 同樣的, 如果你更新了你的 Info.plist 文件, 你可能也需要耐心的等幾分鐘讓 Siri 來識別你的修改.

Lemon龍說:

如果您在文章中看到了錯誤 或 誤導大家的地方, 請您幫我指出, 我會盡快更改

如果您有什么疑問或者不懂的地方, 請留言給我, 我會盡快回復您

如果您覺得本文對您有所幫助, 您的喜歡是對我最大的鼓勵

如果您有好的文章, 可以投稿給我, 讓更多的 iOS Developer 在簡書這個平臺能夠更快速的成長

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容