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 요청은 되는지 확인해볼 수 있으니까 그거 먼저 확인해봅시다
알림 뜨네요~!