나의 플랫폼/iOS
[iOS] LocalNotification
GsBOB
2017. 9. 29. 18:11
## LocalNotification 설정
iOS 10 버전 이상 부터 UNUserNotificationCenter를 사용할 수 있다.
우선 아래와 같이 UserNotifications를 import 시켜야 사용이 가능 합니다.
1 2 3 4 | import UserNotifications import UIKit class ViewController: UIViewController ,UNUserNotificationCenterDelegate{ | cs |
iOS 10 이상일 경우는 UNUserNotificationCenter를 사용하고,
그렇지 않을 경우는 기존 사용 되던 UILocalNotification을 사용하면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | func setLocalNotification() { if #available(iOS 10.0, *) { let center = UNUserNotificationCenter.current() let options: UNAuthorizationOptions = [.alert, .sound]; center.requestAuthorization(options: options) { (granted, error) in if granted { let content = UNMutableNotificationContent() content.categoryIdentifier = "awesomeNotification" content.title = "Notification" content.body = "Body" let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 60, repeats: true) let request = UNNotificationRequest(identifier: "FiveSecond", content: content, trigger: trigger) let center = UNUserNotificationCenter.current() center.add(request) { (error) in print(error?.localizedDescription ?? "") } } } } else { UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil)) UIApplication.shared.registerForRemoteNotifications() let notification = UILocalNotification() notification.userInfo = ["indentifier" : "awesomeNotification"] notification.alertTitle = "Notification" notification.alertBody = "Body" notification.fireDate = NSDate(timeIntervalSinceNow:60) as Date notification.repeatInterval = NSCalendar.Unit.minute UIApplication.shared.cancelAllLocalNotifications() UIApplication.shared.scheduledLocalNotifications = [notification] } } |
출처 : https://stackoverflow.com/a/42364615
위 소스는 1분마다 알림을 뜨게 해주는 소스 입니다.
그리고 이 알림을 한번 설정해 놓으면 앱을 지우기 전까지 계속 알림을 주게 된다.
알림을 셋팅하기 전 권한을 체크하는 소스도 추가 되어 있다.
// LocalNotification 을 취소할때는 아래 소스를 참고 해보세요.
1 2 3 4 5 6 7 8 9 10 | if #available(iOS 10.0, *) { UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: ["awesomeNotification"]) } else { if let notifications = UIApplication.shared.scheduledLocalNotifications { for notification in notifications { if notification.userInfo?["identifier"] as? String == "awesomeNotification" { UIApplication.shared.cancelLocalNotification(notification) } } | cs |
## 특정 시간에 반복 하기
아래 소스는 매일 오전 10시 30분에 알림을 띄우게 하는 소스 입니다. 참고하세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | let content = UNMutableNotificationContent() content.title = "Noti Title" content.body = "Noti Body" let calendar = Calendar.current var dateComponents = DateComponents() dateComponents.hour = 10 dateComponents.minute = 30 let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true) let request = UNNotificationRequest(identifier: TRAINING_NOTIFICATION, content: content, trigger: trigger) let center = UNUserNotificationCenter.current() center.add(request) { (error) in print(error?.localizedDescription ?? "") } | cs |