Published on

Local Notifications — mahalliy bildirishnomalar

Authors

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.

Buy mea coffee