You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native实现无需打开App的Siri快捷指令:调用API并语音反馈

实现无需启动App的Siri快捷指令方案

核心思路

仅靠react-native-siri-shortcut的基础监听无法实现App关闭后的指令执行,必须借助iOS原生的自定义Intent Extension——它能让Siri在独立进程中处理指令,全程无需启动主App。

具体实现步骤

1. 给iOS项目添加Intent Extension

  • 打开Xcode,在React Native项目的iOS工程里,点击File > New > Target
  • 选择Intents Extension,命名为TeaTimeIntent(不要勾选Include UI Extension)
  • 完成创建后,Xcode会自动生成Extension的模板代码

2. 定义自定义Intent

  • 打开Extension目录下的IntentDefinition.intentdefinition文件
  • 添加新Intent,命名为PlaceTeaOrderIntent
  • 设置Suggested Invocation Phrase为It's Tea Time
  • 根据API需求添加参数,勾选Supports background execution选项

3. 编写Intent处理逻辑

  • 在IntentHandler.swift中实现PlaceTeaOrderIntentHandling协议,示例代码:
func handle(intent: PlaceTeaOrderIntent, completion: @escaping (PlaceTeaOrderIntentResponse) -> Void) {
    // 调用目标API
    guard let url = URL(string: "https://your-api-domain.com/place-tea-order") else {
        completion(PlaceTeaOrderIntentResponse.failure(error: "Invalid API URL"))
        return
    }
    
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    
    let task = URLSession.shared.dataTask(with: request) { _, response, error in
        if let error = error {
            completion(PlaceTeaOrderIntentResponse.failure(error: error.localizedDescription))
            return
        }
        
        // API调用成功,返回Siri回复文本
        let successResponse = PlaceTeaOrderIntentResponse.success(result: "Your order was placed successfully...")
        completion(successResponse)
    }
    task.resume()
}

func confirm(intent: PlaceTeaOrderIntent, completion: @escaping (PlaceTeaOrderIntentResponse) -> Void) {
    completion(PlaceTeaOrderIntentResponse.ready())
}

4. 关联主App与Intent Extension

  • 在主App的Info.plist中添加配置:
<key>NSSiriUsageDescription</key>
<string>Use Siri to place your tea order quickly</string>
<key>IntentsSupported</key>
<array>
    <string>PlaceTeaOrderIntent</string>
</array>
  • 若需要锁屏下执行,在Extension的Info.plist中设置NSExtension > NSExtensionAttributes > IntentsRestrictedWhileLocked为false

5. 在React Native中捐赠Intent

  • 替换原有的addShortcutListener逻辑,改为向Siri捐赠自定义Intent:
import SiriShortcuts from 'react-native-siri-shortcut';

// 在用户完成首次操作后(比如首次下单)执行捐赠
SiriShortcuts.donate({
    activityType: 'com.your-app-domain.PlaceTeaOrderIntent',
    title: 'Place Tea Order',
    suggestedInvocationPhrase: "It's Tea Time",
    userInfo: {},
    persistentIdentifier: 'PlaceTeaOrder'
});

6. 测试验证

  • 在真机上运行主App后卸载(模拟完全关闭状态)
  • 唤醒Siri说出Hey Siri, It's Tea Time,验证Siri是否直接调用API并回复预设文本,且不启动主App

注意事项

  • Intent Extension是iOS原生能力,react-native-siri-shortcut仅负责捐赠Intent,核心逻辑需用Swift/Objective-C实现
  • 必须处理API调用的网络异常,确保给Siri返回合理响应
  • 仅真机支持Siri快捷指令的后台执行,模拟器无法测试该功能

内容的提问来源于stack exchange,提问作者Mitesh K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:55:21