
28. Apr 2025
iOSApp Intents tipy a triky: Ako urobiť aplikácie pre iOS prístupnejšie ako kedykoľvek predtým
App Intents je framework predstavený v iOS 16, ktorý uľahčuje vytváranie skratiek, automatizácií a hlasových príkazov pre Siri v našich aplikáciách. Umožňuje zlepšiť interakciu používateľov s aplikáciou bez nutnosti jej otvorenia.


🚀 Prečo používať App Intents?
- Akcie dostupné cez Siri, Spotlight a Shortcuts.
- Zjednodušené vytváranie vlastných skratiek.
- Možnosť použitia vo Widgetoch.

Otvorenie aplikácie
Pre ukážku, ako pracovať s App Intents, si implementujeme jednoduchý intent na otvorenie aplikácie. Tento intent bude možné spustiť cez Siri, Shortcuts alebo Spotlight, čím umožní používateľom rýchly prístup k aplikácii a jej kľúčovým funkcionalitám. Poďme na to!
Najskôr si spravíme vlastný intent implementovaním protokolu AppIntent.
import AppIntents
struct OpenApp: AppIntent {
static let title = LocalizedStringResource(stringLiteral: "Open app")
static let description = IntentDescription(stringLiteral: "This intent opens the app")
static let openAppWhenRun: Bool = true
func perform() async throws -> some IntentResult {
return .result()
}
}
Title je čitateľný názov intentu, ktorý sa zobrazí v aplikácii Skratky. Používame LocalizedStringResource, čo umožňuje jednoduchú lokalizáciu názvu do viacerých jazykov. Podobne ako title, aj description pomôže používateľom pochopiť, na čo tento intent slúži.
Ak chceme zabezpečiť aby sa nám aplikácia po spustení intentu naozaj otvorila, musíme nastaviť premennú openAppWhenRun
na hodnotu true
.
Nakoniec sa dostávame k samotnému srdcu nášho intentu, ktorým je funkcia perform()
. Logika v nej obsiahnutá sa vykoná po spustení intentu a vracia IntentResult
. V tomto prípade ju môžeme nechať prázdnu, pretože aplikácia sa nám otvorí, a to bol aj cieľ tejto akcie.
V tomto bode je náš intent na otváranie aplikácie viditeľný a dostupný pre používateľov v aplikácii Skratky. Odtiaľ ho môžu spúšťať, pridávať na domovskú obrazovku alebo vytvárať vlastné automatizácie.
Aby sme ešte viac sprístupnili funkcionalitu našej aplikácie – konkrétne umožnili jej zobrazenie v Spotlight vyhľadávaní a spustenie hlasovými príkazmi cez Siri – musíme intent zaregistrovať v AppShortcutsProvider
. To môžeme urobiť jednoducho nasledujúcim spôsobom:
struct ShortcutsProvider: AppShortcutsProvider {
@AppShortcutsBuilder
static var appShortcuts: [AppShortcut] {
AppShortcut(
intent: OpenApp(),
phrases: [
"Open \(.applicationName)",
"Open \(.applicationName) app",
"Launch \(.applicationName)",
"Start \(.applicationName)",
"Run \(.applicationName)",
],
shortTitle: "Opens app",
systemImageName: "square.stack"
)
}
}
Týmto spôsobom definujeme aj príklad fráz, ktoré ho spustia cez Siri. Definovaním množstva rôznych fráz umožníme širší a flexibilnejší spôsob interakcie používateľa s aplikáciou.
Vyhľadávanie v aplikácií
Veľmi užitočným príkladom je implementácia in-app search intentu. Tento je zameraný na vyhľadávanie, čo je funkcia, ktorú dnes väčšina aplikácií ponúka v rôznych formách. Po spustení takéhoto intentu si aplikácia vyžiada vstupný parameter – výraz, ktorý má byť vyhľadaný. Systém následne počká na zadanie tohto výrazu používateľom. Po jeho zadaní sa aplikácia otvorí v stave vyhľadávania, pričom už bude mať predvyplnený výraz, ktorý používateľ zadal.
Tento proces umožňuje rýchlejšie a efektívnejšie používanie funkcionality vyhľadávania v aplikácií, čím zlepšuje používateľskú skúsenosť.
struct SearchInAppIntent: ShowInAppSearchResultsIntent {
static let title = LocalizedStringResource(stringLiteral: "Search in app")
static let searchScopes: [StringSearchScope] = [.general]
@Parameter(
title: "Search term",
description: "Enter a keyword to search",
requestValueDialog: .init("What would you like to search for?")
)
var criteria: StringSearchCriteria
func perform() async throws -> some IntentResult {
await coordinator?.search(for: criteria.term)
return .result()
}
}
Interaktívne widgety
Interaktívne widgety sú skvelým nástrojom na zlepšenie používateľskej skúsenosti a zvýšenie angažovanosti v aplikáciách. Widgety umožňujú používateľom rýchly prístup k dôležitým funkciám aplikácie priamo z domovskej obrazovky, bez potreby otvárania samotnej aplikácie. Interaktívne widgety nielenže šetria čas, ale aj zvyšujú pohodlie pri každodennom používaní aplikácie, čím prispievajú k vyššej spokojnosti používateľov a ich častejšiemu zapojeniu do aplikácie.
Príklad jednoduchej implementácie počítadla môže vyzerať nasledovne:
struct CountEntry: TimelineEntry {
let date: Date
let count: Int
}
Ako prvé si vytvoríme CountryEntry (slúži ako dátový model pre widget). date je povinný parameter podľa ktorého WidgetKit určuje zobrazovanie údajov a parameter count uchováva hodnotu počítadla, ktorá sa zobrazuje vo widgete.
struct Provider: TimelineProvider {
private var actualCount: Int { SharedStorage().count() }
func placeholder(in context: Context) -> CountEntry {
CountEntry(date: Date(), count: actualCount)
}
func getSnapshot(in context: Context, completion: @escaping (CountEntry) -> ()) {
completion(CountEntry(date: Date(), count: actualCount))
}
func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
let timeline = Timeline(
entries: [CountEntry(date: Date(), count: actualCount)],
policy: .atEnd
)
completion(timeline)
}
}
TimelineProvider je zodpovedný za poskytnutie aktuálnych aj budúcich údajov, ktoré sa budú používať vo widgete.
- placeholder: Používa sa ako náhľad pri pridávaní widgetu v editore a poskytuje obsah kým sa načítajú reálne dáta.
- getSnapshot: Slúži na poskytnutie okamžitého stavu widgetu.
- getTimeLine: Táto funkcia slúži na poskytovanie dát v aktuálnom čase a ponúka možnosť dodávať dáta do budúcnosti. V tomto konkrétnom prípade nemá zmysel definovať budúce dáta, keďže používame statickú hodnotu na zobrazovanie stavu počítadla. Ak by sa hodnota menila predvídateľným spôsobom (časovač, odpočítavanie, …) mohli by sme predvídať budúce dáta a poskytnúť ich v tejto funkcii.
struct counterEntryView : View {
var entry: Provider.Entry
var body: some View {
VStack {
Text("\(entry.count)")
.font(.title)
.fontWeight(.bold)
.contentTransition(.numericText())
if #available(iOS 17.0, *) {
Button(
intent: IncrementCounterIntent(),
label: { Text("Tap me!") }
)
}
}
}
}
V poslednom kroku vytvárame UI pre widget, ktorý zobrazuje počet (stav počítadla) a obsahuje aj interaktívne tlačidlo (minimálna iOS verzia je 17.0). Takéto tlačidlo je schopné spúšťať akciu, ktorú si definujeme ako App Intent. Daná akcia a logika implementovaná za ňou sa spúšťa a vykonáva bez potreby otvorenia aplikácie.
Implementácia akcie IncementCounterIntent()
je jednoduchá a jej jediná úloha je inkrementovať počítadlo uložené v lokálnej pamäti zariadenia.
struct IncrementCounterIntent: AppIntent {
static var title: LocalizedStringResource { "Counter title" }
static var description: IntentDescription { "Counter description" }
func perform() async throws -> some IntentResult {
SharedStorage().increment()
return .result()
}
}
Ovládacie centrum
Control widgety sú výkonným nástrojom, ktorý umožňuje používateľom jednoducho ovládať rôzne funkcie aplikácie priamo z ovládacieho centra alebo dokonca aj z uzamknutej obrazovky.
@available(iOSApplicationExtension 18.0, *)
struct OpenAppControl: ControlWidget {
let kind: String = "openAppControl"
var body: some ControlWidgetConfiguration {
StaticControlConfiguration(
kind: kind,
content: {
ControlWidgetButton(
action: OpenApp(),
label: { Label("Open App", systemImage: "square.stack") }
)
}
)
}
}
Control widgety sú dostupné len od verzii iOS-u 18 a vyššie. kind
je jedinečný identifikátor tohto control widgetu. Samotné telo widgetu obsahuje konfiguráciu so statickým obsahom - v tomto prípade tlačidlo, ktoré vykoná akciu (intent) OpenApp()
, ktorú sme si už implementovali vyššie.
Takto implementovaný Control widget nám umožňuje jednoducho pridať akciu do ovládacieho centra alebo priamo na uzamknutú obrazovku. Tento prístup zvyšuje komfort a efektivitu, pretože umožňuje vykonávanie akcií priamo z ovládacieho centra alebo uzamknutej obrazovky.
✅ Zhrnutie
App Intents sú silným nástrojom na integráciu aplikácií so Siri, Shortcuts a Spotlight. Ich implementácia je jednoduchá a poskytuje intuitívne ovládanie aplikácií hlasom či automatizáciami. Ak chceš zlepšiť užívateľský zážitok vo svojej aplikácii, App Intents sú rozhodne cesta, ktorou sa oplatí vydať!
Ste zvedaví, ako tieto funkcie zlepšujú obchodné výsledky? Prečítajte si viac na našom business blogu!


Ďalšie články

App Intents: Ako sprístupniť vašu aplikáciu pomocou Siri, Spotlight a Widgetov


Ako vytvoriť úspešnú aplikáciu pre iOS s využitím prehliadaných funkcií iOS


Odstránenie bariér: Ako sprístupniť vašu aplikáciu pre každého
