- Published on
Push Notifications — masofaviy bildirishnomalar
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
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.