본문 바로가기
Xcode/IOS

IOS) Local Notification을 이용해보자 1부

by 후르륵짭짭 2020. 11. 22.
728x90
반응형

 

안녕하세요 후르륵짭짭 입니다

한 일주일 만에 글을 쓰는 것 같습니다 ㅎㅎㅎ

최근에 면접 준비랑,,, 시험 준비한다고 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

 

Apple Developer Documentation

 

developer.apple.com

위에 주석으로 간단한 설명을 달았습니다.

즉, 요약을 하면 알림 내용을 만들어주고 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/

 

Open app in specific view when push notification is tapped (iOS 13+)

Say you have an app and want to redirect user to a specific view when a push notification is tapped, eg: going to a specific chat room in Telegram after tapping push notification of that message. How do we proceed to implement this? 🤔This tutorial assum

fluffy.es

 

알림으로 인한 badge 갯수를 초기화 하는 방법

stackoverflow.com/a/59070073/13065642

 

How to clear badge counter on click of app icon in iphone?

We have developed an ios app using phonegap and have implemented push notification functionality in our app. Push notification works perfectly fine for us. We have configured push notification for ...

stackoverflow.com

 

Local Notification의 자세한 사용 방법

medium.com/quick-code/local-notifications-with-swift-4-b32e7ad93c2

 

Local Notifications with Swift 4

Before we begin, you can download the initial draft. The application is a table with a list of types of notifications.

medium.com

 

위의 소스 코드

github.com/fakiho/LocalNotification/blob/master/LocalNotification/Notifications.swift

 

fakiho/LocalNotification

tutorial to add Local Notifications in swift. Contribute to fakiho/LocalNotification development by creating an account on GitHub.

github.com

 

728x90
반응형

댓글