- Published on
CloudKit 4: ilovaga push bildirishnomalar (Push notifications) qo'shish
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
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!