Today Widget: шта је то, врсте и креирање виџета обавештења

Аутор: IT Sectr Објављено: 2026-06-15 Време читања: 10 мин

Today Widget је iOS проширење које приказује интерактивне информације директно у Центру за обавештења или на екрану „Данас”. Корисник види актуелне податке — време, курс валута, календар — без отварања главне апликације. Према подацима Apple WWDC (2025), употреба WidgetKit-а је порасла за 40% након увођења интерактивних виџета у iOS 17. Today Widget решава проблем брзог приступа информацијама: поглед на екран — и корисник добија потребне податке без навигације кроз апликацију.

Главно

  • Today Widget — iOS проширење за приказ информација у Центру за обавештења.
  • WidgetKit — савремени оквир за креирање виџета (iOS 14+).
  • NCWidgetProviding — протокол за Notification Center проширења (iOS 8–13).
  • Auto Layout — прилагођавање виџета различитим величинама екрана.
  • Timeline Provider — механизам ажурирања података у WidgetKit-у.

Шта је Today Widget

Today Widget (такође познат као виџет Центра за обавештења) — елемент iOS интерфејса који приказује сажете информације из апликације без њеног покретања. Корисник види виџет превлачењем екрана улево на закључаном екрану или на главном екрану. Виџет може приказивати динамичке податке — курс валута, најновије вести, статус задатака, стање уређаја.

Историјски, Today Widget се појавио у iOS 8 као проширење Центра за обавештења, имплементирано кроз оквир Notification Center. Са iOS 14 Apple је представио WidgetKit — потпуно редизајнирану архитектуру која омогућава постављање виџета директно на радну површину. Today Widget у савременом смислу — WidgetKit виџет постављен у секцији „Данас” (секција виџета лево од првог екрана).

Зашто је потребан Today Widget

Основни циљ је скраћење времена приступа информацијама. Уместо отварања апликације, навигације кроз мени и чекања учитавања, корисник одмах види потребне податке. Према Apple (2024), апликације са виџетима показују 27% већу ангажованост корисника. Додатни сценарији: брзе радње (означи задатак као завршен), праћење (пулс, активност) и статус (пуњење батерије, обавештења).

WidgetKit против NCWidgetProviding

Програмер Today Widget-а има два приступа: савремени WidgetKit (iOS 14+) и застарело проширење NCWidgetProviding (iOS 8–13). Избор зависи од минималне подржане верзије iOS-а. WidgetKit се препоручује за нове пројекте, NCWidgetProviding — за подршку старијих уређаја.

КарактеристикаWidgetKitNCWidgetProviding
Минимални iOSiOS 14iOS 8
ПостављањеРадна површина + „Данас”Само „Данас”
ВеличинеSmall, Medium, LargeЈедна фиксна
ИнтерактивностiOS 17+ дугмад и прекидачиСамо отварање апликације
АжурирањеTimeline ProviderwidgetPerformUpdate
ЈезикSwiftUIUIKit

Када користити WidgetKit

Ако ваша апликација подржава iOS 14 и новије — користите WidgetKit. Он пружа богате могућности: више величина, конфигурацију кроз intent, редизајн са iOS 17 и дубоке линкове. SwiftUI декларативност чини код виџета компактним и читљивим. Timeline Provider аутоматски управља распоредом ажурирања узимајући у обзир потрошњу енергије.

Када користити NCWidgetProviding

Само ако је потребна подршка за iOS 9–13. NCWidgetProviding је једноставнији за имплементацију — то је обичан UIViewController са протоколом. Међутим, ограничен је: једна величина, само UIKit, без конфигурације. Apple препоручује прелазак на WidgetKit чак и за старе пројекте, користећи availability check: WidgetKit на iOS 14+, NCWidgetProviding као fallback.

Врсте Today Widget виџета

У савременом iOS-у разликују се три врсте виџета по функционалној намени. Свака врста решава свој задатак и захтева другачији приступ пројектовању података и интерфејса. Класификација помаже у избору праве архитектуре за вашу апликацију.

