刚刚实践的,按步骤来,全网最全的,不要在意排版
1、确认你的手机启动了 Siri 功能,如果没有需要先打开Siri
2、在你的主工程中启动Siri功能,具体步骤:
2.1在 Xcode 中打开你的应用工程。
2.2在项目设置中,选择适当的 target。 对于 iOS,选择你的 iOS app target。 对于 watchOS,选择你的 WatchKit Extension target。
2.3选择 Capaabilities 标签。
2.4启用 Siri 功能。
3、添加 Intents 应用扩展 target 提供了构建 Intents 扩展所需的初始文件,并配置 Xcode 项目以构建该扩展并将其包含在应用程序包中。
在 Xcode 中打开你的已有的应用工程。
选择 File > New > Target。
从 iOS 或 watchOS 平台的 “Application Extension” 组中选择 “Intents Extension”。
点击下一步。
指定扩展名并配置语言和其他选项。
对于 iOS 应用程序,如果你计划自定义 Siri 界面的某些部分,请启用“ Include UI Extension” 选项。
点击完成。
4、创建Intents文件,并且在里面添加对应的Intent,比如:签到
选择你的 Intents 扩展的 build scheme。 当你创建 Intents 扩展目标时,Xcode 会自动创建 build scheme。
选择要运行代码的目标(模拟器或设备)。
选择 Porduct > Run 以开始调试会话。
当 Xcode 提示时,选择 Siri 作为要运行的主应用程序。 Xcode 构建你的应用程序和扩展,将它们安装在设备上,然后启动你选择的应用程序。
5、记得把你的Intents文件 关联上所有创建的target
6、另外需要在Info.plist 文件中添加 对应的描述和key,具体在最下面。
7、把target项目run一遍,再run主项目,在手机上搜索快捷指令:签到,就可以看到了,添加后就会打开自己的APP,后续的逻辑可以自己实现了
8、如果涉及到多语言问题,也可以在Intents文件添加多语言
重点代码:
extension AppDelegate {
//这个方法是关键,调起的时候会执行,里面就是你自己实现自己的业务逻辑了
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([any UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == "StepIntent" {
if let intent = userActivity.interaction?.intent as? DeviceStepIntent {
handleStepIntent(intent)
return true
}
}
return false
}
// StepIntent
private func handleStepIntent(_ intent: DeviceStepIntent) {
}
}
------------------------检查下是否有授权 代码发到APP启动时候
INPreferences.requestSiriAuthorization { status in
printLog("requestSiriAuthorization \(status)")
switch status {
case .authorized:
print("Authorized")
default:
print("Not Authorized")
self.promptForSiriAuthorization()
}
}
-----------------------info.plist 文件新增内容
<key>NSExtensionAttributes</key>
<dict>
<key>IntentsSupported</key>
<array>
<string>StepIntent</string>
</array>
</dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.intents-service</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).IntentHandler</string>
<key>NSUserActivityTypes</key>
<array>
<string>StepIntent</string>
</array>