Today Widget: چیست، انواع و ساخت ویجت اعلانات

نویسنده: IT Sectr منتشر شده: 2026-06-15 زمان مطالعه: 10 دقیقه

Today Widget یک افزونه iOS است که اطلاعات تعاملی را مستقیماً در مرکز اعلانات یا صفحه «امروز» نمایش می‌دهد. کاربر داده‌های به‌روز را می‌بیند — آب‌وهوا، نرخ ارز، تقویم — بدون باز کردن برنامه اصلی. طبق داده‌های Apple WWDC (2025)، استفاده از WidgetKit پس از معرفی ویجت‌های تعاملی در iOS 17، 40% افزایش یافته است. Today Widget مشکل دسترسی سریع به اطلاعات را حل می‌کند: یک نگاه به صفحه — و کاربر بدون پیمایش در برنامه، داده‌های مورد نیاز را دریافت می‌کند.

نکات اصلی

  • Today Widget — افزونه iOS برای نمایش اطلاعات در مرکز اعلانات.
  • WidgetKit — فریم‌ورک مدرن برای ساخت ویجت‌ها (iOS 14+).
  • NCWidgetProviding — پروتکل برای افزونه‌های مرکز اعلانات (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 حتی برای پروژه‌های قدیمی توصیه می‌کند با استفاده از availability check به WidgetKit مهاجرت کنید: 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 پشتیبانی می‌شود. طرح target WidgetKit را در Xcode اجرا کنید — ویجت روی صفحه اصلی شبیه‌ساز ظاهر می‌شود. برای بررسی Timeline Provider از WidgetKit Debug Profile استفاده کنید: Xcode → Product → Profile → WidgetKit Debug. رفتار واقعی را روی دستگاه فیزیکی بررسی کنید.

خلاصه

  • Today Widget — افزونه iOS برای نمایش اطلاعات بدون باز کردن برنامه.
  • WidgetKit (iOS 14+) — فریم‌ورک مدرن، NCWidgetProviding — legacy برای نسخه‌های قدیمی.
  • سه نوع ویجت: اطلاعاتی، تعاملی (iOS 17+)، قابل پیکربندی از طریق Intents.
  • Timeline Provider به جای تایمرها برنامه به‌روزرسانی را مدیریت می‌کند.
  • طراحی باید glanceable باشد: حداقل عناصر، فونت بزرگ، تطبیق با اندازه‌ها.
  • تعامل از طریق App Intents — دکمه‌ها و کلیدها بدون باز کردن برنامه.
  • WidgetCenter.shared.reloadTimelines — به‌روزرسانی برنامه‌ای هنگام تغییر داده‌ها.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید