SiriKit框架解析 (二) 请求授权、创建intent应用程序扩展

请求授权使用SiriKit

请求用户许可,以便Siri和Maps可以与您的Intents应用扩展程序进行通信。SiriKit框架解析 (二) 请求授权、创建intent应用程序扩展_第1张图片

Overview

SiriKit框架解析 (二) 请求授权、创建intent应用程序扩展_第2张图片

在用户授权之前,Siri和Maps无法与您的Intents应用扩展程序进行交互。 您从iOS应用程序请求授权,而不是您的扩展程序。 用户授予的权限适用于您的iOS应用和watchOS应用。

要求授权:

  • 启用S​​iri功能。您的iOS应用或WatchKit扩展必须启用Siri功能才能成功授权。有关如何启用Siri功能的信息,请参阅创建Intent App扩展。
  • 配置Info.plist文件。在您的iOS应用的Info.plist文件中包含NSSiriUsageDescription键。此键的值是一个字符串,用于描述您的应用与SiriKit共享的信息。例如,锻炼应用程序可能会将值设置为字符串“锻炼信息将发送给Siri。”需要包含此密钥。
  • 从您的iOS应用程序请求授权。在iOS应用执行期间的某个时刻调用requestSiriAuthorization:INPreferences的类方法。

当您的应用程序的授权状态未确定时,从您的iOS应用程序调用requestSiriAuthorization:方法会导致系统提示用户授权您的应用程序。警报包括您在应用的Info.plist文件的NSSiriUsageDescription键中提供的使用说明字符串。用户可以批准或拒绝您的应用程序的授权请求,并可以稍后在“设置”应用中更改您应用的授权状态。系统会记住您的应用程序的授权状态,以便后续调用requestSiriAuthorization:方法不会再次提示用户。

创建Intents App扩展

在Xcode项目中添加和配置Intents应用程序扩展。SiriKit框架解析 (二) 请求授权、创建intent应用程序扩展_第3张图片

OverviewSiriKit框架解析 (二) 请求授权、创建intent应用程序扩展_第4张图片

与SiriKit的交互通过您的Intents应用扩展程序进行,您可以在iOS或watchOS应用程序包中进行交付。 Intents应用程序扩展程序处理与SiriKit的大多数交互,但您的应用程序需要了解这些交互,并且在某些情况下可能会在实现这些交互时发挥积极作用。

配置Xcode项目需要几个步骤。 除了向项目添加Intents应用扩展目标外,您还必须对应用进行一些小的更改。

启用Siri功能SiriKit框架解析 (二) 请求授权、创建intent应用程序扩展_第5张图片

SiriKit框架解析 (二) 请求授权、创建intent应用程序扩展_第6张图片

启用Siri功能可为您的应用添加一组权利。 App Store要求任何iOS应用程序或包含Intents扩展程序的watchOS应用程序都存在这些权利。

  • 在Xcode中打开您的应用程序项目。
  • 在项目设置中,选择适当的目标。 (对于iOS,请选择您的iOS应用目标。对于watchOS,请选择您的WatchKit扩展目标。)
  • 选择“功能”选项卡。
  • 启用Siri功能。
添加Intents App扩展SiriKit框架解析 (二) 请求授权、创建intent应用程序扩展_第7张图片SiriKit框架解析 (二) 请求授权、创建intent应用程序扩展_第8张图片

添加Intents应用程序扩展目标提供了构建Intents扩展所需的初始文件,并配置您的Xcode项目以构建该扩展并将其包含在您的应用程序包中。

  • 在Xcode中打开现有的应用程序项目。
  • 选择File > New > Target。
  • 从iOS或watchOS平台的Application Extension组中选择Intents扩展。
  • 点击下一步。
  • 指定扩展名称并配置语言和其他选项。
  • 对于iOS应用程序,如果您计划自定义Siri界面的某些部分,请启用包含UI Extension选项。
  • 单击完成。

注意:您可以向应用添加多个Intents扩展,但每个扩展必须支持不同的intents。 仅当这样做可以提供性能优势或减少每个扩展的内存占用时,才创建多个扩展。

SiriKit框架解析 (二) 请求授权、创建intent应用程序扩展_第9张图片

指定扩展支持的IntentsSiriKit框架解析 (二) 请求授权、创建intent应用程序扩展_第10张图片

将Intents扩展目标添加到项目后,配置Xcode提供的默认Info.plist文件以指定您支持的意图。 SiriKit使用扩展程序的Info.plist文件中的信息来确定要路由到您的扩展程序的意图。

  • 在Xcode中,选择Intents app扩展的Info.plist文件。
  • 展开NSExtension和NSExtensionAttributes键以显示IntentsSupported键(iOS和watchOS)和IntentsRestrictedWhileLocked键(仅限iOS)。
  • 在IntentsSupported键中,为扩展程序处理的每个intent添加一个String项。将每个项的值设置为intent的类名。
  • 在IntentsRestrictedWhileLocked项中,为要求解锁设备的每个intent添加一个String项。将每个项的值设置为intent的类名。

在iOS中包含IntentsRestrictedWhileLocked键是可选的。您可以使用它来扩充需要解锁设备的意图列表。某些意图(例如涉及金融交易的意图)总是要求解锁用户的设备。对于这些意图,Siri会自动要求用户解锁设备,无论您是否将其包含在IntentsRestrictedWhileLocked键下。在watchOS中,所有意图都要求解锁设备。

重要:您在watchOS应用中支持的意图必须是您在iOS应用中支持的意图的子集。 换句话说,iOS应用中的Intents扩展必须能够处理watchOS应用中Intents扩展所处理的所有相同意图。 在watchOS应用程序中支持意图但在iOS应用程序中没有支持意图这是一种程序的错误。
SiriKit框架解析 (二) 请求授权、创建intent应用程序扩展_第11张图片

当用户的话语模糊以至于它解析为多个意图时,SiriKit会使用IntentsSupported键中的意图顺序来确定发送给您的应用的意图。 通过将最相关的那些放在数组前面,先组织您的意图列表。 当Intents扩展支持具有相似语义的多个域时,优先考虑意图尤其重要。 例如,支持电话和消息传递意图的应用程序可能会选择通过发起呼叫来优先发送消息。
某些意图可能需要为您的Xcode项目或您的应用程序执行其他配置步骤。 例如,在实施乘车预订应用程序时,Maps希望您提供描述服务的覆盖范围的GeoJSON文件。 有关任何特殊要求的信息,请参阅参考文档。

测试你的Intents App扩展SiriKit框架解析 (二) 请求授权、创建intent应用程序扩展_第12张图片

Xcode支持直接从Xcode项目启动Intents app扩展,并在模拟器或设备上运行时对其进行调试。 要运行和调试Intents扩展:

  • 选择Intents扩展的构建方案。 (在创建Intents扩展目标时,Xcode会自动为您创建构建方案。)
  • 选择运行代码的target(模拟器或设备)。
  • 选择“产品”>“运行”以开始调试会话。
  • 当Xcode提示时,选择Siri或Maps作为要运行的主应用程序。 Xcode构建您的应用和扩展程序,将它们安装在设备上,然后启动您选择的应用程序。

首次安装扩展程序时,Siri可能无法立即识别您的应用程序扩展程序,您可能需要等待几分钟才能发出任何相关命令。 同样,在更新扩展程序的Info.plist文件时,您可能需要等待几分钟,然后Siri才能识别出任何更改。

你可能感兴趣的:(iOS,开发)