[iOS] Apple Push Notification Service(APNs) - 푸쉬 알림 등록 (1)

2021. 2. 20. 21:16iOS

반응형

Apple의 푸쉬 알림 등록을 공부해보고 기록해보려고 합니다.

Apple의 푸쉬알림은 등록하기가 꽤 까다로운데, 인증서를 막 주고받고 생성하기 때문에 다소 복잡합니다.

 

우선 첫번째 포스팅에서는 iOS에서 푸쉬알림을 구현하기 위해 알아야하는 개념에 대해 알아보겠습니다.

 

APNs란

애플에서 푸쉬알림을 구현하기 위해서는 우선 애플 개발자 계정이 필수입니다.

그리고 우선 APNs라는 개념을 알아야 어떻게 APNs에서 각 앱을 설치한 Device로 알림을 보내는지 이해할 수 있습니다.

 

APNsApple Push Notification Service의 약자입니다.

이 곳에서 각 디바이스로 보내기 원하는 메세지를 받고 그리고 이곳에서 그 메세지의 신뢰도를 검사해서 각 Device의 앱으로 푸쉬알림을 보내주게 됩니다.

 

즉, 모든 푸쉬알림을 보내기 위해 중재를 하고 있는 센터라고 생각하면 될 것 같습니다.

 

그렇다면 어떤 절차로 메세지가 전송되고 수신되는지를 알아보겠습니다.

위의 그림을 보면 푸쉬 알림을 보내길 원하는 ProviderAPNs로 메세지를 보내게되면 이 곳에서 인증서를 확인해서 신뢰하는 Provider인지 확인하고 각 Device로 알림을 보내주게 됩니다.

 

위의 절차들 때문에, APNsProviderDevice 사이에 각각의 인증서가 필요하게 됩니다.

 

 

Provider - APNs 신뢰 설정

우선, Provider - APNs 사이 신뢰 설정을 알아보겠습니다.

 

신뢰를 설정하기 위한 2 가지 방법이 있습니다.

  • Token-based provider connection trust : Provider는 HTTP 통신 기반의 API를 사용하여 JWTAPN 연결을 위한 유효성 검사 자격 증명을 제공할 수 있습니다. 여기서 APN이 보유 할 공개 키를 제공합니다. 그리고 개인 키를 하나 소유합니다. 그리고 Provider는 개인 키를 이용하여 JWT Provider 인증 토큰을 생성하고 서명합니다. 이렇게 개인 키로 생성된 인증 토큰을 푸쉬 알림 요청에 같이 보내야합니다.
  • Certificate-based provider connection trust : 이 방법은 Apple Developer 사이트에서 푸쉬 서비스를 설정할 때, Apple에서 제공한 공급자 인증서를 이용하는 방법입니다. 이 Certificate는 하나의 Bundle Identifier를 대상으로 동작합니다. p12, p8 방법이 있는데 요즘은 p8 방식을 이용하는 듯합니다. p8을 이용하면 1년마다 인증서를 갱신하지 않아도 된다고 한다. 그리고 p12의 경우에는 여러 앱에 공통으로 사용할 수 없는 반면 p8은 여러 앱에 동일하게 사용이 가능하다고 한다.

여기서 2번째 포스팅에서 실습해 볼 방법은 두 번째 방법입니다. 

 

그렇기 때문에, 두 번째 방법에 대해 자세히 알아보겠습니다.

 

우선 Provider에서 APNs 서버로 TLS 연결을 설정하고 APNs로부터 Certificate를 발급받습니다. 그리고 Provider는 반드시 Apple-provisioned provider Certificate를 포함해서 APNs에게 보냅니다. 이 Apple로부터 발급받는 CertificateApple Developer 사이트로부터 발급받을 수 있는 자격증명서입니다. 그리고 이 Certificate가 유효하게 되면 둘 사이에 연결이 설정됩니다.

 

 

APNs - Device 신뢰 설정

Device에는 암호화 인증서와 개인 암호화 키가 있습니다. 그리고 최초 Device의 운영체제(iOS, MacOS)에서 기본으로 제공하고 KeyChain에 저장됩니다. 그리고 APNs는 인증서 및 키를 기반으로 장치에 대한 연결을 인증하고 유효성을 검사하게 됩니다.

연결이 설정되면, 장치는 앱이 APN에 등록하여 원격 알림을 위한 앱별 장치 토큰을 받을 수 있습니다.

 

앱별로 발급받는 토큰은 NSData 타입으로 인코딩되어 있고 APNs에서만 이를 디코딩할 수 있습니다. 기기 토큰을 받은 후 앱은 Provider에게 연결하고 토큰을 전달해야한다. 왜냐하면, 앱으로 푸쉬 알림을 보내기 위해서는 꼭 장치 토큰을 포함해야하기 떄문에 꼭 전달해야한다. (이 부분이 최초에 앱을 실행하고 앱 별 서버로 보내는 절차가 필요하다는 뜻이다.)

이제 기기의 토큰을 받은 상태가 되어서야 ProviderDevice로 푸쉬알림을 보낼 수 있습니다.

 

APNs는 이 토큰을 받아서 수신자와 발신자가 모두 신뢰된다고 판단하면 각 Device로 푸쉬알림을 보내게 됩니다.

 

 

이렇게 오늘은 간단하게 APNs를 이용해서 iOS 앱에서 푸쉬알림을 보내기 위한 절차에 대한 이해를 도와보았습니다.

다음 포스팅에서는 바로 어떻게 적용하는지 알아보고 실제로 간단하게 만들어보겠습니다 :)

 

 


참고문서

 

  • Apple Developer - Remote Notification Programming Guide
 

Local and Remote Notification Programming Guide: APNs Overview

Apple Push Notification service (APNs) is the centerpiece of the remote notifications feature. It is a robust, secure, and highly efficient service for app developers to propagate information to iOS (and, indirectly, watchOS), tvOS, and macOS devices. On i

developer.apple.com

 

반응형