관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 1. Local Notification (로컬 푸시, 로컬 노티) - 사용 방법 본문

iOS 응용 (swift)

[iOS - swift] 1. Local Notification (로컬 푸시, 로컬 노티) - 사용 방법

jake-kim 2022. 5. 7. 12:20

1. Local Notification (로컬 푸시, 로컬 노티) - 사용 방법

2. Local Notification (로컬 푸시, 로컬 노티) - badge (뱃지) 숫자 처리, 딥링크 처리

권한 요청

  • 시스템 권한은 보통 info.plist에 하지만, 푸시는 특별하게 코드에서 요청
  • UNUserNoitificationCenter.current() 싱글톤으로 접근
import UIKit
import UserNotifications

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    UNUserNotificationCenter.current().requestAuthorization(
    // alert - 알림이 화면에 노출
    // sound - 소리
    // badge - 빨간색 동그라미 숫자
      options: [.alert, .sound, .badge],
      completionHandler: { (granted, error) in
        print("granted notification, \(granted)")
      }
    )
    
    return true
  }

노티 보내기

  • 노티 보내기 역시도 UNUserNotificationCenter.current() 사용
    • 이 인스턴스의 add(_:) 메소드에 UNNotificationRequest를 넘기면 완료
    • request정보에는 id, content, trigger 존재
@objc private func requestNoti() {
  let content = UNMutableNotificationContent()
  content.title = "노티 (타이틀)"
  content.body = "노티 (바디)"
  content.sound = .default
  content.badge = 2
  
  let request = UNNotificationRequest(
    identifier: "local noti",
    content: content,
    trigger: UNTimeIntervalNotificationTrigger(
      timeInterval: 3,
      repeats: false
    )
  )
  
  UNUserNotificationCenter.current()
    .add(request) { error in
      guard let error = error else { return }
      print(error.localizedDescription)
    }
}
  • 테스트

background에서 노티 확인

  • 단, foreground에서도 푸시를 받고싶을때, AppDelegate에서 노티에 관한 delegate를 따로 처리가 필요
    • 이 처리를 안해주면 background에서만 노티가 수신

foreground 에서도 노티 수신 방법

  • application(_:didFinishLaunchingWithOptions:) 안에서 델리게이트 할당
UNUserNotificationCenter.current().delegate = self
  • 델리게이트
    • 옵션 list: 알림 센터에 표시 (상단에서 아래로 내리면 보이는 메뉴)
    • 옵션 banner (화면 상단 알림)
extension AppDelegate: UNUserNotificationCenterDelegate {
  func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification) async -> UNNotificationPresentationOptions {
    [.list, .banner, .sound, .badge]
  }
}

* 전체 코드: https://github.com/JK0369/ExLocalPush1

* 참고

https://stackoverflow.com/questions/65737786/ios-14-unnotificationpresentationoptions-list-banner-vs-alert

Comments