Notice
Recent Posts
Recent Comments
Link
투케이2K
35. (ios/swift) 로컬 노티피케이션 알림 발송 및 확인 실시 - UNUserNotificationCenter 본문
[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT
[소스 코드 : 뷰컨트롤러 : 알림 권한 요청 및 알림 보내기]
import UIKit
class ViewController: UIViewController {
// MARK: - [액티비티 메모리 로드 수행 실시]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print("")
print("===============================")
print("[ViewController >> viewDidLoad() :: 액티비티 메모리 로드 실시]")
print("===============================")
print("")
// [노티피케이션 알림 권한 요청 수행 실시]
self.requestAuthNoti()
}
// MARK: - [사용자에게 노티피케이션 알림 권한 요청]
let userNotiCenter = UNUserNotificationCenter.current()
func requestAuthNoti() {
let notiAuthOptions = UNAuthorizationOptions(arrayLiteral: [.alert, .badge, .sound]) // 노티 알림 설정 값
self.userNotiCenter.requestAuthorization(options: notiAuthOptions) { (success, error) in
// [success 부분에 권한을 허락하면 true / 권한을 허락하지 않으면 false 값이 들어갑니다]
if let error = error {
print("")
print("===============================")
print("[ViewController >> requestAuthNoti() :: 노티피케이션 권한 요청 에러]")
print("[error :: \(error.localizedDescription)]")
print("===============================")
print("")
}
else {
print("")
print("===============================")
print("[ViewController >> requestAuthNoti() :: 노티피케이션 권한 요청 응답 확인]")
print("[success :: \(success)]")
print("===============================")
print("")
// [알림 발생 실시]
self.sendNotiMessage(_seconds: 1.0, _title: "title", _content: "content")
}
}
}
// MARK: - [노티피케이션 알림 전송]
func sendNotiMessage(_seconds: Double, _title: String, _content: String) {
print("")
print("===============================")
print("[ViewController >> sendNotiMessage() :: 노티피케이션 알림 전송 실시]")
print("[_seconds :: \(String(_seconds))]")
print("[_title :: \(String(_title))]")
print("[_content :: \(String(_content))]")
print("===============================")
print("")
// [알림 타이틀 및 내용 정의 실시]
let notiContent = UNMutableNotificationContent()
notiContent.title = _title // 타이틀
notiContent.body = _content // 내용
notiContent.badge = 1 // 뱃지 표시
notiContent.sound = UNNotificationSound.default // 알림음 설정 [무음일 경우 진동]
// [알림이 trigger 발생 되는 시간 설정]
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: _seconds, repeats: false)
// [알림 값 설정 실시]
let request = UNNotificationRequest(
identifier: UUID().uuidString, // 식별자
content: notiContent, // 알림 제목, 내용
trigger: trigger // 발생 시간 정의
)
// [알림 추가 실시]
self.userNotiCenter.add(request) { (error) in
if let error = error {
print("")
print("===============================")
print("[ViewController >> sendNotiMessage() :: 노티피케이션 알림 전송 에러]")
print("[error :: \(error.localizedDescription)]")
print("===============================")
print("")
}
}
}
}
[소스 코드 : AppDelegate : 알림 받기]
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("")
print("===============================")
print("[AppDelegate >> didFinishLaunchingWithOptions]")
print("[설명 :: 앱 프로세스 완료 및 앱 실행 실시]")
print("===============================")
print("")
// MARK: [노티피케이션 알림 딜리게이트 지정]
UNUserNotificationCenter.current().delegate = self
return true
}
// MARK: UISceneSession Lifecycle
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
print("")
print("===============================")
print("[AppDelegate >> configurationForConnecting]")
print("[설명 :: Scene 만들기 위한 구성 객체 반환 : 스토리보드 , info]")
print("===============================")
print("")
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
print("")
print("===============================")
print("[AppDelegate >> didDiscardSceneSessions]")
print("[설명 :: Scene 구성 객체 해제 실시]")
print("===============================")
print("")
}
} // [AppDelegate 종료]
// MARK: - [노티피케이션 알림 딜리게이트 추가]
extension AppDelegate: UNUserNotificationCenterDelegate {
// [앱이 foreground 상태 일 때, 알림이 온 경우]
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
print("")
print("===============================")
print("[AppDelegate >> willPresent :: 앱 포그라운드 상태 푸시 알림 확인]")
//print("[userInfo :: \(notification.request.content.userInfo)]")
print("===============================")
print("")
// [completionHandler : 푸시 알림 상태창 표시]
completionHandler([.banner, .list, .badge, .sound])
}
// [앱이 background 상태 일 때, 알림이 온 경우]
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
print("")
print("===============================")
print("[AppDelegate >> didReceive :: 앱 백그라운드 상태 푸시 알림 확인]")
print("===============================")
print("")
// [completionHandler : 푸시 알림 상태창 표시]
completionHandler()
}
}
[소스 코드 : SceneDelegate : 알림 뱃지 초기화]
func sceneDidBecomeActive(_ scene: UIScene) {
print("")
print("===============================")
print("[SceneDelegate >> sceneDidBecomeActive]")
print("[설명 : Scene 활성화 및 사용자 이벤트에 응답 실시]")
print("===============================")
print("")
// [앱 접속 시 : 푸시 알림 뱃지 카운트 초기화 실시]
UIApplication.shared.applicationIconBadgeNumber = 0
}
[결과 출력]
반응형
'IOS' 카테고리의 다른 글
37. (ios/swift) LaunchScreen 로딩 화면 이미지 전체 화면 만들기 방법 (0) | 2021.10.31 |
---|---|
36. (ios/swift) 모바일 디바이스 기기 해상도 확인 실시 - UIScreen main bounds size width height (0) | 2021.10.30 |
34. (ios/swift) UI 스레드 , 일정 시간 후 작업 예약 방법 - DispatchQueue async 비동기 , sync 동기 (0) | 2021.10.29 |
33. (ios/swift) 상태 창 Bar 스타일 색상 변경 실시 - UIStatusBarStyle (0) | 2021.10.29 |
32. (ios/swift) QR 코드 생성 실시 - QRCode 라이브러리 (0) | 2021.10.28 |
Comments