当前位置: 首页 > article >正文

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执行完成之后。


http://www.kler.cn/a/304192.html

相关文章:

  • 缓存与数据库不一致的解决方案:深入理解与实践
  • 将Excel文件的两个表格经过验证后分别读取到Excel表和数据库
  • Android Studio更新成2024.1.2版本后旧项目Gradle配置问题
  • react 中 useContext Hook 作用
  • Spring Boot中的自动装配机制
  • ubuntu中apt-get的默认安装路径。安装、卸载以及查看的方法总结
  • golang学习笔记14——golang性能问题的处理方法
  • 2-94 基于matlab的最佳维纳滤波器的盲解卷积算法
  • 基于微信小程序的食堂点餐预约管理系统
  • IP纯净度对跨境电商有哪些影响
  • terminator-gnome
  • 在Linux系统中如何创建一个新用户
  • STM32+ESP01连接到机智云
  • 移动应用门户实现的技术方案
  • [数据集][目标检测]岩石种类检测数据集VOC+YOLO格式4766张9类别
  • 【贪心算法】贪心算法
  • Mongodb Error: queryTxt ETIMEOUT xxxx.wwwdz.mongodb.net
  • 【运维】自动化运维工具,使用 Ansible 进行开发环境配置管理(本地/远程,brew/scoop/yum,docker/packer/openstack)
  • 【Hot100】LeetCode—75. 颜色分类
  • 算法基础-扩展欧几里得算法
  • Python知识点:如何使用Python进行Excel文件操作(OpenPyXL、Pandas)
  • 源码到class字节码的编译流程 字节码到内存的Java类加载流程
  • 【一分钟学C++】std::memory_order
  • Vue3+Django5+REST Framework开发电脑管理系统
  • 【计算机网络 - 基础问题】每日 3 题(一)
  • 程序的结构和控制流与数据流