IOS Siri和快捷指令打开app

news2024/11/15 12:38:39

使用场景
需要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.coloradmin.cn/o/2121877.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue2+JS项目升级为Vue3+TS之jquery的maphilight引入项目(附使用)

本人由于想提升自己的项目开发能力&#xff0c;所以将就项目的vue2JavaScriptwebpack的旧技术栈升级为vue3typescriptvite的技术栈&#xff0c;所以遇到很多坑&#xff0c;以下是maphilight的解决方法。 众所周知jquery是基于JavaScript进行开发&#xff0c;但是已有typescript…

钉钉虚拟位置打卡

我用蓝奏浏览器分享了[base_r_sign], 下载链接:https://wwp.lanzoup.com/i5NK526t7u9e 提取码 : 7wib, 你可以不限速下载哦\n\n通过百度网盘分享的文件&#xff1a;彤彤240724…\n链接:https://pan.baidu.com/s/1x_xhRQDopvQBAg-nWUNf4Q?pwd6666\n提取码:6666 下载好以后先配置…

超全!进销存系统排名前列的厂商有哪些?

本文将为大家盘点10款主流的进销存系统&#xff0c;为企业选型提供参考&#xff01; 进销存系统&#xff08;Inventory Management System&#xff09;&#xff0c;也称为物料管理系统或存货管理系统&#xff0c;是指企业为有效管理和控制进出货物的流动&#xff0c;准确记录库…

css——网格布局

名词解释 div{$}*9tab键&#xff0c;快捷生成 记首字母gtc 网格布局&#xff1a;display: grid; grid-template-columns: 100px 100px 100px; grid-template-rows: 100px 100px 100px; &#xff08;父元素&#xff09; <!DOCTYPE html> <html lang&q…

虚幻引擎Gameplay探索 Actor 之间的高效通信与交互技巧二

Actor通信介绍 在虚幻引擎中&#xff0c;Actor 是游戏世界中的基本构建块&#xff0c;类似于 Unity 中的 GameObject。Actor 通信是指不同 Actor 之间如何相互交互和传递信息&#xff0c;这在构建复杂的游戏逻辑时至关重要。以下是对 Actor 通信的详细介绍。 Actor通信方法表…

Redis复习笔记整理(没有人会有耐心看完包括我自己)

目录 1、Redis简介 1.1 补充数据类型Stream 1.2 Redis底层数据结构 1.3 Redis为什么快 1.4 持久化机制* 1.4.1 RDB持久化 bgsave执行流程 如何保证数据一致性 快照操作期间服务崩溃 RDB优缺点 1.4.2 AOF持久化 为什么采用写后日志 如何实现AOF 什么是AOF重写 AO…

Vue组件:动态组件、缓存组件、异步组件

1、动态组件 Vue.js 提供了对动态组件的支持。在使用动态组件时&#xff0c;多个组件使用同一挂载点&#xff0c;根据条件在不同组件之间进行动态切换。动态组件通过使用 Vue.js 中的 <component>元素&#xff0c;动态绑定到该元素的 is 属性&#xff0c;根据 is 属性的…

通过LDAP方式使用windows域认证

关于Windows的域认证, 网上大多都再介绍原理啥的, 但是对于从来没有做过.net的我来说, 和看天书一样. 我把我做的demo提供出来共大家参考. 需要参考的文章,参照如下 Windows下LDAP服务安装与使用_windows ldap-CSDN博客 OpenLDAP管理工具之LDAP Admin-腾讯云开发者社区-腾讯云…

计算机基础知识-3

机器周期的时钟周期&#xff0c;或者是cpu时钟周期&#xff0c;就是系统的主频&#xff0c;&#xff0c;根据主频的频率产生脉冲信号。一条指令的执行分为取指和执行&#xff0c;不同指令的取指和执行锁需要的时间也可能是不同的。 每个指令的机器周期可能不同&#xff0c;每个…

Centos镜像详细下载思路总结:包括阿里云镜像下载和官方地址下载--centos7和centos8 镜像下载