Информациони виџети

Приказују статичке или периодично ажуриране информације: време, датум, курс валута, статус сервера. Подаци се ажурирају према распореду кроз Timeline Provider. Корисник не интерагује са виџетом — само чита. Информациони виџети — најједноставнији за имплементацију, не захтевају обраду додирних догађаја и раде у позадини без додатних дозвола.

Интерактивни виџети

Од iOS 17 WidgetKit подржава дугмад, прекидаче и клизаче у виџетима. Корисник може извршити радњу — означити задатак, паузирати музику, упалити светло — без отварања апликације. Interactive Widgets користе App Intents за пренос радње у главну апликацију. Ограничење: само на радној површини, не у секцији „Данас” до iOS 18.

Конфигурабилни виџети

Корисник прилагођава приказане податке кроз системски интерфејс — бира град за време, рачун за финансије, категорију за вести. Имплементира се кроз Intents Extension и конфигурацију у WidgetBundle-у. Конфигурабилни виџети повећавају персонализацију и релевантност информација за сваког корисника.

Креирање WidgetKit виџета

Размотримо процес креирања Today Widget-а у SwiftUI-ју користећи WidgetKit. Виџет ће приказивати тренутни курс валуте са аутоматским ажурирањем. WidgetKit захтева три компоненте: структуру виџета, Provider са конфигурацијом и View за приказ.

swift
import WidgetKit
import SwiftUI

@main
struct CurrencyWidget: Widget {
    let kind: String = "CurrencyWidget"

    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: Provider()) { entry in
            CurrencyWidgetEntryView(entry: entry)
        }
        .configurationDisplayName("Currency Rate")
        .description("Current USD/RUB exchange rate")
        .supportedFamilies([.systemSmall, .systemMedium])
    }
}

Provider је одговоран за припрему података за приказ. Метод getTimeline креира распоред ажурирања: следеће ажурирање за 15 минута. TimelineProvider гарантује да виџет приказује ажурне податке без сталног упита ка серверу.

swift
struct Provider: TimelineProvider {
    func getSnapshot(in context: Context,
                      completion: @escaping (CurrencyEntry) -> Void) {
        let entry = CurrencyEntry(date: Date(), rate: 92.5)
        completion(entry)
    }

    func getTimeline(in context: Context,
                     completion: @escaping (Timeline<CurrencyEntry>) -> Void) {
        let rate = CurrencyService().fetchRate()
        let entry = CurrencyEntry(date: Date(), rate: rate)
        let nextUpdate = Calendar.current.date(
            byAdding: .minute, value: 15, to: Date()
        ) ?? Date()
        let timeline = Timeline(entries: [entry], policy: .after(nextUpdate))
        completion(timeline)
    }
}

Timeline Provider и ажурирање података

Timeline Provider — централни механизам WidgetKit-а за управљање подацима Today Widget-а. Уместо периодичног ажурирања тајмером (као у старом NCWidgetProviding-у), WidgetKit користи концепт timeline — низа записа са временским ознакама. Систем приказује тренутни запис до његовог истека, затим прелази на следећи или захтева нови.

Политике ажурирања

Timeline подржава три политике: .after(date) — следеће ажурирање на одређени датум; .never — виџет се не ажурира до експлицитног позива WidgetCenter.reloadAllTimelines; .atEnd — ажурирање након приказа последњег записа. За Today Widget са курсом валуте, политика .after са интервалом од 15–30 минута је оптимална. Енергетска ефикасност — кључна предност WidgetKit-а: систем групише ажурирања свих виџета у једном прозору.

WidgetCenter: програмско ажурирање

Ако су се подаци променили пре истека timeline-а (нпр. корисник је ажурирао курс у апликацији), позовите WidgetCenter.shared.reloadTimelines(ofKind: "CurrencyWidget"). Ово ће затражити нови timeline од Provider-а и ажурирати приказ. WidgetCenter такође омогућава поновно учитавање свих виџета апликације једном командом — згодно након синхронизације података.

