[SwiftUI Mater] #24 CloudKit: Push Notifications

Woozoo·2023년 4월 24일
0

[SwiftUI Review]

목록 보기
39/41
post-custom-banner

iCloud 추가하면 자동으로 Push Notifications 기능이 추가되어 있음

class CloudKitPushNotificationBootcampViewModel: ObservableObject {
    
    func requestNotificationPermissions() {
        
        let options: UNAuthorizationOptions = [.alert, .sound, .badge]
        UNUserNotificationCenter.current().requestAuthorization(options: options) { success, error in
            if let error = error {
                print(error)
            } else if success {
                print("Notification permissions success!")
            } else {
                print("Notification permissions failure.")
            }
        }
        
    }
    
    func subscribeToNotifications() {
        
    }
    
}

요런 뷰모델이 있습니다.


Noti 추가해보는거 local noti 할 때 했었죠
이번엔 서버에서 원격으로 보내는 거라 살짝은 다르지만
request요청하는 건 같네요

func subscribeToNotifications() {
    let predicate = NSPredicate(value: true)
    
    let subscription = CKQuerySubscription(recordType: "Fruits", predicate: predicate, subscriptionID: "fruit_added_to_database", options: .firesOnRecordCreation)
    let notification = CKSubscription.NotificationInfo()
    notification.title = "There's a new fruit!"
    notification.alertBody = "Open the app to check your fruits."
    notification.soundName = "default"
    
    subscription.notificationInfo = notification
    
    CKContainer.default().publicCloudDatabase.save(subscription) { returnedSubscription, returnedError in
        if let error = returnedError {
            print(error)
        } else {
            print("Successfully subscribed to notifications!")
        }
    }
}

그리고 Noti에 대한 subscribe를 설정해주고 Cloud에 저장!
해줬습니다

func unsubscribeToNotifications() {
//        CKContainer.default().publicCloudDatabase.fetchAllSubscriptions
    CKContainer.default().publicCloudDatabase.delete(withSubscriptionID: "fruit_added_to_database") { returnedID, returnedError in
        if let error = returnedError {
            print(error)
        } else {
            print("Successfully unsubscribed!")
        }
    }
}

노티 해제요청도 메소드 작성해주고

시뮬레이터에서 푸시알림 받는 거 볼 수는 없음!
(실제 디바이스에서 테스트해봐야함)
하지만 request 요청은 되는지 확인해볼 수 있으니까 그거 먼저 확인해봅시다


알림 뜨네요~!

profile
우주형
post-custom-banner

0개의 댓글