Centos镜像详细下载思路总结&#xff1a;包括阿里云镜像下载和官方地址下载。 系统镜像下载&#xff1a; 阿里云镜像&#xff1a; centos-vault安装包下载_开源镜像站-阿里云 官方网址&#xff1a; https://vault.centos.org/7.6.1810/isos/ 系统相关依赖包下载&#xff1a…

某里228滑块逆向分析

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关。 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除! 前言 这次会简单的讲解…

【Web】XGCTF 西瓜杯 超详细题解

目录 CodeInject tpdoor easy_polluted Ezzz_php CodeInject eval里打代码注入 11);system("tac /0*");// tpdoor 可以传参isCache给../../config/route.php写入$config[request_cache_key] 打的是CheckRequestCache中间件解析的漏洞 think\middleware\Ch…

智能客服 | AI助理与内部知识库如何优化用户体验

在数字化转型的浪潮中&#xff0c;客户服务作为企业与客户之间的关键触点&#xff0c;其重要性不言而喻。随着人工智能技术的日益成熟&#xff0c;AI助理与企业知识库的深度融合正在重新定义客户服务的边界&#xff0c;为用户带来前所未有的便捷与个性化体验。 一、AI助理&…

5款翻译工具,告别百度在线翻译!

作为一个经常需要处理多语言文件的小编&#xff0c;我深知翻译工具的重要性。今天&#xff0c;我就来和大家聊聊几款市面上比较热门的翻译工具&#xff0c;一起来看看这几款翻译软件怎么样吧。 1、福昕在线翻译 网址&#xff1a;https://fanyi.pdf365.cn/doc 我发现它的界面简…

OpenCV结构分析与形状描述符(14)拟合直线函数fitLine()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 拟合一条直线到2D或3D点集。 fitLine 函数通过最小化 ∑ i ρ ( r i ) \sum_i \rho(r_i) ∑i​ρ(ri​)来拟合一条直线到2D或3D点集&#xff0c…

什么是过压保护?常见的过压保护元器件有哪些?

在现代电子设备的设计和制造过程中&#xff0c;过压保护是至关重要的一个环节。过电压可能会导致电路板上的元器件损坏或系统故障&#xff0c;因此使用合适的#过压保护元器件#至关重要。 1. 什么是过压保护&#xff1f; 过压保护是一种电子和电气系统中的安全措施&#xff0c…

搭建Eureka高可用集群 - day03

全部代码发出来了 搭建服务提供者 步骤&#xff1a; 1.创建项目&#xff0c;引入依赖 2.添加Eureka相关配置 3.添加EnableEurekaClient注解 4.测试运行 步骤1&#xff1a;创建项目&#xff0c;引入依赖 使用Spring Initializr方式创建一个名称为eureka-provider的Sprin…

Git 撤销commit

上一篇&#xff0c;Git撤销add&#xff0c;其实已经讲了用reset命令可以取消commit&#xff0c;这里再啰嗦下。先看&#xff1a; git如何撤回已经commit • Worktile社区 首先明确一点&#xff0c;无论是commit还是撤销commit&#xff0c;都是在本地暂存区操作&#xff0c;而…

HTML5中IndexedDB前端本地数据库

一、indexedDB为何替代了Web SQL Database&#xff1f; 跟小朋友的教育从来没有什么“赢在起跑线”这种说法一样&#xff0c;在前端领域&#xff0c;也不是哪来先出来哪个就在日后引领风骚的。 HTML5 indexedDB和Web SQL Database都是本地数据库数据存储&#xff0c;Web SQL Da…

陶建辉演讲干货分享,AI 时代下的数据预测和数据处理挑战

在 7 月 26 日的 TDengine 用户大会上&#xff0c;涛思数据&#xff08;TDengine&#xff09;创始人&CEO 陶建辉进行了题为《TDengine 助你决胜 AI 时代》的主题演讲。他不仅分享了 TDengine 的全面技术创新&#xff0c;还深入阐释了打造 TDengine AI 大语言模型插件 TDgpt…