미완성인 글입니다.
iOS 에서 알림에는 크게 두 종류가 있다.
Local notifications
앱이 시간이나 장소 같은 상태가 알림을 생성한다.
Remote notifications
서버가 푸시 알림을 발생하고, Apple Push Notification service (APNs) 가 알림을 사용자 기기에 전송한다.
이 글은 Remote notifications (= 푸시 알림 = 원격 알림)에 대한 내용을 다룹니다.
로컬 알림, 알림 허용, PushKit, HIG 등 다른 내용은 다루지 않습니다.
푸시 알림 전달에는 다음와 같은 주요 구성 요소가 있다.
provider server: 나의 서버
유저의 기기에서 알림을 처리하려면 개발자가 별도의 서버를 설정해야 한다.
Apple Push Notification service (APNs)
유저 기기
유저 기기에서 작동하는 앱
나의 서버에서 어떤 알림을 언제 전송할 것인지 결정되면, 알림 데이터와 고유 식별자를 가진 Request 를 생성해야 한다. 그 요청을 APNs 에게 전송하면 APNs 는 유저의 기기에 알림을 전송한다.
원격 알림 서버 설정에는 다음과 같은 주요 작업이 필요하다.
사용자 기기에서 실행중인 앱 인스턴스에서 디바이스 토큰을 수신하고, 해당 토큰을 사용자 계정과 연결하는 코드를 작성한다.
Registering Your App With APNs
사용자에게 알림을 보낼 시기를 결정하고, 알림 페이로드를 생성하는 코드 작성.
Generating a remote notification
HTTP/, TLS 를 사용하여 APN에 대한 연결 관리.
Sending notification requests to APNs
페이로드가 포함된 POST 요청을 생성하는 코드 작성, HTTP/2 연결로 해당 요청 전송.
Sending notification requests to APNs
토큰 기반 인증을 위해 토큰을 주기적으로 다시 생성한다.
Establishing a token-based connection to APNs.
서버와 APNs 간의 통신은 보안 연결을 통해 이루어져야 한다. 그러기 위해선 각 서버에 AAA 인증서 서비스 루트 인증서를 설치해야 한다.
알림을 보내려면 서버가 HTTP/2, TLS 를 사용하여 token-based (.p8) 또는 certificate-based (.p12) 를 설정해야 한다. 두 기술중에 적합한 기술을 선택해야 한다.
APN 은 사용자 기기에 대한 인증되고 암호화된 영구 IP 연결을 관리한다.
또한 오프라인 상태인 기기에 대한 알림을 저장하고 기기가 온라인 상태가 되면 저장된 알림을 전달한다.
또, 푸시 알림을 테스트 할 수 있다.
WWDC 2023 - 푸시 알림 콘솔 알아보기 참고
알람을 보낼 시기를 결정하고, 전송하려면 Provider Server 가 필요하다.
직접 알림 전송 기능을 하는 백엔드 서버를 구현하거나, 메세징 기능을 제공하는 AWS SNS, Firebase FCM 등을 사용하면 된다.
일반적으로 많이 사용하는 방법은 FCM (Firebase Cloud Messaging) 이다.
다른 서비스를 AWS 로 다 사용한다고 해도 알림 전송 기능 만큼은 FCM을 주로 사용한다.
그러므로 FCM을 사용하여 구현하기로 했다.
WWDC 2020 - The Push notifications primer
Youtube - Swift: Push Notifications Tutorial (2024) – iOS Development