Intents Extension је iOS проширење које омогућава апликацијама трећих страна да обрађују гласовне команде Siri и да комуницирају са системским сервисима преко SiriKit-а. Апликација дефинише сопствене интенте у Intents.intentdefinition, имплементира руковаоце на основу INIntentHandler-а и региструје их за препознавање гласовних фраза. Према Apple Developer Documentation (2025), SiriKit подржава више од 20 домена интената — од порука и плаћања до тренинга и резервација, а од iOS 14 додата је подршка за прилагођене интенте путем IntentsExtension-а.
Главне тачке
Intents Extension је проширење апликације које омогућава Siri, Shortcuts-у и другим системским сервисима да позивају функционалност апликације преко стандардизованог протокола INIntentHandler. Када корисник каже „Хеј Siri, пошаљи поруку у Месинџеру X”, Siri активира одговарајуће проширење, прослеђује параметре захтева и прима резултат за изговарање.
За разлику од других типова проширења, Intents Extension ради у позадини без видљивог интерфејса — Siri сама приказује одговор гласом или текстуалном картицом. Проширење може опционо да обезбеди прилагођени интерфејс путем INUIHostedViewProviding-а, који се приказује унутар Siri пре извршења команде ради потврде.
Проширење нема приступ екрану уређаја и не може самостално да покреће радње — само као одговор на захтев од Siri или Shortcuts-а. Ово обезбеђује сигурност: корисник увек контролише које радње апликација извршава путем гласовних команди.
SiriKit је Apple-ов framework за интеграцију са Siri, представљен у iOS 10. Он дефинише домене — категорије радњи које Siri може да обрађује: поруке, телефонски позиви, плаћања, листе, подсетници, фотографије, тренинзи, резервације и друге. Сваки домен има фиксни скуп интената и одговора.
INSendMessageIntent — слање порука. INStartWorkoutIntent — почетак тренинга. INSearchForPhotosIntent — претрага фотографија. INRequestRideIntent — наручивање таксија. Сваки домен дефинише обавезне и опционе параметре које Siri извлачи из гласовног захтева. Према Apple-у, за стандардне домене није потребна датотека intentdefinition — довољно је имплементирати одговарајући handler.
За апликације које не спадају у стандардне домене, од iOS 14 појавила се могућност прилагођених интената. Апликација дефинише сопствене типове команди и њихове параметре путем Intents.intentdefinition-а, а Siri учи да препознаје одговарајуће фразе на основу примера које је обезбедио програмер.
Intents Extension се региструје кроз кључ IntentsSupported у Info.plist-у, где се наводе све класе интената које проширење обрађује. Siri користи ову листу за избор одговарајућег проширења при препознавању гласовне команде. Ако више проширења подржава исти интент, Siri нуди кориснику избор.
class MessageIntentHandler: NSObject,
INSendMessageIntentHandling {
func handle(
intent: INSendMessageIntent,
completion: @escaping
(INSendMessageIntentResponse) -> Void
) {
let response = INSendMessageIntentResponse(
code: .success, userActivity: nil)
completion(response)
}
}
INIntentHandler — протокол који дефинише методе за обраду сваке фазе рада интента: разрешавање параметара, потврда и извршење. Проширење имплементира ове методе за сваки тип интента који подржава.
resolve — провера и прецизирање параметара интента. Siri позива овај метод за сваки параметар. Ако параметар није наведен или је нетачно наведен, проширење враћа захтев за прецизирањем, а Siri поставља кориснику додатно питање. confirm — потврда намере. Проширење проверава да ли може да изврши интент у тренутном контексту. handle — стварно извршење операције и враћање резултата.
Подела на три фазе је кључна за гласовни UX: ако параметар није препознат, Siri не извршава радњу, већ преиспитује. На пример, ако је корисник рекао „Пошаљи поруку Алексеју”, али у контактима постоје три Алексеја — проширење враћа resolve са захтевом за прецизирањем, а Siri пита „Ком Алексеју?”.
INIntentResponse — објекат који проширење враћа у completion након извршења интента. Response садржи код резултата (success, failure, requiresAuthentication, inProgress) и опционе податке за изговарање Siri. Код одређује како ће Siri реаговати: success — гласовна потврда, failure — порука о грешци, inProgress — индикација дуготрајне операције.
func resolve(
for intent: INSendMessageIntent,
with completion: @escaping
(INStringResolutionResult) -> Void
) {
if let text = intent.content, !text.isEmpty {
completion(.success(with: text))
} else {
completion(.needsValue())
}
}
Од iOS 14, програмери су добили могућност да дефинишу сопствене интенте изван стандардних домена SiriKit-а. Прилагођени интенти се описују у датотеци Intents.intentdefinition — то је визуелни уређивач унутар Xcode-а где се креирају нови типови команди са параметрима и одговорима.
Сваки прилагођени интент се састоји од INIntent (дефиниција захтева) и INIntentResponse (дефиниција одговора). INIntent садржи параметре са типом података — String, Integer, CurrencyAmount, пронађене објекте и друге. INIntentResponse садржи својства за враћање резултата и низ кодова одговора. Xcode аутоматски генерише Swift класе на основу ове дефиниције.
Apple препоручује да прилагођени интент садржи не више од 5 параметара — прекомеран број погоршава препознавање гласа и компликује корисничко искуство. За сваки параметар пожељно је обезбедити примере фраза у Assistant Dialog-у како би Siri научила да их правилно препознаје.
У Intents.intentdefinition-у за сваки интент могу се навести примери реченица — фразе које ће корисник изговорити Siri да би активирао интент. Примери: „Наручи кафу у МојојАпликацији”, „Замоли МојуАпликацију да пронађе рецепт за пицу”. Siri користи ове фразе за учење препознавања и нуди их кориснику при подешавању Shortcuts-а.
// Intents.intentdefinition (визуелни уређивач)
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 — протокол који омогућава Intents Extension-у да прикаже прилагођени интерфејс унутар Siri пре извршења команде. На пример, при наручивању таксија, проширење може да прикаже мапу са рутом и ценом, а корисник потврђује радњу додиром.
Протокол дефинише метод configure(with:for:completion:), где проширење прима интент и враћа UIViewController који ће бити уграђен у Siri. Величина контролера је ограничена — максимална висина 200 тачака. Препоручује се коришћење компактних картица са кључним информацијама: износ, време, адреса.
Прилагођени интерфејс је опциони — ако проширење не имплементира INUIHostedViewProviding, Siri приказује стандардну картицу са типом интента и апликацијом. За већину интената стандардни UI је довољан, а Apple препоручује додавање прилагођеног интерфејса само када заиста побољшава разумевање — на пример, за приказ руте или потврду плаћања.
За интенте повезане са финансијама или личним подацима потребна је аутентификација. INIntentResponse подржава код requiresAuthentication, који приморава Siri да затражи Face ID или Touch ID пре извршења. Након аутентификације, проширење добија потврду кроз засебан позив handle-а, где се проверава статус аутентификације.
Apple посебно наглашава: Intents Extension не треба да захтева сопствену лозинку или биометрију — користи се системска аутентификација. Чување токена приступа у Keychain-у са заједничким приступом између апликације и проширења је стандардна пракса за дуготрајне сесије.
class IntentViewController: UIViewController {
func configure(
with intent: INIntent,
completion: @escaping
(UIViewController?) -> Void
) {
let cardView = ConfirmationCardView()
let hostingController =
UIHostingController(rootView: cardView)
completion(hostingController)
}
}
Често постављана питања
Да, проширење може да обрађује интенте из апликације Shortcuts без гласовног уноса. Корисник креира пречицу од предложених радњи, а проширење је извршава без учешћа Siri.
Прилагођени интенти су доступни од iOS 14 и новијих. За iOS 10–13 доступни су само стандардни домени SiriKit-а. Прилагођени интенти захтевају Intents.intentdefinition и генерисање Swift класа.
Siri очекује одговор од проширења око 15 секунди. При прекорачењу лимита, Siri обавештава корисника да радња није успела. За дуготрајне операције користите код одговора inProgress.
Користите Keychain са заједничким приступом путем access group-а између главне апликације и проширења. App Group shared UserDefaults је алтернатива, али је инфериорна у односу на Keychain у погледу сигурности.
Intents Extension обрађује логику — resolve, confirm, handle. Intents UI Extension обезбеђује прилагођени интерфејс за приказ унутар Siri путем INUIHostedViewProviding-а. Оба могу да раде заједно.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође