Siri Intent — mechanizm integracji aplikacji iOS z asystentem głosowym Siri, umożliwiający użytkownikom wykonywanie działań głosem bez otwierania aplikacji. Programowanie odbywa się w Swift z użyciem frameworków Intents (Intents.framework) i SiriKit. Od iOS 16 pojawił się App Intents — nowy, bardziej elastyczny framework do tworzenia niestandardowych poleceń głosowych. Siri Intent obsługuje 10 domen (wiadomości, połączenia, płatności, notatki, treningi i inne) i umożliwia aplikacji przetwarzanie zapytań głosowych przez IntentHandler. Omówimy kluczowe pojęcia, architekturę i przykłady kodu.
Najważniejsze
Siri Intent — to mechanizm umożliwiający aplikacji iOS przetwarzanie poleceń głosowych wypowiadanych przez użytkownika przez Siri. Gdy użytkownik mówi «Siri, wyślij wiadomość do Telegram do Jana», Siri rozpoznaje intent (INSendMessageIntent), określa aplikację, która może go obsłużyć (Telegram), przekazuje parametry (kontakt «Jan», treść wiadomości) i uruchamia IntentHandler aplikacji. Cały proces trwa 0,5–2 sekund i nie wymaga otwierania aplikacji.
Architektura Siri Intent obejmuje trzy komponenty. Pierwszy — plik .intentdefinition opisujący strukturę intentu: parametry (String, Integer, INPerson), frazy wyzwalające i odpowiedzi. Drugi — IntentHandler implementujący protokół obsługi: otrzymuje parametry, wykonuje działanie (np. wysyła wiadomość przez API aplikacji) i zwraca INInteraction z kodem wyniku. Trzeci — Intents Extension, osobny target w Xcode, działający we własnym procesie. Siri uruchamia Intents Extension przy zapytaniu głosowym, przekazuje mu dane i otrzymuje wynik. Extension nie ma UI — wykonuje się w tle i musi zakończyć w ciągu 5–10 sekund.
Zastosowania Siri Intent: wysyłanie wiadomości (INSendMessageIntent), wykonywanie połączeń (INStartCallIntent), wysyłanie płatności (INSendPaymentIntent), tworzenie notatek (INCreateNoteIntent), treningi (INStartWorkoutIntent), zdjęcia (INSearchForPhotosIntent), rezerwacja podróży (INBookRestaurantReservationIntent), funkcje samochodowe (INSetCarLockStatusIntent). Każda domena ma ścisły schemat parametrów i ograniczenia określone przez Apple dla bezpieczeństwa.
SiriKit — framework przedstawiony przez Apple w iOS 10 (2016). Zapewnia gotowe domeny (Intents) dla typowych działań: wiadomości, połączenia, płatności, notatki, przypomnienia, zdjęcia, treningi, rezerwacje, funkcje samochodowe, wyszukiwanie. Dla każdej domeny Apple określiła zestaw klas Intent (INSendMessageIntent, INStartCallIntent), które aplikacja implementuje przez IntentHandler. SiriKit automatycznie generuje UI-potwierdzenie przed wykonaniem (dla płatności i wiadomości potwierdzenie jest obowiązkowe).
Domeny SiriKit:
Ograniczenia SiriKit: programista nie może tworzyć własnych domen — może używać tylko predefiniowanych. To ograniczenie zostało rozwiązane w iOS 16 wraz z pojawieniem się App Intents, który umożliwia tworzenie dowolnych poleceń głosowych dla dowolnych działań aplikacji.
App Intents — framework Apple, przedstawiony w iOS 16 (2022) i znacznie rozszerzony w iOS 17–18. W przeciwieństwie do SiriKit ze stałymi domenami, App Intents umożliwia programiście definiowanie własnych poleceń głosowych dla dowolnych działań aplikacji: «Siri, dodaj mleko do listy zakupów w AnyList», «Siri, zapisz spotkanie w Fantastical», «Siri, włącz światło w salonie w Home». Niestandardowe intenty definiuje się przez protokół AppIntent z określeniem parametrów, fraz i schematu potwierdzenia.
Komponenty App Intents:
App Intents vs SiriKit: główna różnica — elastyczność. SiriKit jest ograniczony do 10 domen, App Intents umożliwia tworzenie dowolnych poleceń. SiriKit wymaga osobnego targetu Intents Extension, App Intents działa wewnątrz głównej aplikacji. SiriKit używa Intents.framework (Objective-C/Swift), App Intents — nowej deklaratywnej składni Swift z makrami @Intent, @Parameter. Według danych Apple, App Intents jest używany w 70% nowych projektów z obsługą Siri na 2025 rok.
Przykład tworzenia niestandardowego App Intent do dodawania notatki w aplikacji. Demonstruje nowoczesne podejście z użyciem frameworka App Intents w iOS 16+.
import AppIntents
// 1. Intent personalizat pentru adăugarea unei note
struct AddNoteIntent: AppIntent {
// Numele comenzii (vizibil în Shortcuts)
static var title: LocalizedStringResource = "Adaugă notă"
// Descrierea comenzii
static var description: LocalizedStringResource = "Creează o notă nouă în aplicație"
// Parametrii comenzii
@Parameter(title: "Textul notei")
var noteContent: String
@Parameter(title: "Categorie", default: "General")
var category: String
// Executarea acțiunii
func perform() async throws -> some IntentResult {
// Creăm nota prin stocare locală
let note = Note(content: noteContent, category: category)
try await NoteStore.shared.save(note)
// Returnăm rezultatul cu un dialog pentru Siri
return .result(
dialog: .response("Nota \"\(noteContent)\" a fost creată")
)
}
}
// 2. App Shortcut Provider — înregistrarea comenzilor
struct NotesShortcuts: AppShortcutsProvider {
@AppShortcutsBuilder
static var appShortcuts: [AppShortcut] {
AppShortcut(
intent: AddNoteIntent(),
phrases: [
"Adaugă notă în \(.applicationName)",
"Creează notă cu \(.\$noteContent) în \(.applicationName)",
"Scrie \(.\$noteContent) în \(.applicationName)",
]
)
}
}
// 3. SiriKit Intent pentru mesaje (abordare clasică)
class MessageIntentHandler: NSObject, INSendMessageIntentHandling {
func resolveRecipients(
for intent: INSendMessageIntent,
completion: @escaping ([INPersonResolutionResult]) -> Void
) {
guard let recipients = intent.recipients else {
completion([.needsRequired()])
return
}
// Rezolvăm contactele prin Address Book al aplicației
let results = recipients.map { INPersonResolutionResult.success(with: $0) }
completion(results)
}
func handle(
intent: INSendMessageIntent,
completion: @escaping (INSendMessageIntentResponse) -> Void
) {
// Trimitem mesajul prin API-ul aplicației
let response = INSendMessageIntentResponse(
code: .success, userActivity: nil
)
completion(response)
}
}
Kluczowe elementy: AppIntent — protokół dla niestandardowego polecenia głosowego; @Parameter — makro określające parametry polecenia; perform() — metoda wykonująca działanie i zwracająca wynik z dialogiem dla Siri; AppShortcutsProvider — rejestruje polecenia aplikacji w Siri i Shortcuts; INSendMessageIntentHandling — protokół SiriKit do obsługi domeny wiadomości. Frazy wyzwalające są określane przez .applicationName i \.$parameter dla różnorodności.
Zalecenia dotyczące tworzenia Siri Intent: definiuj zrozumiałe frazy wyzwalające z wariantami wymowy; zwracaj informacyjny dialog po wykonaniu (sukces/błąd); obsługuj przypadki niekompletnych parametrów przez metody resolve z prośbą o doprecyzowanie; zapisuj INInteraction po wykonaniu do uczenia Siri; testuj na rzeczywistym urządzeniu (symulator nie obsługuje Siri). Dla App Intents używaj @Intent z inAppSearchKeywords dla lepszego rozpoznawania.
Ograniczenia: SiriKit Intents są ograniczone do 10 domen. Intents Extension wykonuje się z limitem 5–10 sekund — po przekroczeniu Siri zgłasza błąd. Siri Intent nie ma UI — cały interfejs jest generowany przez Siri. App Intents są dostępne tylko na iOS 16+ (pokrycie ~85% urządzeń na 2026). Do obsługi iOS 13–15 należy używać SiriKit. Prywatność: Siri nie przekazuje aplikacji nagrania audio — tylko rozpoznany tekst parametrów. Dla poufnych działań (płatności, wiadomości) wymagane jest potwierdzenie od użytkownika.
| Parametr | SiriKit | App Intents |
|---|---|---|
| Minimalne iOS | iOS 10 | iOS 16 |
| Domeny | 10 predefiniowanych | Dowolne |
| Język | Objective-C / Swift | Swift (makra) |
| Target | Intents Extension | Główna aplikacja |
| UI | Siri UI (generacja) | Siri UI (generacja) |
| Potwierdzenie | Dla płatności/wiadomości | Opcjonalnie |
| Shortcuts | Ręcznie | Automatycznie |
| Integracja Widget | Nie | WidgetIntent (iOS 17+) |
Wydajność i debugowanie: Intents Extension uruchamia się w oddzielnym procesie z ograniczeniem pamięci 30–50 MB. Do debugowania użyj schematu «Intents Extension» w Xcode z dołączeniem do procesu Siri. Logi są wypisywane w konsoli urządzenia. App Intents debuguje się przez aplikację Shortcuts na urządzeniu. INInteraction jest zapisywany lokalnie i używany przez Siri do sugestii — usuwaj nieaktualne interakcje przez INInteraction delete.
Często zadawane pytania
Siri Intent to polecenie głosowe, które uruchamia określone działanie w aplikacji bez jej otwierania. Użytkownik mówi «Siri, wyślij wiadomość w WhatsApp» a Siri wykonuje działanie przez IntentHandler aplikacji WhatsApp.
SiriKit (iOS 10+) — stary framework z predefiniowanymi domenami (wiadomości, połączenia, płatności). App Intents (iOS 16+) — nowy framework umożliwiający tworzenie niestandardowych intentów dla dowolnych działań bez ograniczenia domenami.
SiriKit obsługuje 10 domen: wiadomości (INSendMessageIntent), połączenia (INStartCallIntent), płatności (INSendPaymentIntent), notatki, przypomnienia, zdjęcia, treningi, rezerwacja podróży, funkcje samochodowe i wyszukiwanie.
Siri rozpoznaje mowę i dopasowuje ją do określonego Intent na podstawie fraz zdefiniowanych w .intentdefinition. IntentHandler wykonuje działanie i zwraca wynik. Cały proces trwa 0,5–2 sekund.
Tak, po rozpoznaniu intentu, ale przed jego wykonaniem, Siri pokazuje użytkownikowi potwierdzenie. Użytkownik może anulować wykonanie głosem («Anuluj») lub dotknięciem. Dla płatności i wiadomości potwierdzenie jest obowiązkowe.
Podsumowanie
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și