안녕하세요 후르륵짭짭 입니다
한 일주일 만에 글을 쓰는 것 같습니다 ㅎㅎㅎ
최근에 면접 준비랑,,, 시험 준비한다고 IOS 공부를 너무 허술하게 한 것 같네요
반성 하도록 하겠습니다.
이번에는 항상 궁금했던,,, Notification을 공부 해보고 싶었습니다.
어떻게 하면 알림창을 띄어 줄 수 있을까,,,
그래서 유튜브로 열심히 찾아봤습니다.
** 배워 볼 것 **
이번에는 여러가지를 배워 볼 것 입니다.
- 알림 확인 받는 방법
- 간단한 Local 알림 보내는 방법
- foreground에서 알림 받게하는 방법
- Badge 카운드 초기화 하는 방법
- 알림을 클릭 했을 때 특정 화면으로 이동하는 방법
이렇게 여러가지를 배워 볼 것인데,,, 근데 각 라이브러리를 깊게 공부하기는 힘들 것 같습니다.
그래서 기술적인 것을 위주로 설명 하려 합니다.
** 시작하기 **
알림을 사용하기 위해서는 UNUserNotificationCenter를 이용해야합니다.
이것은 알림과 관련된 앱 활동이나 앱 확장을 다루는 객체 입니다.
따라서 UNUserNotificationCenter가 필요합니다.
- 알림 허가 받게 하기 -
보통 허가 요청을 받게 하기 위해서는 Info.plist를 해야하는데, 알림음 설정은 쫌 다른 방식으로 하게 됩니다.
바로 코드로 받게 해줘야합니다 ㅎㅎㅎ
import UserNotifications
let notificationCenter = UNUserNotificationCenter.current()
func userRequest() {
let options: UNAuthorizationOptions = [.alert, .sound, .badge]
notificationCenter.requestAuthorization(options: options) {
(granted, error) in
print("granted NotificationCenter : \(granted)")
}
}
이렇게 해주면 됩니다!
일단 UserNotifications 를 IMPORT 해주세요!!
여기서 UNUserNotificationCenter.current()는 앱 또는 앱 확장에 대한 공유 사용자 알림 센터 개체를 반환합니다.
그러니깐,,,, 알림음 사용 할 때 공유하는 객체라 할 수 있습니다.
시작할때, 이제 등록을 해줘야하는데, 위에 처럼 해줍니다.
이때, UNAuthorizatinoOptions 는 알림을 줄 때 어떠한 역할을 해줄 건지 등록 해주는 겁니다.
.alert : 알림이 화면에 보여지는 것
.sound : 소리
.badge : 빨간색 동그라미 숫자
입니다.
그리고 requestAuthorization(option : 설정한 값)을 넣어주면 true / false 값으로 나오게 됩니다.
true는 확인 버튼을 눌렀을 때 나오게 됩니다.
이제 AppDelegate에 가서 아래 처럼 코드를 작성 해주세요.
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
let notification = NotificationCenter.shared
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
notification.userRequest()
setUNUserNotificationDelegate()
return true
}
.
.
.
}
- 일반적인 알람 만들기 -
//일반적인 알람 방법
func generateNotification(){
let content = UNMutableNotificationContent()
content.title = "Hello World"
content.body = "Main Script"
content.sound = UNNotificationSound.default
//화면에 보여지는 빨간색
content.badge = 2
//언제 발생 시킬 것인지 알려준다.
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
//알림의 고유 이름
let identifier = "Local Notification"
//등록할 결과물
let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)
//UNUserNotificationCenter.current()에 등록
notificationCenter.add(request) { (error) in
if let err = error {
print(err.localizedDescription)
}
}
}
이렇게 코드를 적어주시면 됩니다.
UNMutableNotificationContent()는 알림에 대한 내용을 작성 할 때 사용합니다.(자세한 내용은 APP DOC에 있습니다.)
developer.apple.com/documentation/usernotifications/unmutablenotificationcontent
위에 주석으로 간단한 설명을 달았습니다.
즉, 요약을 하면 알림 내용을 만들어주고 trigger에 언제 발동 시킬 것인지 등록을 해줍니다.
trigger은 시간, 달력 , 지역 등 다양하게 가능 합니다 (아직 많이 테스트 해보지 못해서 잘은 모르겠습니다.)
그리고 identifier에 등록할 이름을 정해주고 마지막에 UNUserNotificationCenter.current()에 등록 해줍니다.
그리고 원하는 뷰에서 싱글톤으로 생성한 뒤 실행 시켜 주시면 됩니다!!
import UIKit
class ViewController: UIViewController {
let notification = NotificationCenter.shared
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
notification.generateNotification()
}
}
그러면 앱이 실행 되고 백그라운드 상태로 가면 5초 뒤에 알림이 등장 할 것 입니다.
하지만 ForeGround에서는 알람음이 등장하지 않을 겁니다.
그래서 새롭게 등록을 해줘야합니다.
바로 UNUserNotificationCenterDelegate 에 있습니다!!!
extension AppDelegate : UNUserNotificationCenterDelegate {
func setUNUserNotificationDelegate(){
notification.notificationCenter.delegate = self
}
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
completionHandler([.list,.sound,.banner])
}
.
.
.
}
이렇게 delegate를 사용해서 위임해주시고
willPresent 함수에 completeHandler([.list , .sound, .banner])를 해주시면 됩니다.
IOS 14에서는 .alert가 사라졌기 때문에, list, banner를 함께 넣어주시면 정상적으로 작동 됩니다.
이렇게 해주시면 이제 ForeGround에서 정상적으로 알림이 등장하는 것을 확인 할 수 있습니다.
지금까지 기본적인 알림 작동 방법을 공부 했는데, 다음에는 좀더 심화적인 것을 다뤄보도록 하겠씁니다.
소스코드 :
github.com/HururuekChapChap/Xcode_TestProj/tree/master/Notification_Tuto/Notification_Tuto
참고사이트 :
appDelegate에서 특정 화면을 보여주는 방법
fluffy.es/open-app-in-specific-view-when-push-notification-is-tapped-ios-13/
알림으로 인한 badge 갯수를 초기화 하는 방법
stackoverflow.com/a/59070073/13065642
Local Notification의 자세한 사용 방법
medium.com/quick-code/local-notifications-with-swift-4-b32e7ad93c2
위의 소스 코드
github.com/fakiho/LocalNotification/blob/master/LocalNotification/Notifications.swift
'Xcode > IOS' 카테고리의 다른 글
IOS) Timer를 이용한 UI 처리를 배워보자 (0) | 2020.12.04 |
---|---|
IOS) Local Notification을 이용해보자 2부 (0) | 2020.11.25 |
IOS) PickerView 에 대해서 알아보자! (0) | 2020.11.12 |
IOS) NastedScrollView를 만들어 보자 (0) | 2020.11.02 |
IOS) 복사 & 붙여넣기를 구현해보자!!! (0) | 2020.09.16 |
댓글