IOS Siri和快捷指令打开app

使用场景
需要Siri打开应用或者在自定义快捷指令打开应用,并携带内容进入应用。

1.创建Intents文件
1.1 依次点开File->New->File

在这里插入图片描述

1.2 搜索intent关键字找到 SiriKit Intent Definition File文件

在这里插入图片描述在这里插入图片描述

1.3 找到刚才创建的Intent文件,点击+然后New Intent

在这里插入图片描述

1.4 LaunchApp根据自己需要来自定义命名

在这里插入图片描述

1.5 设置失败和成功提示内容

在这里插入图片描述

1.6 设置参数(这里设置了一个名为content的属性,可以根据自己需求添加)

在这里插入图片描述

1.7 设置输出content属性

在这里插入图片描述

2.创建一个Intent Extension的Targets
2.1 File->New->Targets

在这里插入图片描述

2.2 找到Intent Extension并创建

在这里插入图片描述

2.3 创建Intent Extension

在这里插入图片描述

2.4 配置Intent Extension到Intents

创建之后可以在项目里面看到
在这里插入图片描述
找到我们前面配置的Intents文件,关联Intent Extension
在这里插入图片描述

2.5 配置IntenHandler.m

导入#import “LaunchAppIntent.h”,关联LaunchAppIntentHandling
在这里插入图片描述
实现LaunchAppIntent的函数
在这里插入图片描述

- (void)handleLaunchApp:(nonnull LaunchAppIntent *)intent completion:(nonnull void (^)(LaunchAppIntentResponse * _Nonnull))completion {
    NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:NSStringFromClass([LaunchAppIntent class])];
    completion([[LaunchAppIntentResponse alloc] initWithCode:LaunchAppIntentResponseCodeContinueInApp userActivity:userActivity]);
}

 
- (void)confirmLaunchApp:(LaunchAppIntent *)intent completion:(void (^)(LaunchAppIntentResponse * _Nonnull))completion {
   
    NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:NSStringFromClass([LaunchAppIntent class])];
    LaunchAppIntentResponse *response = [[LaunchAppIntentResponse alloc] initWithCode:LaunchAppIntentResponseCodeReady userActivity:userActivity];
    completion(response);
}

- (void)resolveContentForLaunchApp:(nonnull LaunchAppIntent *)intent withCompletion:(nonnull void (^)(INStringResolutionResult * _Nonnull))completion {
    if (intent.content != nil && intent.content.length > 0) {
          completion([INStringResolutionResult successWithResolvedString:intent.content]);
      } else {
          completion([INStringResolutionResult needsValue]);
      }
}

resolveContentForLaunchApp:是你1.6步骤创建的参数content属性,用于代理接收传过来的参数内容。
如果你不走代理模式是不会走这里的,而是会走AppDelegate的application。

2.6 非代理模式下配置AppDelegate的application。
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {

    if([userActivity.interaction.intent isKindOfClass:[LaunchAppIntent class]]){
        INInteraction *interaction = userActivity.interaction;
        LaunchAppIntent *intent = (LaunchAppIntent *)interaction.intent;
       NSLog(@"application========================%@",intent.content);
        // 做自己的业务逻辑
    return YES;
}
3.配置info.plist
<key>NSSiriUsageDescription</key>
		<string>使用Siri控制应用</string>
		<key>NSUserActivityTypes</key>
		<array>
			<string>LaunchAppIntent</string>
		</array>
4.调试
4.1 在快捷指令中添加我们的快捷指令

在这里插入图片描述

4.2 输入Launch App

在这里插入图片描述

4.3 输入我们需要带进入的属性内容(流程也就结束了)

在这里插入图片描述

5.可能出现的错误
5.1 Cycle inside Runner; building could produce unreliable results. This usually can be resolved by moving the shell script phase ‘Thin Binary’ so that it runs before the build phase that depends on its outputs.在这里插入图片描述

Thin Binary执行时机,必须在Copy Bundle Resources和Embed Foundation Extensions执行完成之后。

### 如何配置 DeepSeek 以集成到 iOS Siri 快捷方式 目前关于将特定第三方服务如 DeepSeek 连接到 Siri 快捷指令的信息较为有限。然而,基于现有的开发框架技术文档[^1],可以推测实现这一目标的主要路径。 #### 利用 Shortcuts 应用程序创建自定义工作流 为了使 DeepSeek 功能能够通过语音命令触发,开发者通常会利用 Apple 提供的 Shortcuts 应用来构建自动化流程: 1. **安装并打开 Shortcuts App** 用户需先确保设备上已安装最新版本的 Shortcuts 应用程序,并启动它。 2. **添加新的快捷操作** 在应用程序内选择“新建快捷方式”,接着点击屏幕底部中央位置的小加号图标,开始向序列中加入动作模块。 3. **调用 Web API 或 HTTP 请求节点** 如果 DeepSeek 支持 RESTful 接口,则可以通过“获取网页内容”或专门设计用于发送 POST/GET 请求的动作组件与之交互;如果存在官方提供的插件则优先考虑使用这些资源。 4. **设置参数传递机制** 对于需要动态输入的数据项(比如查询关键词),应当合理安排变量存储空间,并允许用户在激活时即时录入必要信息。 5. **关联至 Siri 声控入口** 完成上述步骤之后,返回主界面找到刚刚编辑完成的工作流条目,轻触分享按钮旁边的三个圆点图案进入详情页,开启“添加到 Siri”的选项卡,按照提示录制个性化的唤醒词句即可。 值得注意的是,由于 DeepSeek 并不是由 Apple 开发的服务,因此具体的集成功能取决于 DeepSeek 是否提供了相应的 SDK 或者开放接口支持这样的集成行为。对于非原生应用来说,任何试图将其融入 Siri 生态系统的尝试都依赖于其自身的兼容性扩展能力。 ```swift // 示例 Swift 代码片段展示如何发起网络请求 let url = URL(string: "https://api.deepseek.com/search")! var request = URLRequest(url: url) request.httpMethod = "POST" request.setValue("application/json", forHTTPHeaderField: "Content-Type") do { let jsonBody = try JSONSerialization.data(withJSONObject: ["query": "example"], options: []) request.httpBody = jsonBody let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data else { return } print(String(data: data, encoding: .utf8)) } task.resume() } catch { print(error.localizedDescription) } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值