为您的应用快速赢取:“添加到Siri”按钮


如您所知,自iOS 12起,可以将“ Siri快捷方式”从您的应用程序“捐赠”到用户可以在iOS设置中找到并且可以在“快捷方式”应用程序中用于自定义目的的操作系统。
您可以找到很多有关捐赠捷径的指南和讨论
NSUserActivityINIntent就像来自NSSpain 2018的Ellen Shapiro的演讲一样。

在这篇文章中,我的主题略有不同,这是Siri快捷方式的一种捷径:直接从您的应用程序中显示Siri快捷方式语音注册的UI,每个用户都可以识别一个标准按钮。


SiriKit中的IntentsUI提供了一个新的UIButton子类,该子类具有默认用户界面,可以显示INUIAddVoiceShortcutViewController 。 该控制器将指导用户完成向Siri添加快捷方式的过程,而不是向快捷方式应用程序和设备设置的Siri部分添加快捷方式。 首先,您必须在ViewController中import IntentsUI
此按钮有4种可能的样式,应作为参数传递给
初始化方法:

注意:带有样式初始值设定项的button.translatesAutoresizingMaskIntoConstraints = false带有零帧,因此,如果以编程方式初始化它,请记住设置button.translatesAutoresizingMaskIntoConstraints = false

下一步:创建一个INShortcut并将其设置为button属性。 在INUIAddVoiceShortcutButton向上触摸会自动调用此快捷方式上的操作。

可以使用INIntentNSUserActivity创建快捷方式。 如果选择使用INIntent,请记住初始化程序是有故障的。

在第一段或Apple文档的此页面中链接的演讲中了解有关自定义INIntent的更多信息。

现在是时候设置代表了。 INUIAddVoiceShortcutButtonDelegate协议实现将在需要呈现请求视图控制器时通知您的视图控制器。

在此示例中,我仅介绍了addVoiceShortcutViewControllereditVoiceShortcutViewController,而没有任何其他操作,但是您可以检查哪个按钮调用了委托方法或执行您喜欢的操作(我建议使用这些方法在分析服务上跟踪这些操作) 。

注意:没有“编辑按钮”,因此将是一个按钮,用于选择要显示的视图控制器

还没有结束,我们还有最后一点: INUIAddVoiceShortcutViewControllerINUIEditVoiceShortcutViewController必须具有自己的委托,因为像许多其他系统ViewController(即邮件共享)一样,它们在取消或成功时不会以编程方式取消。

我们必须再处理两个委托,但是在任何情况下都可以丢弃VC,就像我在本示例中所做的那样,或者像在使用这些方法进行任何附带操作之前一样。 跟踪此事件也很有趣,以便更好地了解您的用户使用Siri Shortcut所做的事情。

方法签名正在讨论用户已采取的操作,请注意,我已将委托添加到以前的方法中:


现在,您的应用已准备好在Siri中捐赠和注册语音快捷方式,而无需离开它,也不会中断用户体验。

当您的用户在Siri对话中说出“魔术”短语时,您的AppDelegate将像对任何IntentNSUserActivity一样调用continueUserActivity方法。 您可以在Apple文档中或在Ray Wenderlich撰写的有关Handoff的本教程中找到有关此主题的更多信息,请记住,Handoff和Siri快捷方式均基于NSUserActivity,并且在App Delegate中具有相同的入口点。

您还可以在我的GitHub上使用本文摘要的示例代码找到一个工作示例。


觉得这篇文章有用吗? 在Medium上关注我(Giuseppe Travasoni),并在下面查看我最受欢迎的文章! 请👏这篇文章分享!

  • 使用UIFeedbackGenerator的触觉反馈和Taptic Engine改善iOS应用程序用户体验
  • 如何将iOS 3D Touch作为UIGestureRecognizer应用于任何UIView
  • 如何将Squircle半径应用于iOS视图