iOS) 로컬 푸시를 활용해서 custom notification 적용시키기
local push 를 통해서 custom notification interface 를 적용해보자.
- 먼저, local push 를 등록해보자
import UserNotifications
class ViewController: UIViewController {
let userNotificationCenterr = UNUserNotificationCenter.current()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
requestNotificationAuthorization()
sendNotification(seconds: 10)
}
func requestNotificationAuthorization() {
let authOptions = UNAuthorizationOptions(arrayLiteral: .alert, .badge, .sound)
//1.
userNotificationCenterr.requestAuthorization(options: authOptions) {
success, error in
print("success: \(success)")
if let error = error {
print("Error: \(error)")
}
}
}
func sendNotification(seconds: Double) {
let notificationContent = UNMutableNotificationContent()
notificationContent.title = "알림 테스트 타이틀"
notificationContent.body = "알림 테스트 바디"
//2.
notificationContent.categoryIdentifier = "TEST_NOTIFICATION"
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: seconds, repeats: false)
let request = UNNotificationRequest(identifier: "testNotification", content: notificationContent, trigger: trigger)
userNotificationCenterr.add(request) { error in
if let error = error {
print("Notification Error: \(error)")
}
}
}
}
주석)
1: 권한요청
2: categoryIdentifier 를 설정해서 custom notification 을 지정해줄 것이다.
extension 으로 만든 스토리보드와 뷰컨트롤러를 이용해서 cutom interface 를 만들 수 있다.
- info.plist
UNNotificationExtensionContentHidden
- interface 에서 default content 를 숨길 수 있다. (YES: 숨기기)
UNNotificationExtensionCategory
- 키를 통해서 앱에서 수신할 수 있는 notification 을 구분한다.
UNNotificationExtensionInitialContentSizeRatio
- The initial size of the view controller’s view for an app extension, expressed as a ratio of its height to its width.
-
0 과 1 사이의 숫자 값이다. cutom interface 의 aspect ratio 를 표현한다. default 는 1이다.
- MainInterface.storyboard
- NotificationViewController.swift
class NotificationViewController: UIViewController, UNNotificationContentExtension {
@IBOutlet var titleLabel: UILabel?
@IBOutlet weak var bodyLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any required interface initialization here.
}
func didReceive(_ notification: UNNotification) {
self.titleLabel?.text = notification.request.content.title
self.bodyLabel.text = notification.request.content.body
}
}