Published on

CloudKit 4: ilovaga push bildirishnomalar (Push notifications) qo'shish

Authors

CloudKit orqali push notifications

CloudKit'ning eng katta qulayliklaridan biri shundaki, uchinchi tomon xizmatlarisiz (Firebase, OneSignal kabi) to'g'ridan-to'g'ri ilovaga Push bildirishnomalar qo'shish imkoni mavjud. Misol uchun, hammaga ochiq "Fruits" (Mevalar) ro'yxatiga kimdir yangi meva qo'shsa, qolgan hamma foydalanuvchilarning telefoniga "Yangi meva qo'shildi!" degan bildirishnoma borishi mumkin.

1. Foydalanuvchidan ruxsat so'rash

iOS da bildirishnoma yuborishdan oldin doim foydalanuvchining o'zidan ruxsat so'raladi.

import UserNotifications
import UIKit

func requestNotificationPermissions() {
    let options: UNAuthorizationOptions = [.alert, .sound, .badge]

    UNUserNotificationCenter.current().requestAuthorization(options: options) { success, error in
        if let error = error {
            print("Xatolik yuz berdi: \(error)")
        } else if success {
            print("Ruxsat olindi!")

            // Asosiy Thread'da ilovani masofaviy bildirishnomalarga ulaymiz
            DispatchQueue.main.async {
                UIApplication.shared.registerForRemoteNotifications()
            }
        } else {
            print("Ruxsat berilmadi.")
        }
    }
}

2. Bazadagi o'zgarishlarga obuna bo'lish (Subscribe)

Endi ruxsatimiz bor. Lekin aynan nima o'zgarganda bildirishnoma kelishini CloudKit'ga aytishimiz kerak. Buni Subscription (Obuna) orqali qilamiz.

import CloudKit

func subscribeToNotifications() {
    // 1. Qaysi turdagi ma'lumotlarni kuzatamiz? (Barcha "Fruits" larni)
    let predicate = NSPredicate(value: true)

    // 2. Obunani yaratamiz
    // options: .firesOnRecordCreation (Yangi ma'lumot qo'shilganda ishga tushadi)
    let subscription = CKQuerySubscription(
        recordType: "Fruits",
        predicate: predicate,
        subscriptionID: "fruit_added_to_database", // Unikal ID
        options: .firesOnRecordCreation
    )

    // 3. Bildirishnoma qanday ko'rinishda keladi?
    let notification = CKSubscription.NotificationInfo()
    notification.title = "Yangi meva!"
    notification.alertBody = "Ilovani ochib yangi mevalarni ko'ring."
    notification.soundName = "default" // Asosiy bildirishnoma ovozi

    subscription.notificationInfo = notification

    // 4. Obunani Ommaviy Bazaga saqlaymiz
    CKContainer.default().publicCloudDatabase.save(subscription) { returnedSubscription, returnedError in
        if let error = returnedError {
            print("Obuna bo'lishda xatolik: \(error)")
        } else {
            print("Muvaffaqiyatli obuna bo'lindi!")
        }
    }
}

Dastur ishga tushgach va bu funksiya chaqirilgach, telefon CloudKit dagi "Fruits" jadvalini "kuzatishni" boshlaydi. Agar siz boshqa telefondan (yoki CloudKit Console orqali) yangi meva qo'shsangiz, bu telefonga avtomatik xabar keladi. (Eslatma: Push Notification'lar Simulyatorda ishlamaydi, faqat haqiqiy iPhone da test qilish mumkin!)

3. Obunani bekor qilish (Unsubscribe)

Agar foydalanuvchi bildirishnomalarni o'chirib qo'ymoqchi bo'lsa, obunani uning unikal ID si orqali o'chirib yuborish juda oson:

func unsubscribeToNotifications() {
    CKContainer.default().publicCloudDatabase.delete(withSubscriptionID: "fruit_added_to_database") { returnedID, returnedError in
        if let error = returnedError {
            print("O'chirishda xatolik: \(error)")
        } else {
            print("Obuna muvaffaqiyatli bekor qilindi!")
        }
    }
}

Bu bilan CloudKit seriyamiz yakuniga yetmoqda. CloudKit orqali ma'lumot saqlash va Push Notifications yuborish bepul hamda juda xavfsiz (chunki ma'lumotlar bevosita Apple serverlarida yotadi). Loyihangizga uni albatta sinab ko'ring!

Buy mea coffee