본문 바로가기

나의 플랫폼/iOS

[iOS] LocalNotification

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


## 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:60as Date
        notification.repeatInterval = NSCalendar.Unit.minute
        UIApplication.shared.cancelAllLocalNotifications()
        UIApplication.shared.scheduledLocalNotifications = [notification]
    }
}

cs


출처 : https://stackoverflow.com/a/42364615


위 소스는  1분마다 알림을 뜨게 해주는 소스 입니다.

그리고 이 알림을 한번 설정해 놓으면 앱을 지우기 전까지 계속 알림을 주게 된다.


알림을 셋팅하기 전 권한을 체크하는 소스도 추가 되어 있다.


전체소스 : https://github.com/gorchg/iOS-LocalNotification



// 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"asString == "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