Intents Extension egy iOS-bővítmény, amely lehetővé teszi harmadik féltől származó alkalmazások számára a Siri hangutasítások feldolgozását és a rendszerszolgáltatásokkal való interakciót a SiriKit segítségével. Az alkalmazás saját intenteket definiál az Intents.intentdefinition fájlban, implementálja a kezelőket az INIntentHandler alapján, és regisztrálja azokat a hangutasítások felismeréséhez. Az Apple Developer Documentation (2025) szerint a SiriKit több mint 20 intent domaint támogat — az üzenetektől és fizetésektől az edzésekig és foglalásokig, az iOS 14-től pedig hozzáadásra került az egyedi intentek támogatása az IntentsExtensionen keresztül.
Főbb pontok
Intents Extension egy alkalmazásbővítmény, amely lehetővé teszi a Siri, a Shortcuts és más rendszerszolgáltatások számára, hogy a szabványosított INIntentHandler protokollon keresztül meghívják az alkalmazás funkcióit. Amikor a felhasználó azt mondja: „Hé Siri, küldj üzenetet az X Üzenetküldőben”, a Siri aktiválja a megfelelő bővítményt, továbbítja a kérés paramétereit, és megkapja az eredményt a kimondáshoz.
Más bővítménytípusokkal ellentétben az Intents Extension a háttérben működik látható felület nélkül — a Siri maga jeleníti meg a választ hanggal vagy szöveges kártyával. A bővítmény opcionálisan egyedi felületet biztosíthat az INUIHostedViewProviding segítségével, amely a Siri-n belül jelenik meg a parancs végrehajtása előtt a megerősítéshez.
A bővítmény nem fér hozzá a készülék képernyőjéhez, és nem kezdeményezhet önállóan műveleteket — csak a Siri vagy a Shortcuts kérésére válaszolva. Ez biztosítja a biztonságot: a felhasználó mindig ellenőrzi, hogy az alkalmazás milyen műveleteket hajt végre hangutasításokon keresztül.
SiriKit az Apple keretrendszere a Siri-vel való integrációhoz, amely az iOS 10-ben került bevezetésre. Meghatározza a domaine-okat — a Siri által feldolgozható műveletek kategóriáit: üzenetek, telefonhívások, fizetések, listák, emlékeztetők, fényképek, edzések, foglalások és mások. Minden domainnek fix intent- és válaszkészlete van.
INSendMessageIntent — üzenetek küldése. INStartWorkoutIntent — edzés kezdése. INSearchForPhotosIntent — fényképek keresése. INRequestRideIntent — taxi rendelése. Minden domain meghatározza a kötelező és opcionális paramétereket, amelyeket a Siri kinyer a hangutasításból. Az Apple szerint a szabványos domaine-okhoz nem szükséges intentdefinition fájl — elegendő a megfelelő handler implementálása.
A szabványos domaine-okba nem tartozó alkalmazások számára az iOS 14-től lehetőség nyílt egyedi intentek létrehozására. Az alkalmazás saját parancstípusokat és azok paramétereit definiálja az Intents.intentdefinition segítségével, a Siri pedig megtanulja felismerni a megfelelő kifejezéseket a fejlesztő által biztosított példák alapján.
Az Intents Extension az Info.plist-ben található IntentsSupported kulcson keresztül regisztrálódik, ahol felsorolásra kerül az összes intent osztály, amelyet a bővítmény feldolgoz. A Siri ezt a listát használja a megfelelő bővítmény kiválasztásához egy hangutasítás felismerésekor. Ha több bővítmény támogatja ugyanazt az intentet, a Siri választási lehetőséget kínál a felhasználónak.
class MessageIntentHandler: NSObject,
INSendMessageIntentHandling {
func handle(
intent: INSendMessageIntent,
completion: @escaping
(INSendMessageIntentResponse) -> Void
) {
let response = INSendMessageIntentResponse(
code: .success, userActivity: nil)
completion(response)
}
}
INIntentHandler — a protokoll, amely metódusokat határoz meg az intent munka egyes szakaszainak feldolgozásához: paraméterek feloldása, megerősítés és végrehajtás. A bővítmény implementálja ezeket a metódusokat minden általa támogatott intent típushoz.
resolve — az intent paramétereinek ellenőrzése és pontosítása. A Siri ezt a metódust hívja meg minden paraméterhez. Ha egy paraméter nincs megadva vagy hibás, a bővítmény pontosítási kérelmet küld vissza, és a Siri további kérdést tesz fel a felhasználónak. confirm — a szándék megerősítése. A bővítmény ellenőrzi, hogy végre tudja-e hajtani az intentet az aktuális kontextusban. handle — a művelet tényleges végrehajtása és az eredmény visszaadása.
A három szakaszra bontás kritikus a hangalapú UX szempontjából: ha egy paraméter nem kerül felismerésre, a Siri nem hajtja végre a műveletet, hanem visszakérdez. Például, ha a felhasználó azt mondta: „Küldj üzenetet Alekszejnek”, de három Alekszej van a névjegyzékben — a bővítmény resolve-ot küld vissza pontosítási kérelemmel, és a Siri megkérdezi: „Melyik Alekszejnek?”.
INIntentResponse — az objektum, amelyet a bővítmény a completion-ben ad vissza az intent végrehajtása után. A Response tartalmazza az eredménykódot (success, failure, requiresAuthentication, inProgress) és opcionális adatokat a Siri általi kimondáshoz. A kód határozza meg, hogyan reagál a Siri: success — hangalapú megerősítés, failure — hibaüzenet, inProgress — hosszú ideig tartó művelet jelzése.
func resolve(
for intent: INSendMessageIntent,
with completion: @escaping
(INStringResolutionResult) -> Void
) {
if let text = intent.content, !text.isEmpty {
completion(.success(with: text))
} else {
completion(.needsValue())
}
}
Az iOS 14-től kezdve a fejlesztők lehetőséget kaptak saját intentek meghatározására a SiriKit szabványos domainjein kívül. Az egyedi intentek az Intents.intentdefinition fájlban kerülnek leírásra — ez egy vizuális szerkesztő az Xcode-on belül, ahol új parancstípusok hozhatók létre paraméterekkel és válaszokkal.
Minden egyedi intent INIntent-ből (a kérés meghatározása) és INIntentResponse-ból (a válasz meghatározása) áll. Az INIntent paramétereket tartalmaz adattípusokkal — String, Integer, CurrencyAmount, megtalált objektumok és mások. Az INIntentResponse tulajdonságokat tartalmaz az eredmény visszaadásához és a válaszkódok tömbjét. Az Xcode automatikusan generál Swift osztályokat e meghatározás alapján.
Az Apple azt javasolja, hogy egy egyedi intent ne tartalmazzon 5 paraméternél többet — a túlzott szám rontja a hangfelismerést és bonyolítja a felhasználói élményt. Minden paraméterhez érdemes példamondatokat megadni az Assistant Dialog-ban, hogy a Siri megtanulja azokat helyesen felismerni.
Az Intents.intentdefinition fájlban minden intenthez megadhatók példamondatok — kifejezések, amelyeket a felhasználó a Siri-nek mond az intent aktiválásához. Példák: „Rendelj kávét a SajátAlkalmazásomban”, „Kérd meg a SajátAlkalmazásomat, hogy találjon egy pizza receptet”. A Siri ezeket a kifejezéseket használja a felismerés tanulásához, és felkínálja azokat a felhasználónak a Shortcuts beállításakor.
// Intents.intentdefinition (vizuális szerkesztő)
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 — a protokoll, amely lehetővé teszi az Intents Extension számára, hogy egyedi felületet jelenítsen meg a Siri-n belül a parancs végrehajtása előtt. Például taxi rendelésekor a bővítmény megjeleníthet egy térképet az útvonallal és költséggel, a felhasználó pedig érintéssel erősíti meg a műveletet.
A protokoll meghatározza a configure(with:for:completion:) metódust, ahol a bővítmény megkapja az intentet és visszaad egy UIViewController-t, amely beágyazásra kerül a Siri-be. A vezérlő mérete korlátozott — maximális magasság 200 pont. Javasolt kompakt kártyák használata kulcsinformációkkal: összeg, idő, cím.
Az egyedi felület opcionális — ha a bővítmény nem implementálja az INUIHostedViewProviding-et, a Siri egy szabványos kártyát jelenít meg az intent típusával és az alkalmazással. A legtöbb intent esetében a szabványos UI elegendő, és az Apple csak akkor javasol egyedi felület hozzáadását, ha az valóban javítja a megértést — például útvonal megjelenítéséhez vagy fizetés megerősítéséhez.
A pénzügyekkel vagy személyes adatokkal kapcsolatos intentekhez hitelesítés szükséges. Az INIntentResponse támogatja a requiresAuthentication kódot, amely arra kényszeríti a Siri-t, hogy Face ID vagy Touch ID kérést indítson a végrehajtás előtt. A hitelesítés után a bővítmény megerősítést kap egy külön handle híváson keresztül, ahol a hitelesítés állapota ellenőrzésre kerül.
Az Apple külön hangsúlyozza: az Intents Extension nem kérhet saját jelszót vagy biometrikus adatokat — rendszerhitelesítést kell használni. A hozzáférési tokenek Keychain-ben való tárolása megosztott hozzáféréssel az alkalmazás és a bővítmény között a szokásos gyakorlat a hosszú élettartamú munkamenetekhez.
class IntentViewController: UIViewController {
func configure(
with intent: INIntent,
completion: @escaping
(UIViewController?) -> Void
) {
let cardView = ConfirmationCardView()
let hostingController =
UIHostingController(rootView: cardView)
completion(hostingController)
}
}
Gyakran Ismételt Kérdések
Igen, a bővítmény feldolgozhat intenteket a Shortcuts alkalmazásból hangbemenet nélkül. A felhasználó létrehoz egy gyorsparancsot a javasolt műveletekből, és a bővítmény végrehajtja azt a Siri részvétele nélkül.
Egyedi intentek az iOS 14-től és újabb verzióktól érhetők el. Az iOS 10–13 esetében csak a szabványos SiriKit domaine-ok állnak rendelkezésre. Az egyedi intentek Intents.intentdefinition-t és Swift osztályok generálását igénylik.
A Siri körülbelül 15 másodpercig vár a bővítmény válaszára. A határ túllépése esetén a Siri tájékoztatja a felhasználót, hogy a művelet nem sikerült. Hosszú ideig tartó műveletekhez használja az inProgress válaszkódot.
Használja a Keychain-t megosztott hozzáféréssel egy access group-on keresztül a fő alkalmazás és a bővítmény között. Az App Group shared UserDefaults alternatíva, de biztonság szempontjából elmarad a Keychain-től.
Intents Extension feldolgozza a logikát — resolve, confirm, handle. Intents UI Extension egyedi felületet biztosít a Siri-n belüli megjelenítéshez az INUIHostedViewProviding segítségével. Mindkettő együtt is működhet.
Összegzés
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is