- Published on
Local Notifications — mahalliy bildirishnomalar
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Local Notification — ilova o'zi yaratadigan bildirishnoma, server kerak emas. Eslatmalar, timer, muntazam xabarnomalar uchun ideal. Masalan: "Suvingizni ichishni unutmang" har 2 soatda yoki "Dars vaqti" har kuni soat 9:00 da.
UNUserNotificationCenter — barcha bildirishnomalarni boshqaruvchi markaziy class. U bildirishnoma yaratish, rejalashtirish va bekor qilish uchun ishlatiladi. Trigger turlari: vaqtga asoslangan (5 soniyadan keyin), kunlik (har kuni soat 9:00), joylashuvga asoslangan (biror joyga yetganda).
Oddiy bildirishnoma yaratish
import UserNotifications
class MahalliyBildirishnoma {
// Vaqt bo'yicha — N soniyadan keyin
static func vaqtBoyicha(
sarlavha: String,
matn: String,
soniya: TimeInterval
) {
let kontent = UNMutableNotificationContent()
kontent.title = sarlavha
kontent.body = matn
kontent.sound = .default
kontent.badge = 1
// 10 soniyadan keyin
let trigger = UNTimeIntervalNotificationTrigger(
timeInterval: soniya,
repeats: false // Bir marta
)
let sorov = UNNotificationRequest(
identifier: UUID().uuidString,
content: kontent,
trigger: trigger
)
UNUserNotificationCenter.current().add(sorov)
}
// Kalendar bo'yicha — har kuni muayyan vaqtda
static func harKuni(soat: Int, daqiqa: Int, sarlavha: String, matn: String) {
let kontent = UNMutableNotificationContent()
kontent.title = sarlavha
kontent.body = matn
kontent.sound = .default
var sanaTarkibi = DateComponents()
sanaTarkibi.hour = soat
sanaTarkibi.minute = daqiqa
let trigger = UNCalendarNotificationTrigger(
dateMatching: sanaTarkibi,
repeats: true // Har kuni takrorlanadi
)
let sorov = UNNotificationRequest(
identifier: "kunlik_eslatma",
content: kontent,
trigger: trigger
)
UNUserNotificationCenter.current().add(sorov)
}
// Bekor qilish
static func bekorQilish(id: String) {
UNUserNotificationCenter.current()
.removePendingNotificationRequests(withIdentifiers: [id])
}
// Barchasini bekor qilish
static func barchasiniBekor() {
UNUserNotificationCenter.current()
.removeAllPendingNotificationRequests()
}
}
SwiftUI da ishlatish
struct EslatmaView: View {
@State private var sarlavha = ""
@State private var daqiqa = 5.0
var body: some View {
Form {
TextField("Eslatma matni", text: $sarlavha)
Slider(value: $daqiqa, in: 1...60, step: 1) {
Text("\(Int(daqiqa)) daqiqa")
}
Text("\(Int(daqiqa)) daqiqadan keyin")
Button("Eslatma qo'yish") {
MahalliyBildirishnoma.vaqtBoyicha(
sarlavha: "Eslatma",
matn: sarlavha,
soniya: daqiqa * 60
)
}
.disabled(sarlavha.isEmpty)
Button("Har kuni 9:00 da eslatma") {
MahalliyBildirishnoma.harKuni(
soat: 9, daqiqa: 0,
sarlavha: "Kunlik eslatma",
matn: "Bugungi vazifalaringizni rejalashtiring!"
)
}
Button("Barchasini bekor qilish", role: .destructive) {
MahalliyBildirishnoma.barchasiniBekor()
}
}
}
}
🎯 Topshiriq
"Eslatma" ilovasi yarating: foydalanuvchi matn kiritadi, vaqt tanlaydi (Slider yoki DatePicker), eslatma qo'yadi. Ro'yxatda barcha kutayotgan eslatmalarni ko'rsating. Har birini alohida bekor qilish imkoni.