[Swift] UserNotification으로 이미지가 포함된 로컬 알림 보내기

EmilY
7 min readJul 11, 2019

--

안녕하세요 에밀리입니다

오늘은 UserNotification으로 이미지가 포함된 로컬 알림 보내는 법을 알아보겠습니다

우선 이미지가 포함되지 않은 기본 알림 보내는 방법입니다

먼저, ViewController Scene에 Button을 하나 추가해줍니다

Send Notification이라는 버튼을 하나 추가하고

ViewController와 Button Action을 연결해주었습니다

오른쪽에 didTouchButton 메소드가 생겼죠?

그 뒤에 상단에 UserNotification을 import해줍니다

import UserNotifications

그 뒤에 viewDidLoad에서 알람 허용 권한을 요청하는데

UNUserNotificationCenter.current().requestAuthorization(options: UNAuthorizationOptions, completionHandler: (Bool, Error?) -> Void)

이때 위의 메소드를 사용합니다.

UNUserNotificationCenter는 notification에 관련된 활동을 관리하는 중심 객체입니다.

current()로 UNUserNotificationCenter의 shared user notification center를 리턴한다고 하네요.

가장 중요한 권한 요청 메소드는 requestAuthorization(options:completionHandler:)입니다.

이름에서 보다시피 첫번째 파라미터 options는 어떤 권한을 요청할 것인지 결정합니다.

공식문서에 어떤 Option들이 있는지 잘 나와있는데요

(참조 : https://developer.apple.com/documentation/usernotifications/unauthorizationoptions)

가장 많이 쓰는 badge, sound, alert를 viewDidLoad()에 설정해주겠습니다.

여기까지 하고 프로젝트를 실행하면

처음에 이렇게 창이 뜹니다

여기서 허용하느냐 안하느냐 결과값이 completionHandler의 result로 넘어가겠죠?

print(result)로 결과를 출력해주면 좋습니다.

그 뒤에 메인 작업!

버튼을 눌렀을 때 알람이 가도록 만들어봅시다.

만들어놓은 버튼 액션에 아래 코드를 추가해줍니다.

UNMutableNotificationContent는 이름에서 알 수 있듯이

알람의 내용을 구성하는 클래스입니다

다양한 구성을 지원하지만, 여기서는 title, body, badge 정도만 써보겠습니다

알람 내용을 구성했으니 이제 알람을 보내야겠죠?

그 전에 또! 알람을 언제, 어떻게 보낼지도 구성해줘야 합니다

그래서 content 아래 trigger 클래스를 만들어줬습니다

Trigger에도 다양한 형태가 있는데,

위에서 사용한 UNTimeIntervalNotificationTrigger의 경우

몇초 뒤에 알람을 가게할지 설정합니다

repeats 파라미터로는 반복의 유무를 설정하는데

저는 반복 안할거니까 false로 설정해주었습니다

자 이제 알람 내용도 설정했고, 알람을 어떻게 띄울건지도 설정했으니

진짜 알람을 요청해야겠죠

요청이니까 UNNotificationRequest입니다

request에 파라미터로 만들었던 content, trigger를 넣어줍니다.

첫번째 파라미터 identifier는 여러 개의 알람이 있을 경우 식별하기 위한 id인데, 지금은 그냥 간단히 test로 설정해주었습니다

그 뒤에 UNUserNotificationCenter에 이 요청을 추가해놓으면

버튼을 눌렀을 경우 알람이 갑니다

확인해볼까요?

앱을 실행해서 버튼을 누른뒤 백그라운드로 전환합니다

..2초가 지나면,

이렇게 알람과 badge 표시가 잘 됐네요

하지만 여기서 끝이 아닙니다.

이 알람에 사진도 포함해서 보내고 싶다면?

한가지 작업을 더 해줍니다.

위의 애플로고 이미지를 다운로드해줍니다

이름은 applelogo 확장자는 .png입니다

그 뒤에 프로젝트 파일에 해당이미지를 넣고

Add Files로 프로젝트에 이미지를 추가해줍니다

그 뒤에 다시 코드로 돌아갑시다

이미지도 내용을 넣어주는 것이기 때문에

content 코드 아래에 작성합니다

이미지의 이름을 상수로 받아오고

imageURL을 생성합니다

이때 번들에 있는 이미지의 이름과 확장자를 적어주면 됩니다

자, 이제 이미지를 받아왔으니 내용에 넣어줘야겠죠?

attchment라는 UNNotificationAttachment클래스를 생성해줍니다

UNNotificationAttachment는 오디오, 이미지, 비디오 컨텐츠를 알람에 포함하고 싶을때 쓰는 클래스라고 합니다.

지원되는 파일형식이 정해져 있으니 자세한 건 아래 공식문서를 참조해주세요

(참조 : https://developer.apple.com/documentation/usernotifications/unnotificationattachment)

그 뒤에 content에 추가해줍니다

전체 코드는 다음처럼 됩니다

실행해봅니다

실행한 뒤 버튼을 누르고 백그라운드로 가면…

2초뒤에 짠!!!

이미지가 포함된 로컬 알람이 뜹니다

이상입니다

--

--

EmilY
EmilY

Written by EmilY

iOS 하나부터 열까지 이해하기

Responses (1)