Today Widget: какво е, видове и създаване на известия widget

Автор: IT Sectr Публикувано: 2026-06-15 Време за четене: 10 мин

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

Основни точки

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

Какво е Today Widget

Today Widget (известен още като widget на Центъра за известия) — елемент от интерфейса на iOS, който показва сбита информация от приложението, без да го стартира. Потребителят вижда widget-а, като плъзга екрана наляво на заключения екран или на началния екран. Widget-ът може да показва динамични данни — валутен курс, последни новини, статус на задачи, състояние на устройството.

Исторически, Today Widget се появи в iOS 8 като разширение на Центъра за известия, имплементирано чрез рамката Notification Center. С iOS 14 Apple представи WidgetKit — напълно преработена архитектура, която позволява поставяне на widget-и директно на работния плот. Today Widget в съвременния смисъл — WidgetKit widget, поставен в секцията „Днес” (секцията за widget-и вляво от първия екран).

Защо е необходим Today Widget

Основната цел е намаляване на времето за достъп до информация. Вместо да отваря приложението, да навигира в менюто и да чака зареждане, потребителят веднага вижда необходимите данни. Според Apple (2024), приложенията с widget-и показват 27% по-висока ангажираност на потребителите. Допълнителни сценарии: бързи действия (отбелязване на задача като завършена), мониторинг (пулс, активност) и състояние (зареждане на батерията, известия).

WidgetKit срещу NCWidgetProviding

Разработчикът на Today Widget има два подхода: модерен WidgetKit (iOS 14+) и legacy разширението 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 прави кода на widget-а компактен и четим. Timeline Provider автоматично управлява графика за обновяване, като взема предвид консумацията на енергия.

Кога да използваме NCWidgetProviding

Само ако се изисква поддръжка за iOS 9–13. NCWidgetProviding е по-лесен за имплементиране — това е обикновен UIViewController с протокол. Той обаче е ограничен: един размер, само UIKit, без конфигурация. Apple препоръчва преминаване към WidgetKit дори за стари проекти, използвайки availability check: WidgetKit на iOS 14+, NCWidgetProviding като fallback.

Видове Today Widget-и

В съвременния iOS се различават три вида widget-и според функционалното предназначение. Всеки вид решава своя задача и изисква различен подход към проектирането на данни и интерфейс. Класификацията помага да изберете правилната архитектура за вашето приложение.

Информационни widget-и

Показват статична или периодично обновявана информация: време, дата, валутен курс, статус на сървъра. Данните се обновяват по график чрез Timeline Provider. Потребителят не взаимодейства с widget-а — само чете. Информационните widget-и са най-лесни за имплементиране, не изискват обработка на докосвания и работят на заден план без допълнителни разрешения.

Интерактивни widget-и

От iOS 17 WidgetKit поддържа бутони, превключватели и плъзгачи в widget-ите. Потребителят може да извърши действие — да отбележи задача, да постави музика на пауза, да включи светлина — без да отваря приложението. Interactive Widgets използват App Intents за предаване на действието към основното приложение. Ограничение: само на работния плот, не в секцията „Днес” до iOS 18.

Конфигурируеми widget-и

Потребителят персонализира показваните данни чрез системния интерфейс — избира град за времето, сметка за финансите, категория за новините. Имплементира се чрез Intents Extension и конфигурация в WidgetBundle. Конфигурируемите widget-и повишават персонализацията и релевантността на информацията за всеки потребител.

Създаване на WidgetKit widget

Нека разгледаме процеса на създаване на Today Widget в SwiftUI с помощта на WidgetKit. Widget-ът ще показва текущия валутен курс с автоматично обновяване. WidgetKit изисква три компонента: структура на widget-а, 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 гарантира, че widget-ът показва актуални данни без постоянно запитване към сървъра.

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 — widget-ът не се обновява до изрично извикване на WidgetCenter.reloadAllTimelines; .atEnd — обновяване след показване на последния запис. За Today Widget с валутен курс, политиката .after с интервал от 15–30 минути е оптимална. Енергийна ефективност — ключово предимство на WidgetKit: системата групира обновяванията на всички widget-и в един прозорец.

WidgetCenter: програмно обновяване

Ако данните се променят преди изтичането на timeline (напр. потребителят е обновил валутния курс в приложението), извикайте WidgetCenter.shared.reloadTimelines(ofKind: "CurrencyWidget"). Това ще изиска нов timeline от Provider-а и ще обнови показването. WidgetCenter също така позволява презареждане на всички widget-и на приложението с една команда — удобно след синхронизиране на данни.

Препоръки за дизайн на widget-и

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

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

Потребителят прекарва по-малко от секунда на widget-а. Не добавяйте повече от 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

Widget-ът трябва да се показва правилно в светла и тъмна тема без допълнителни действия от разработчика — WidgetKit автоматично поема системните цветове. Dynamic Type за widget-и е ограничен: размерът на шрифта е фиксиран, но трябва да бъде четлив. UIColor.label и UIColor.systemBackground — основни цветове за текст и фон в двете теми.

Често задавани въпроси

С какво Today Widget се различава от обикновения widget на работния плот?

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

Колко често се обновява Today Widget?

WidgetKit не обновява widget-и с таймер. Разработчикът задава график чрез Timeline Provider: записи с времеви маркери. Системата гарантира обновяване в определеното време, като взема предвид пестенето на енергия — може да забави с няколко минути. Минимален интервал — 15 минути, но Apple препоръчва не по-често от 1 път на час.

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

Да, от iOS 17 WidgetKit поддържа бутони, превключватели и плъзгачи чрез App Intents. Интерактивните елементи работят на работния плот на iPhone и iPad. В секцията „Днес” поддръжката се появи в iOS 18. За iOS 16 и по-стари — само отваряне на приложението при докосване на widget-а.

Колко Today Widget-а може да има в едно приложение?

Няма ограничения. Приложението може да регистрира произволен брой widget-и чрез WidgetBundle — всеки със собствен тип, размер и конфигурация. Потребителят ги добавя поотделно. Препоръчва се не повече от 3–5 widget-а, за да не се претоварва изборът на потребителя.

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

WidgetKit се поддържа напълно в iOS Simulator. Стартирайте WidgetKit target схемата в Xcode — widget-ът ще се появи на работния плот на симулатора. За проверка на Timeline Provider използвайте WidgetKit Debug Profile: Xcode → Product → Profile → WidgetKit Debug. Проверете реалното поведение на физическо устройство.

Обобщение

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

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също