Intents Extension je rozšíření iOS, které umožňuje aplikacím třetích stran zpracovávat hlasové příkazy Siri a komunikovat se systémovými službami prostřednictvím SiriKit. Aplikace definuje vlastní intenty v Intents.intentdefinition, implementuje obslužné rutiny založené na INIntentHandler a registruje je pro rozpoznávání hlasových frází. Podle Apple Developer Documentation (2025) podporuje SiriKit více než 20 domén intentů — od zpráv a plateb po tréninky a rezervace, a od iOS 14 byla přidána podpora vlastních intentů prostřednictvím IntentsExtension.
Hlavní body
Intents Extension je rozšíření aplikace, které umožňuje Siri, Shortcuts a dalším systémovým službám volat funkcionalitu aplikace prostřednictvím standardizovaného protokolu INIntentHandler. Když uživatel řekne „Hey Siri, pošli zprávu v Messengeru X”, Siri aktivuje příslušné rozšíření, předá parametry požadavku a obdrží výsledek k vyslovení.
Na rozdíl od jiných typů rozšíření pracuje Intents Extension na pozadí bez viditelného rozhraní — Siri sama zobrazí odpověď hlasem nebo textovou kartou. Rozšíření může volitelně poskytnout vlastní rozhraní prostřednictvím INUIHostedViewProviding, které se zobrazí uvnitř Siri před provedením příkazu k potvrzení.
Rozšíření nemá přístup k obrazovce zařízení a nemůže iniciovat akce samostatně — pouze jako odpověď na požadavek od Siri nebo Shortcuts. To zajišťuje bezpečnost: uživatel má vždy kontrolu nad tím, jaké akce aplikace provádí prostřednictvím hlasových příkazů.
SiriKit je framework Apple pro integraci se Siri, představený v iOS 10. Definuje domény — kategorie akcí, které Siri může zpracovávat: zprávy, telefonní hovory, platby, seznamy, připomínky, fotografie, tréninky, rezervace a další. Každá doména má pevnou sadu intentů a odpovědí.
INSendMessageIntent — odesílání zpráv. INStartWorkoutIntent — zahájení tréninku. INSearchForPhotosIntent — vyhledávání fotografií. INRequestRideIntent — objednání taxi. Každá doména definuje povinné a volitelné parametry, které Siri extrahuje z hlasového požadavku. Podle Apple pro standardní domény není vyžadován soubor intentdefinition — stačí implementovat příslušný handler.
Pro aplikace, které nespadají do standardních domén, se od iOS 14 objevila možnost vlastních intentů. Aplikace definuje vlastní typy příkazů a jejich parametry prostřednictvím Intents.intentdefinition a Siri se učí rozpoznávat odpovídající fráze na základě příkladů poskytnutých vývojářem.
Intents Extension se registruje pomocí klíče IntentsSupported v Info.plist, kde jsou uvedeny všechny třídy intentů, které rozšíření zpracovává. Siri používá tento seznam k výběru vhodného rozšíření při rozpoznávání hlasového příkazu. Pokud několik rozšíření podporuje stejný intent, Siri nabídne uživateli výběr.
class MessageIntentHandler: NSObject,
INSendMessageIntentHandling {
func handle(
intent: INSendMessageIntent,
completion: @escaping
(INSendMessageIntentResponse) -> Void
) {
let response = INSendMessageIntentResponse(
code: .success, userActivity: nil)
completion(response)
}
}
INIntentHandler — protokol, který definuje metody pro zpracování každé fáze práce intentu: rozlišení parametrů, potvrzení a provedení. Rozšíření implementuje tyto metody pro každý typ intentu, který podporuje.
resolve — kontrola a upřesnění parametrů intentu. Siri volá tuto metodu pro každý parametr. Pokud parametr není zadán nebo je nesprávný, rozšíření vrátí požadavek na upřesnění a Siri položí uživateli dodatečnou otázku. confirm — potvrzení záměru. Rozšíření zkontroluje, zda může intent provést v aktuálním kontextu. handle — skutečné provedení operace a vrácení výsledku.
Rozdělení do tří fází je kritické pro hlasové UX: pokud parametr není rozpoznán, Siri akci neprovede, ale zeptá se znovu. Například, pokud uživatel řekl „Pošli zprávu Alexejovi”, ale v kontaktech jsou tři Alexejové — rozšíření vrátí resolve s požadavkem na upřesnění a Siri se zeptá „Kterému Alexejovi?”.
INIntentResponse — objekt, který rozšíření vrátí v completion po provedení intentu. Response obsahuje kód výsledku (success, failure, requiresAuthentication, inProgress) a volitelné údaje k vyslovení Siri. Kód určuje, jak Siri zareaguje: success — hlasové potvrzení, failure — chybová zpráva, inProgress — indikace dlouhotrvající operace.
func resolve(
for intent: INSendMessageIntent,
with completion: @escaping
(INStringResolutionResult) -> Void
) {
if let text = intent.content, !text.isEmpty {
completion(.success(with: text))
} else {
completion(.needsValue())
}
}
Od iOS 14 získali vývojáři možnost definovat vlastní intenty mimo standardní domény SiriKit. Vlastní intenty se popisují v souboru Intents.intentdefinition — jedná se o vizuální editor uvnitř Xcode, kde se vytvářejí nové typy příkazů s parametry a odpověďmi.
Každý vlastní intent se skládá z INIntent (definice požadavku) a INIntentResponse (definice odpovědi). INIntent obsahuje parametry s datovým typem — String, Integer, CurrencyAmount, nalezené objekty a další. INIntentResponse obsahuje vlastnosti pro vrácení výsledku a pole kódů odpovědí. Xcode automaticky generuje Swift třídy na základě této definice.
Apple doporučuje, aby vlastní intent neobsahoval více než 5 parametrů — nadměrný počet zhoršuje rozpoznávání řeči a komplikuje uživatelský zážitek. Pro každý parametr je vhodné poskytnout příklady frází v Assistant Dialog, aby se Siri naučila je správně rozpoznávat.
V Intents.intentdefinition lze pro každý intent zadat příklady vět — fráze, které uživatel řekne Siri pro aktivaci intentu. Příklady: „Objednej kávu v MojiAplikaci”, „Požádej MojíAplikaci o nalezení receptu na pizzu”. Siri používá tyto fráze pro učení rozpoznávání a nabízí je uživateli při nastavování Shortcuts.
// Intents.intentdefinition (vizuální editor)
Intent: OrderCoffeeIntent
Parameters:
- beverage (String)
- size (String)
- quantity (Integer)
Response:
- orderNumber (String)
- price (CurrencyAmount)
Phrases:
- "Order coffee in MyApp"
- "Get a latte from MyApp"
INUIHostedViewProviding — protokol, který umožňuje Intents Extension zobrazit vlastní rozhraní uvnitř Siri před provedením příkazu. Například při objednávání taxi může rozšíření zobrazit mapu s trasou a cenou a uživatel potvrdí akci dotykem.
Protokol definuje metodu configure(with:for:completion:), kde rozšíření obdrží intent a vrátí UIViewController, který bude vložen do Siri. Velikost controlleru je omezená — maximální výška 200 bodů. Doporučuje se používat kompaktní karty s klíčovými informacemi: částka, čas, adresa.
Vlastní rozhraní je volitelné — pokud rozšíření neimplementuje INUIHostedViewProviding, Siri zobrazí standardní kartu s typem intentu a aplikací. Pro většinu intentů je standardní UI dostačující a Apple doporučuje přidávat vlastní rozhraní pouze tehdy, když skutečně zlepšuje porozumění — například pro zobrazení trasy nebo potvrzení platby.
Pro intenty související s financemi nebo osobními údaji je vyžadována autentizace. INIntentResponse podporuje kód requiresAuthentication, který nutí Siri požádat o Face ID nebo Touch ID před provedením. Po autentizaci obdrží rozšíření potvrzení prostřednictvím samostatného volání handle, kde se kontroluje stav autentizace.
Apple zvláště zdůrazňuje: Intents Extension by neměl vyžadovat vlastní heslo nebo biometrii — používá se systémová autentizace. Ukládání přístupových tokenů v Keychain se sdíleným přístupem mezi aplikací a rozšířením je standardní praxí pro dlouhodobé relace.
class IntentViewController: UIViewController {
func configure(
with intent: INIntent,
completion: @escaping
(UIViewController?) -> Void
) {
let cardView = ConfirmationCardView()
let hostingController =
UIHostingController(rootView: cardView)
completion(hostingController)
}
}
Často kladené otázky
Ano, rozšíření může zpracovávat intenty z aplikace Shortcuts bez hlasového vstupu. Uživatel vytvoří zkratku z navržených akcí a rozšíření ji provede bez účasti Siri.
Vlastní intenty jsou k dispozici od iOS 14 a novějších. Pro iOS 10–13 jsou k dispozici pouze standardní domény SiriKit. Vlastní intenty vyžadují Intents.intentdefinition a generování Swift tříd.
Siri očekává odpověď od rozšíření přibližně 15 sekund. Při překročení limitu Siri informuje uživatele, že akci nelze provést. Pro dlouhotrvající operace použijte kód odpovědi inProgress.
Použijte Keychain se sdíleným přístupem přes access group mezi hlavní aplikací a rozšířením. App Group shared UserDefaults je alternativa, ale z hlediska bezpečnosti zaostává za Keychain.
Intents Extension zpracovává logiku — resolve, confirm, handle. Intents UI Extension poskytuje vlastní rozhraní pro zobrazení uvnitř Siri prostřednictvím INUIHostedViewProviding. Oba mohou pracovat společně.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také