Published on

Push Notifications — masofaviy bildirishnomalar

Authors

Push Notification — foydalanuvchini ilova yopiq bo'lganda ham xabardor qilish imkonini beruvchi tizim. Chat xabarlari, yangiliklar, buyurtma holati yangilanishi — barchasi push orqali keladi.

APNS (Apple Push Notification Service) — Apple ning push xabarlar serveri. Sizning serveringiz xabarni APNS ga yuboradi, APNS uni foydalanuvchi qurilmasiga yetkazadi. Bu zanjir: Server → APNS → Qurilma. APNS bilan ishlash uchun Apple Developer akkaunt ($99/yil) va sertifikat kerak.

Push notification ishlatish uchun avval foydalanuvchidan ruxsat so'rash kerak. Ruxsat bermasa — push kelmaydi.

Ruxsat so'rash

import UserNotifications

class BildirishnomaMenejeri: ObservableObject {
    @Published var ruxsatBerilgan = false

    func ruxsatSorash() async {
        do {
            let ruxsat = try await UNUserNotificationCenter.current()
                .requestAuthorization(options: [.alert, .badge, .sound])
            await MainActor.run {
                ruxsatBerilgan = ruxsat
            }

            if ruxsat {
                // Device token olish uchun ro'yxatdan o'tish
                await MainActor.run {
                    UIApplication.shared.registerForRemoteNotifications()
                }
            }
        } catch {
            print("Ruxsat xatosi: \(error)")
        }
    }
}

AppDelegate da token olish

// App faylida
@main
struct MeningIlovam: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

class AppDelegate: NSObject, UIApplicationDelegate,
                   UNUserNotificationCenterDelegate {

    func application(_ application: UIApplication,
        didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        // Token ni string ga aylantirish
        let token = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
        print("Device Token: \(token)")
        // Bu token ni serverga yuborish kerak
    }

    func application(_ application: UIApplication,
        didFailToRegisterForRemoteNotificationsWithError error: Error) {
        print("Push ro'yxat xatosi: \(error)")
    }

    // Push kelganida — ilova ochiq paytda
    func userNotificationCenter(_ center: UNUserNotificationCenter,
        willPresent notification: UNNotification) async
        -> UNNotificationPresentationOptions {
        return [.banner, .badge, .sound]
    }

    // Push bosilganida
    func userNotificationCenter(_ center: UNUserNotificationCenter,
        didReceive response: UNNotificationResponse) async {
        let userInfo = response.notification.request.content.userInfo
        print("Push bosildi: \(userInfo)")
    }
}

Push payload formati

{
  "aps": {
    "alert": {
      "title": "Yangi xabar",
      "body": "Ali sizga xabar yubordi",
      "subtitle": "Chat"
    },
    "badge": 3,
    "sound": "default",
    "category": "MESSAGE"
  },
  "chatId": "abc123",
  "senderId": "ali_456"
}

🎯 Topshiriq

Push notification uchun ilova sozlang: ruxsat so'rash, token olish va konsolga chiqarish. UNUserNotificationCenterDelegate ni qo'llang. Push kelganida ilova ichida banner ko'rsating.

Buy mea coffee