티스토리 뷰

 

 

 스토어  올리기 Index

 

1 (https://atelier-chez-moi.tistory.com/84)

개발자 계정 구매  활성화 문제 해결, Failed with exit code 1 해결, 인증서 문제 해결 과정

2 (https://atelier-chez-moi.tistory.com/85)

 스토어 커넥트 둘러보기, 개인정보 처리방침 URL 만들기, TestFlight   올리기

3 (https://atelier-chez-moi.tistory.com/91)

TestFlight 테스터 관리, 스크린샷 피드백, pageSheet 문제 수정, 가로모드 허용 금지

4 (NOW)

UserNotification

5 (https://atelier-chez-moi.tistory.com/94)

AVSpeechSynthesizer(TTS, Text To Speech) 사용법, UserDefaults

6 (https://atelier-chez-moi.tistory.com/95)

AVSpeechSynthesizer 2, Singleton Pattern

7 (https://atelier-chez-moi.tistory.com/96)

무음 모드(Slient mode) 소리 재생 방법, App store screenshot

 

 

 

현재 French Voca 는 약 3시간마다 데이터베이스로부터 랜덤하게 단어를 선택하여 사용자에게 알림이 가도록 했다.

하지만 알림을 자주 받고 싶어하는 사람도 분명 있을 것이고, 가끔은 알림이 오지 않기를 원하는 사람도 있을 것이다.

이를 추가하기 위해서 먼저 UserNotification 에 대해서 파헤쳐보자.

 

< User Notification >

Source : Apple Developer

대충 보면, 유저와 바로 만나게 되는 알림을 서버에서 유저에게 보내거나 혹은 앱 내에서 자체적으로 로컬하게 알림을 보낼 수 있도록 할 수 있게 해주는 프레임워크이다. 우리가 지금부터 알아볼 것은 앱 내에서 로컬하게 알림을 보낼 수 있도록  하는 Notification 이다.

 

iOS 버전 10 부터 사용할 수 있다. 요새는 다들 다크모드 때문에 13으로 올리는 추세이니, 걱정말고 작업할 수 있을 것 같다.

 

밑의 Overview 를 보면..

 

이 User-facing(유저와 맞닿는? 정도로 보면 되겠다) notifications 는 앱이 작동 중인지 여부에 관계없이 앱의 유저들에게 중요한 정보를 전달할 수 있다록 한다고 한다. 워낙 앱 푸시는 여러 앱을 이용하면서 많이 접했기에 예시는 생략하겠다.

 

Source : Apple Developer

위 내용을 간단히 정리해보면 크게 두 가지로 나뉜다.

 

- Local Notification 앱 자체적으로 발생시키는 Notification (오늘 알아볼 Notification

Push Notification : 여러분이 관리하는 서버로부터 원격적으로 발생시키는 Notification 

   # Local Notification 과는 다르게 Apple Push Notification service (APNs) 가 서버로부터 오는 노티들의 전송을 처리한다.

 

이 프레임워크를 사용하기 위해서 다음과 같은 내용을 고려해야 한다.

 

1. 여러분의 앱이 지원하는 Notification 의 타입을 정의한다. 

2. 정의한 Notification 의 타입과 연관된 커스텀 액션을 또한 정의한다.

3. 전송할 Local Notification 을 스케줄링한다. (언제 보낼 것인가?)

4. 이미 전송된 Notification 을 처리한다.

5. 유저가 선택한 액션에 응답한다. (만약 알림 중지를 누를 수도 있으니)

 

 

일단 여기까지 간단히 알아보기로 한다. 

자세히 알아보고 싶지만 그럼 언제 앱을 제출하지...ㅠㅠ 살려주세여....

대신 Local Notification 에 대해서 사촌 형이 정리한 글을 공유하고자 한다. (깨알 홍보)

Objective-C 로 작성이 되어있지만 옵젝씨 하나도 모르는 내가 이해하기에도 큰 어려움이 없었다.

 

https://soulpark.wordpress.com/2013/01/15/ios-local-notifications/

 

[iOS] 로컬 알림 (Local Notifications)

iOS는 로컬 알림(Local Notifications)과 푸쉬 알림(Push Notifications – Remote Notifications 라고도 함) 방법을 제공하여 앱이 Foreground (iOS App State 참고) 에서 실행 중이 아닐 때에도 사용자에게 정보가 전달되도록 한다. 두 가지 알림 방법 중 Local Notifi…

soulpark.wordpress.com

 

아 !!! 일단 간단한 글 하나 살펴보고 가죠...!

 

Source : Apple Developer

 

'Notification 을 사용하기 위한 허가를 요청하기'

 

유저의 허가를 요청하는 내용은 다음과 같은 범위를 포함하고 있네요.

- alert (알림)

- play sounds (알림 사운드 재생)

- badge (앱의 숫자표시)

 

Overview)

Local 혹은 Remote Notifications 의 효과는 무엇일까요? 바로 사용자의 이목을 끌 수 있다는 것이죠.

그 방법으로는 위처럼 앱 아이콘에 Badge 를 띄우거나, 알림을 보여주거나 사운드를 재생하는 것이 있어요.

앱이 작동중이 아니거나 Background 에 있어도 작동하는 것이 포인트에요.

이러한 상호작용(interaction)은 저에게 앱과 관련되면서 보여주고자 하는 정보를 가지고 있다는 것을 여러분들이 알게 하는 역할을 하죠.

Notification 기반의 상호작용이 지장을 줄 수 있다고 유저가 간주할 수도 있기 때문에, 우리는 이 상호작용에 대한 허가를 얻어야만 하는 것입니다.

 

익숙한 화면이죠?
Source : Apple Developer

 

컨텍스트 내에서 권한을 요청하기

 

1. 권한을 요청하기 위해서 shared 된 UNUserNotificationCenter 인스턴스를 획득하고 requestAuthorization(options:completionHandler:) 메서드를 호출합니다.

2. 여러분의 앱이 이용할 모든 상호작용 유형을 특정짓습니다.

  ex. 알림을 표시한다던가 사운드를 재생하는 것과 같은 내용에 대한 권한을 요청할 수 있죠.

 

(위의 사진 속 코드참조)

 

여러분의 앱이 이러한 권한을 요청하게 하는 첫 번째에, 시스템은 유저에게 요청을 허용 또는 부인하도록 유도하고 유저의 응답을 기록합니다. 이후의 허가 요청은 나타나지 않습니다.

 

왜 여러분의 앱이 권한을 필요로 하는지에 대해 이해할 수 있도록 유저들을 도와주어야 합니다. 그렇기 때문에 이러한 문맥 안에서 요청을 만들어야 합니다. 예를 들어, 작업을 추적하는 앱이 있고 이를 계속 상기시켜주는 notification 을 보낸다고 했을 때, 여러분은 유저가 첫번째 작업을 스케줄링 한 후에 요청을 만들 수 있어야 합니다. 이는 더 나은 유저 경험을 제공합니다. 첫 시작에 권한을 자동적으로 요청하는 것보다요. 왜냐하면 유저들은 더 쉽게 notification 이 어떤 목적으로 사용되는지 볼 수 있어야 하기 때문이죠.

(내 앱 French Voca 는 앱의 첫 시작때 뜨는데... 반성해야겠다)

 

 

 

 

 

간단히 살펴보았고,  실전으로 들어가봅시다....

 

Notification 을 관리해줄 파일을 하나 만들어주자.

 

UserNotifications 를 import 해줘야 일단 시작이 가능하다.

 

 

// 0

이 부분은 이제 Notification 에 Database 의 단어들을 담기 위해서 사전에 정의해둔 클래스를 선언한 부분이다.

사실 Notification 과는 큰 관계는 없다.

 

// 1

여러분의 앱에 공유된 유저 노티피케이션 센터 객체를 리턴합니다. (...) 

그래 뭐 리턴하는데 그래서? 라고 생각한 후 아래를 보니

 

Always use this method ... 라고 되어 있다 이건 무조건 사용해야 한다.

또 중요한 내용... UNUserNotificationCenter class 의 인스턴스를 다이렉트로 만들어내려고 시도하지 말것...!

(let center = UNUserNotificationCenter() 요거 하지 말라는 뜻이다)

그래서 이 코드는 필요하다 !

 

// 2

요거는 뭐 User Notification 의 델리게이트를 이 클래스로 지정해주는 부분인데,

이를 통해서 Notification 을 다양하게 활용할 수 있다.

 

// 3, 4

이건 권한 요청을 해주는 부분인데, 어떤 부분의 권한을 요청할 것인지 옵션에 배열로 담아서

아래 requestAuthorization 메서드의 parameter 로 전달한다.

 

 

다양한 옵션이 있다. 카플레이가 눈에 띈다. 그렇다고 카플레이를 지원하겠다는 것은 아니다..

requestAuthorization 메서드의 끝 부분에 

self.setupNotificationActions() 메서드를 실행하라고 되어있다. 살펴보자.

 

이 메서드를 통해 Notification 이 도착하는 순간의 처리 방법을 설정해줄 수 있다.

도착하는 순간이란 다음과 같이 앱을 이용중에 도착하는 알림을 말한다.

 

다음 단어를 터치하면 옵션이 .destructive 로 설정되어있기 때문에 이 알림은 파괴된다.

옵션은 이외에도 두 가지가 더 있다. foreground 가 앱으로 가게 만드는 옵션이니,

authenticationRequired 는 뭘까 아시는 분 제보 부탁드립니다... 해봤는데 아무것도 안떠서..

텍스트를 입력하는 부분을 사용하고 싶다면 UNTextInputNotificationAction 을 사용하면 된다.

 

아무튼 지금은 UNNotificationCategory 를 사용해 Notification 에 대한 카테고리를 설정해주었다.

 

그리고, Notification 에 대한 세팅을 관리할 수 있는 메서드 getNotificationSetting 과

일정 시간 간격으로 Notification 발송을 관리하기 위한 triggerTimeIntervalNotification 을 설정한다.

 

 

triggerTimeIntervalNotification 에서 content = UNMutableNotificationContent() 를 통해 Notification 내에 들어갈

내용을 구체적으로 정의한다. sound 에 default 가 되어있는것으로 보아 Custom 도 가능해 보인다.

 

trigger 상수의 timeInterval 파라미터에 60 이 들어가 있는데, 이것은 Notification 을 테스트 하기 위해서 잠시 설정해둔 것이다.

최소 시간은 60초부터 가능하다. 그 이하로 넣으면 안되더라...

 

그 다음 request 상수에 이 content 와 trigger 를 담아 center 에 추가시켜주면 끝.

 

이제 AppDelegate.swift 에서 notification 을 등록해주고,

 

원하는 위치에 NotificationSettings 과 triggerTimeIntervalNotification 메서드를 설정해주면 되겠다.

 

아참, 맨 위의 register() 메서드에서 델리게이트를 설정해줬던 것이 기억난다.

이를 통해 UNUserNotificationCenterDelegate 를 설정하면...

 

앱이 백그라운드 혹은 종료 상태에서 사용자의 Response(응답)을 Receive 하는 didReceive 메서드라던가,

 

앱을 사용하고 있을 때도 알림이 올 수 있지 않은가? 그 때의 동작을 설정할 수 있는 willPresent 메서드를 활용할 수 있다.

 

원래는 Notification 의 Trigger 부분을 수정하는 내용만 담으려고 했는데, Local Notification 에 대한 설명이 없으면

쓰는 것에 의미가 없을 것 같아 그냥 UserNotification 에 대해서 정리해보았다.

 

끝 !

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함