Препоруке за дизајн виџета

Apple поставља строге захтеве за дизајн Today Widget-а: садржај мора бити читљив са даљине, без непотребних елемената и са јасном хијерархијом. Кршење препорука HIG (Human Interface Guidelines) је разлог одбијања при објављивању у App Store-у. Три принципа: glanceability, consistency и hierarchy.

Glanceability — читљивост на први поглед

Корисник проводи мање од секунде на виџету. Немојте додавати више од 3–4 елемента података. Фонт — минимум 11pt за ознаке, 17pt за вредности. Користите подебљано (Semibold) за кључне бројеве. Избегавајте скроловање — Today Widget се не скролује.

Прилагођавање величинама

WidgetKit подржава три величине: Small (170×170pt), Medium (364×170pt), Large (364×382pt). За Today Widget у секцији „Данас” Medium је најчешћи избор. Адаптивни дизајн кроз EnvironmentValues: мењајте густину информација у зависности од величине. Small — један број, Medium — број + графикон, Large — табела.

Подршка за тамну тему и Dynamic Type

Виџет мора исправно да се приказује у светлој и тамној теми без додатних радњи програмера — WidgetKit аутоматски преузима системске боје. Dynamic Type за виџете је ограничен: величина фонта је фиксна, али мора бити читљива. UIColor.label и UIColor.systemBackground — основне боје за текст и позадину у обе теме.

Често постављана питања

По чему се Today Widget разликује од обичног виџета на радној површини?

Данас је то исти WidgetKit виџет. Разлика је само у локацији: на радној површини и у секцији „Данас” (лево од првог екрана). До iOS 14, Today Widget је био засебно NCWidgetProviding проширење које је радило само у Центру за обавештења. Сада је то јединствени WidgetKit.

Колико често се ажурира Today Widget?

WidgetKit не ажурира виџете тајмером. Програмер поставља распоред кроз Timeline Provider: записи са временским ознакама. Систем гарантује ажурирање у одређено време узимајући у обзир уштеду енергије — може закаснити неколико минута. Минимални интервал — 15 минута, али Apple препоручује не чешће од 1 пута на сат.

Може ли се направити Today Widget са интерактивним дугмадима?

Да, почев од iOS 17 WidgetKit подржава дугмад, прекидаче и клизаче кроз App Intents. Интерактивни елементи раде на радној површини iPhone-а и iPad-а. У секцији „Данас” подршка се појавила у iOS 18. За iOS 16 и старије — само отварање апликације при клику на виџет.

Колико Today Widget-а може бити у једној апликацији?

Нема ограничења. Апликација може регистровати било који број виџета кроз WidgetBundle — сваки са својим типом, величином и конфигурацијом. Корисник их додаје појединачно. Препоручује се не више од 3–5 виџета како не би преоптеретили избор корисника.

Како тестирати Today Widget на симулатору?

WidgetKit је потпуно подржан у iOS Simulator-у. Покрените WidgetKit target шему у Xcode-у — виџет ће се појавити на радној површини симулатора. За проверу Timeline Provider-а користите WidgetKit Debug Profile: Xcode → Product → Profile → WidgetKit Debug. Стварно понашање проверите на физичком уређају.

Резиме

  • Today Widget — iOS проширење за приказ информација без отварања апликације.
  • WidgetKit (iOS 14+) — савремени оквир, NCWidgetProviding — застарело за старе верзије.
  • Три врсте виџета: информациони, интерактивни (iOS 17+), конфигурабилни кроз Intents.
  • Timeline Provider управља распоредом ажурирања уместо тајмера.
  • Дизајн треба да буде glanceable: минимум елемената, велики фонт, прилагођавање величинама.
  • Интерактивност кроз App Intents — дугмад и прекидачи без отварања апликације.
  • WidgetCenter.shared.reloadTimelines — програмско ажурирање при промени података.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође