L-j-h-c / TIL

CS, Swift, Java, C++, 개발 관련 공부한 내용 정리
12 stars 0 forks source link

[iOS] Remote Notification & APNs #26

Closed L-j-h-c closed 2 years ago

L-j-h-c commented 2 years ago

Registering Your App with APNs

Remote Notification

remote notifications는 push notifications라고도 하며, 앱이 실행중이지 않을 때에도 작은 양의 데이터를 특정 디바이스에 보내는 기능을 말한다.

Remote Notification이 필요한 이유

애플에서 제공하는 Notifcation은 Local Notification과 Remote Notification으로 나뉘는데, Local Notification의 경우에는 정해진 시간, 정해진 위치, 정해진 시간간격, 고정된 알림만을 제공한다는 한계가 있다. 불특정한 시간(mobile team이 원하는 시간), 불특정 인원(특정 대상에게만 알림 보내기), 불특정 장소에 있는 유저에게 알림을 보내기 위해서 Remote Notification이 필요하다. Remote Notification이 가지는 가장 큰 특성은 알림을 보내는 시기와 메시지에 자유도가 높다는 것이다. 서비스 팀은 원하는 시점에 원하는 메시지를 전송할 수 있기 때문에 로컬 알림으로만은 부족한 User Experience를 보충할 수 있다.

Remote Notification의 핵심 플로우

Remote Notification은 아래 4가지의 핵심 요소와 관련되어 있다.

APNs의 역할

Remote Notification을 전달하기 위해 거치는 Apple Push Notification Service(APNs)가 하는 역할은 다음과 같다.

Connection Trust(APNs의 보안 기능)

APNs는 공급자 서버와 유저의 기기가 신뢰할만한 연결인지 판단하기 위해 Connection Trust를 보장하는 메커니즘을 가진다. 우선 공급자 서버와 APNs 간의 신뢰는 애플과 계약을 맺은 회사가 소유한 승인된 공급자만 APNs와 연결하여 푸시알림을 전달할 수 있도록 하기 위해 요구된다. 이러한 승인된 공급자의 예로 보편적으로 사용되는 Firebase Cloud Message 기능이 있다. Provider Server와 APNs 간의 신뢰 구축하는 방법으로 toke-based(유효한 인증 키)와 certificate-based(SSL 인증서 기반)가 있는데, Backend 개발자의 역할이기에 간단히 넘어가자.

다음으로 APNs와 Device의 Connection trust를 위해서는 Device token Trust 방식을 이용한다. 디바이스 토큰은 애플이 특정 장치의 특정 앱에 할당한 고유한 식별정보인 NSData인데, 이 객체는 오직 APNs많이 해독하고 이해할 수 있다. 따라서 누군가에게 탈취되어도 안전을 보장한다. 따라서 Remote Notification을 이용하기 위해서는 특정 앱의 특정 Device Token을 얻어서 APNs에 등록해서 알림이 전달될 디바이스가 어떤 디바이스인지에 대해 미리 알려줘야 한다. 이 토큰을 Provider Server에 제공하면 추후 Provider Server가 이 토큰에 원하는 메시지를 담아서 APNs에 전달하고, APNs는 다시 Device token에 담긴 정보를 토대로 목표 Device에 알림을 전달하는 것이다.

하나의 앱에 대한 device token은 해당 앱에서만 사용할 수 있다. 같은 기기에 설치되어 있는 다른 앱에서 재사용될 수 없다. 각각의 앱들은 반드시 그 앱만의 특별한 device token을 요청하고 provider server에 보내줘야 한다.

Remote Notification을 구현하기 위해 개발자들이 할 일

Remote Notification은 위와 같은 흐름으로 유저에게 전달되지만, 개발자는 이 모든 과정을 다룰 필요가 없다. 개발자들이 해야 할 일은 provider server를 세팅하고, 유저의 기기에 도착한 알림을 다를 수 있도록 Client를 세팅하기만 하면 된다. 알림에 대한 보안이나 관리는 APNs에서 모두 처리해준다.

이러한 Provider Server를 세팅하는 방법 중의 하나로 Firebase Cloud Messaging을 이용할 수 있다. APNs의 보안 요건을 갖춘 서버를 직접 구축하기 힘들거나 자체 서버를 구축할 수 없을 때, Console을 통해 간편하게 이를 세팅하고 iOS 앱 개발에 집중할 수 있다. 다음 글에서는 FCM을 이용하여 Remote Notification을 실제로 구현해 보겠다.

L-j-h-c commented 2 years ago

레퍼런스

개발자 문서