如何从Flutter应用中打开iOS快捷指令APP并添加Siri快捷指令?
实现方案
核心思路
利用iOS系统提供的Shortcuts URL Scheme,构造预配置好内容的URL,在Flutter中通过URL跳转唤起快捷指令APP,自动填充触发词和执行动作。
步骤1:添加依赖
在pubspec.yaml中加入url_launcher包,用于处理URL跳转:
dependencies: flutter: sdk: flutter url_launcher: ^6.1.12 # 请使用最新版本
步骤2:配置Info.plist
在iOS项目的Info.plist中添加URL Scheme白名单,允许应用唤起快捷指令APP:
<key>LSApplicationQueriesSchemes</key> <array> <string>shortcuts</string> </array>
步骤3:构造快捷指令配置并跳转
以下是完整代码示例,点击按钮即可唤起快捷指令APP,自动填充“当我说”(示例为打开我的应用)和“执行”(打开你的Flutter应用)的内容:
import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; class SiriShortcutCreator extends StatelessWidget { // 自定义语音触发词和应用专属URL Scheme(需提前配置) final String triggerPhrase = "打开我的应用"; final String appScheme = "yourapp://"; // 替换为你的应用实际URL Scheme Future<void> _createSiriShortcut() async { // 构造快捷指令的JSON结构:包含语音触发规则和打开应用的动作 final shortcutJson = { "actions": [ { "identifier": "is.workflow.actions.openurl", "parameters": { "URL": appScheme } } ], "input": triggerPhrase, "trigger": { "identifier": "is.workflow.triggers.voice", "parameters": { "phrase": triggerPhrase } } }; // 将JSON字符串进行URL编码,避免格式错误 final encodedJson = Uri.encodeComponent(shortcutJson.toString()); // 拼接Shortcuts的创建URL final url = "shortcuts://create-shortcut?name=打开我的应用&shortcut=$encodedJson"; if (await canLaunchUrl(Uri.parse(url))) { await launchUrl(Uri.parse(url)); } else { throw "无法唤起快捷指令APP,请检查是否已安装"; } } @override Widget build(BuildContext context) { return ElevatedButton( onPressed: _createSiriShortcut, child: const Text("创建Siri快捷指令"), ); } }
关键补充说明
- 应用URL Scheme配置:需要在iOS项目的
Info.plist中提前配置应用专属URL Scheme,确保快捷指令能正确打开你的应用:
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>yourapp</string> <!-- 替换为你的自定义Scheme --> </array> </dict> </array>
- 自定义执行动作:如果需要添加更复杂的操作,可以修改
actions数组内容,参考苹果官方的快捷指令动作文档来配置对应的动作标识符和参数。 - 系统版本要求:该方案仅支持iOS 12及以上版本(Shortcuts APP正式推出的版本),需确保用户设备系统版本符合要求。
内容的提问来源于stack exchange,提问作者Fasikaw
相关产品推荐
相关产品推荐

