请求用户许可,以便Siri和Maps可以与您的Intents应用扩展程序进行通信。
在用户授权之前,Siri和Maps无法与您的Intents应用扩展程序进行交互。 您从iOS应用程序请求授权,而不是您的扩展程序。 用户授予的权限适用于您的iOS应用和watchOS应用。
要求授权:
当您的应用程序的授权状态未确定时,从您的iOS应用程序调用requestSiriAuthorization:方法会导致系统提示用户授权您的应用程序。警报包括您在应用的Info.plist文件的NSSiriUsageDescription键中提供的使用说明字符串。用户可以批准或拒绝您的应用程序的授权请求,并可以稍后在“设置”应用中更改您应用的授权状态。系统会记住您的应用程序的授权状态,以便后续调用requestSiriAuthorization:方法不会再次提示用户。
与SiriKit的交互通过您的Intents应用扩展程序进行,您可以在iOS或watchOS应用程序包中进行交付。 Intents应用程序扩展程序处理与SiriKit的大多数交互,但您的应用程序需要了解这些交互,并且在某些情况下可能会在实现这些交互时发挥积极作用。
配置Xcode项目需要几个步骤。 除了向项目添加Intents应用扩展目标外,您还必须对应用进行一些小的更改。
启用Siri功能可为您的应用添加一组权利。 App Store要求任何iOS应用程序或包含Intents扩展程序的watchOS应用程序都存在这些权利。
添加Intents应用程序扩展目标提供了构建Intents扩展所需的初始文件,并配置您的Xcode项目以构建该扩展并将其包含在您的应用程序包中。
注意:您可以向应用添加多个Intents扩展,但每个扩展必须支持不同的intents。 仅当这样做可以提供性能优势或减少每个扩展的内存占用时,才创建多个扩展。
将Intents扩展目标添加到项目后,配置Xcode提供的默认Info.plist文件以指定您支持的意图。 SiriKit使用扩展程序的Info.plist文件中的信息来确定要路由到您的扩展程序的意图。
在iOS中包含IntentsRestrictedWhileLocked键是可选的。您可以使用它来扩充需要解锁设备的意图列表。某些意图(例如涉及金融交易的意图)总是要求解锁用户的设备。对于这些意图,Siri会自动要求用户解锁设备,无论您是否将其包含在IntentsRestrictedWhileLocked键下。在watchOS中,所有意图都要求解锁设备。
重要:您在watchOS应用中支持的意图必须是您在iOS应用中支持的意图的子集。 换句话说,iOS应用中的Intents扩展必须能够处理watchOS应用中Intents扩展所处理的所有相同意图。 在watchOS应用程序中支持意图但在iOS应用程序中没有支持意图这是一种程序的错误。
当用户的话语模糊以至于它解析为多个意图时,SiriKit会使用IntentsSupported键中的意图顺序来确定发送给您的应用的意图。 通过将最相关的那些放在数组前面,先组织您的意图列表。 当Intents扩展支持具有相似语义的多个域时,优先考虑意图尤其重要。 例如,支持电话和消息传递意图的应用程序可能会选择通过发起呼叫来优先发送消息。
某些意图可能需要为您的Xcode项目或您的应用程序执行其他配置步骤。 例如,在实施乘车预订应用程序时,Maps希望您提供描述服务的覆盖范围的GeoJSON文件。 有关任何特殊要求的信息,请参阅参考文档。
Xcode支持直接从Xcode项目启动Intents app扩展,并在模拟器或设备上运行时对其进行调试。 要运行和调试Intents扩展:
首次安装扩展程序时,Siri可能无法立即识别您的应用程序扩展程序,您可能需要等待几分钟才能发出任何相关命令。 同样,在更新扩展程序的Info.plist文件时,您可能需要等待几分钟,然后Siri才能识别出任何更改。