做者:AppCoda,原文連接,原文日期:2018-07-11 譯者:Hale;校對:liberalisman,numbbbbb,Yousanflics;定稿:Forelaxgit
在美國聖何塞舉辦的 2018 開發者大會上,蘋果公佈了 Siri Shortcuts,這是一個使人期待已久的功能,開發人員可以在本身的應用程序中擴展和加強 Siri 的功能。在這以前,SiriKit SDK 的功能很是有限。隨着 Siri Shortcuts 的出現,開發人員能夠擴展 Siri 的功能並經過構建自定義語音操做來喚起應用程序。github
Siri Shortcuts 的核心是自動化。Siri Shortcuts 是由前 WWDC 獎學金得到者開發的 iOS 自動化應用程序 Workflow 演變而來的。蘋果在2017年收購了 Workflow,但出乎意料的是,即使在收購以後,該應用依然獨立的在 App Store 上線。swift
Shortcuts 讓你能夠將應用程序的功能暴露給 Siri。api
Apple 全新的 Siri Shortcuts 大量借鑑了 Workflow。可是區分語音 Shortcuts 短句與 Shortcuts 應用自己仍是很重要的。Shortcuts 應用容許用戶基於語音短句建立常見的平常任務,Siri Shortcuts 使開發人員可以在本身的原生應用程序中擴展 Siri 的功能。app
在撰寫本文時,Shortcuts 應用程序 沒法在 iOS 12 Beta 2 Build 中進行測試。那麼,咱們將在本身構建的自定義應用程序中探索 Siri Shortcuts 的實用功能。框架
注意:本教程假定你基本熟悉 NSUserActivity API。若是你不熟悉,請參閱咱們關於此主題的 優秀教程。函數
在本教程中,咱們將探究如何在一個簡單的項目中利用 Siri Shortcuts,在用戶說出 「Say Hi」 之類的短語時啓動咱們的應用程序並展現出一個 UIAlertView。測試
此應用程序簡單概述瞭如何在一個大型項目中不增長複雜代碼的前提下集成 Siri Shortcuts。在本教程結束時,你應該紮實掌握 Siri Shortcuts 背後的用例和技術,並瞭解如何將它們與你的應用程序集成!網站
當咱們在建立任意新項目時,花一些時間來創建基本的項目結構是很重要的。首先咱們須要有 iOS 12,macOS Mojave 和 Xcode 10 的最新開發人員預覽版。若是你尚未安裝這些,你能夠從 開發者網站 下載安裝。ui
在 Xcode 建立一個名爲 SiriShortcuts 的應用程序。將組織 ID 設置爲 com.appcoda
,這些後期能夠按需修改。
以下所示,在項目的 Project Settings 中選擇 Capabilities,啓用 Siri。接下來咱們就能夠在應用程序中使用 Siri SDK,並將 .entitlements 文件添加到項目中。
啓用 Siri 後,Xcode 會將 .entitlements
文件添加到項目裏。而後將 Intents.framework
這個全新的框架加入到項目中。
最後,在 Info.plist
中添加 NSUserActivityTypes
。該項的值應該包含你的 Bundle ID 以及喚醒 Siri 的行爲 ,例如 「sayHi」。
要建立一個 Shortcut 應用,咱們首先配置 Shortcut,而後將 Shortcut 集成到項目中
如今咱們的項目已經完成了全部 Shortcut 的配置工做,是時候將 Shortcut 集成到項目中了。
根據 Apple 開發者文檔,
每次用戶在你的應用中執行操做時,你都應該進行一次 Shortcut 集成。例如,用戶可使用你的應用從餐廳訂購湯,請在用戶下訂單後爲支付操做進行 Shortcut 集成。若是用戶未在你的應用中執行操做,則不須要進行集成操做。
顯然,只有在提供有意義的用例時咱們才須要集成 Shortcut,從而加強應用程序的總體功能。
回到代碼中,首先咱們前往 ViewController.swift
文件。在 viewDidLoad
方法以後,建立一個名爲 setupIntents
的新方法。在此方法中,實現咱們的 Siri Shortcuts 代碼。
func setupIntents() {
let activity = NSUserActivity(activityType: "com.AppCoda.SiriSortcuts.sayHi") // 1
activity.title = "Say Hi" // 2
activity.userInfo = ["speech" : "hi"] // 3
activity.isEligibleForSearch = true // 4
activity.isEligibleForPrediction = true // 5
activity.persistentIdentifier = NSUserActivityPersistentIdentifier(rawValue: "com.AppCoda.SiriSortcuts.sayHi") // 6
view.userActivity = activity // 7
activity.becomeCurrent() // 8
}
複製代碼
讓咱們來看看這段代碼作了什麼。
第一行,咱們建立了 NSUserActivity 實例並將咱們在 Info.plist
文件中定義的標識符賦值給 activityType。
第二行,咱們定義了 Activity 的標題。(會應用在設置中心和 Spotlight 的搜索中。若是你對 NSUserActivity 以及 spotlight 搜索索引的工做方式不是很熟悉,我建議你閱讀咱們關於這個主題的其餘教程。)
第三行,咱們添加了一個 userInfo
字典。根據 Apple 的說法, userInfo 字典包含了在另外一臺設備上繼續活動所需的與應用程序相關的狀態信息。
下一步,咱們設置 .isEligibleForSearch
參數爲 true
而後在下一行啓用 isEligibleForPrediction
。這兩個屬性容許 iOS 在設備上爲咱們的 NSUserActivity 提供搜索和建議。
接下來,咱們將 persistentIdentifier
屬性設置爲 NSUserActivityPersistentIdentifier 的實例,此實例用與第一行相同的標識符進行構造。
最後,咱們將上面建立的 activity 實例賦值給視圖的 userActivity
屬性,並調用 becomeCurrent()
方法來激活咱們的 Activity。
咱們再建立另外一個名爲 sayHi()
的方法並粘貼如下代碼。此代碼建立一個 UIAlertController 以顯示消息。
public func sayHi() {
let alert = UIAlertController(title: "Hi There!", message: "Hey there! Glad to see you got this working!", preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
複製代碼
上述方法很簡單,主要用於說明 Siri Shortcuts 是如何工做的。另外須要注意這是一個 public 函數,由於咱們須要在視圖控制器的做用域以外使用它。
如今,你已經在 ViewController.swift
設置了基本功能,切換到 AppDelegate.swift
文件並添加 application(_:continueUserActivity:restorationHandler)
方法,以下所示。
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
let viewController = window?.rootViewController as! ViewController
viewController.sayHi()
return true
}
複製代碼
上述代碼將咱們新建立的 Activity 公開在應用委託方法中並容許 Siri 對此 Activity 進行操做喚起應用。
如今讓咱們試試看!導航到「設置」應用並選擇 Siri。你應該看到一個名爲 」Say Hi」 的新快捷方式。單擊 +
按鈕添加它,而後按照屏幕上的提示建立自定義語音短語以建立此快捷方式。
如今你能夠喚起 Siri 並說出你的短語,體驗 Shortcut!
正如你所見,在項目中使用 NSUserActivity 能夠很容易地實現 Siri Shortcuts 的強大功能。在本教程中,我建立了一個基礎的應用,一樣的你也能夠將這些技術應用到你本身的應用中。Siri Shortcuts 的使用場景還有不少,相信開發者們會以更創新和獨特的方式來使用這項新技術。
本文由 SwiftGG 翻譯組翻譯,已經得到做者翻譯受權,最新文章請訪問 swift.gg。