做者: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。