1. APNs의 의미와 동작원리
애플 푸시 알람 서비스(APNs: Apple Push Notification service)
타사 응용 프로그램 가발자가 Apple장치에 설치된 응용 프로그램에 알림 데이터를 보낼 수 있도록 만든 플랫폼 알림 서비스.
위의 과정을 거쳐 최종적으로는 App으로 알림을 하게 된다. 이때 APNs에 통보 요청을 보내면서 페이로드(payload) 및 배달 정보가 포함되며, APNs는 사용자를 대신해서 해당 장치에 알림을 전달한다.
2. APNs의 구성요소
1) Quality of Service, Store-and-Forward, and Coalesced Notifications
① APNs는 저장 후 전달 기능을 하는 QoS(Quality of Service) 구성요소가 포함되어 있다.
② 알림을 보낸 대상 기기가 오프라인일 경우 일정 기간동안 알림을 저장하고 기기가 다시 사용 가능한 상태일 때 알림을 전송한다.
③ 저장된 알림 중 최신 알림만 저장하고 오프라인일 경우 해당 장치에 알림 요청을 보내면 이전 알림 요청은 삭제된다.
④ 오랜 기간 오프라인일 경우에는 APNs에 저장된 모든 알림은 삭제된다(같거나 비슷한 알림 합치기) // 비슷한 내용의 알림이 있을 때, 두 개의 알림을 두 번 띄우는 것보다 하나의 알림을 띄우는 것이 좋을 때, apns-collapse-id Key를 requestHeader에 추가를 하고 요청하면, 같은 Key를 가진 알림은 합쳐져서 알림이 전송된다.
2) 보안
① Provider Server와 APNs와의 연결 신뢰
provider server와 APNs 간의 연결이 푸시 알림을 전달하기 위해 Apple과 계약을 맺은 회사가 소유한 서버에 대해서만 가능하다(여기서 계약은 개발자 계정 결제를 뜻하며, 인증된 Provider SSL Certificate나 Authentication Key certificate를 의미함)
② APNs간 연결 신뢰
승인된 장치만 APNs에 연결하여 알림을 수신할 수 있도록 한다. APNs는 각 장치와의 연결 신뢰를 자동으로 시행하여 장치의 정당성을 보장한다.
③Provider-To-APNs연결 신뢰
-Token기반 Provider 연결 신뢰: Provider(Server)는 HTTP/2 기반 API를 사용하기 때문에 APNs와 연결을 위해 JWT(JSON Web Tokens) 사용이 가능하다. 이 구성의 경우 Apple이 보유한 공개 키, 보유 키, 개인 키를 제공하고 보호해야 한다.
-Certificate기반 Provider 연결 신뢰: Provider는 개인 암호화된 키와 인증서로 고용할 수 있다. 개발자 계정 등록이 되어 있어야 하며 앱의 Bundle ID도 등록돼 있어야 한다.
3) Device Token: Apple에서 암호화 하여 전달될 64byte 문자열이다. 개념적 정의는 특정 디바이스와 특정 Apps를 특정하는 역할이다. 쉽게 생각하면 메일 수신 주소와 비슷하다. 예를 들어 someApps@someDevice.com으로 얘기할 수 있다. Device Token은 두 종류가 있으며, 개발용과 배포용으로 나뉜다.
4) Provider Server: Apple의 APNs 클라우드 서버에 특정 DeviceToken으로 어떤 메시지를 보내달라고 요청하는 전용 서버인데, 이해하기 쉬운 예를 들면 보내기 전용 메일 서버 같은 개념이다. 즉 DeviceToken은 E-mail 수신자 역할을 하고, APNs Provider는 해당 수신자로 어떤 내용을 보내달라고 APNs에 요청한다. 이때 Apple의 Colud와 SSL 보안 접속을 하기 때문에 해당 서버에는 인증서가 설치되어 있어야 한다.
3. Protocol 방식
APNs는 두 가지 방식의 프로토콜 방식을 지원하고 있다.
1) TCP: Binary Provider API 2) HTTPS: APNs Provider API
Binary Provider API | APNs Provider / Notification API | |
Protocol | TCP | HTTP/2 |
Host/Port |
gateway.sandbox.push.apple.com / 2195 gateway.push.apple.com / 2195
feedback.sandbox.push.apple.com / 2196 : feedback.push.apple.com / 2196 |
api.development.push.apple.com: 443 api.push.apple.com: 443 Port is 443 or 2197 |
Data | 2KB | 4KB |
Figure | High Capacity | High Security, High Speed |
Certificate | .p12 | .p8 / .p12 |
Feedback Service | O | X |
-Protocol: Binary Provider API에서는 TCP, APNs Provider API에서는 HTTP/2 Protocol 기반에서 수행된다.
-Host/Port: sandbox가 붙으면 개발서버, 아니면 운영서버고, Binary Provider API는 피드백 서비스를 활성화 해야한다.
-Data: payload의 용량 제한은 각각 위 표와 같다.
-Figure: Binary Provider API에서는 비동기식 처리가 가능하고 생산선이 좋은 반면, HTTP/2 방식은 보안과 속도 측면에서 뛰어나다는 장점이 있다.
-Certification: TCP 방식은 .p12 인증서 파일만 사용 가능하며, HTTP/2 방식으로 했을 경우에는 Token 방식을 사용할 수 있기 때문에 .p8 파일을 이용하여 여러 앱에 푸시 알림을 보낼 수 있다.
-Feedback Service: Feedback Service는 메시지 전달 실패에 대한 정보를 제공하는 서비스다.
4. APNs Provider API
HTTP/2 프로토콜을 통해 APNs와 연결 가능하며, 인증서와 JWT을 이용해 푸시 알림을 보낼 수 있다.
1) 특징
A. Request Format
<Http2/ Header>
필수사항으로 포함해야 하는 Key와 Data는 다음과 같다.
Method | POST |
Path | /3/Device/<장치 토큰> |
추가적으로 포함해야 하는 키와 데이터는 다음과 같다.
-authorization : 인증서 방식이 아닌 토큰 방식을 사용할 때 사용되는 키 값이다(토큰은 base64url에 인코딩된(Signature) jwt format 이어야 한다. 구체적으로 Bearer + <jwt token> 형태다.)
-apns-topic : 인증서 방식이 아닌 토큰 방식을 사용되는 키 값이다. 토큰 방식은 모든 앱에 전송할 수 있다. 그렇기 때문에 apns-topic 키 값의 앱의 bundle_id에 해당하는 데이터를 입력한다.
-apns-id : UUID 값, 형태는 32글자의 소문자를 포함한 16진수 / 예) 123e4567-e89b-12d3-a456-42665544000)
-apns-expiration : utc 시간, 0이면 저장하지 않고 바로 보낸다.
-apns-priority : 10이면 즉시 보내고, 5면 클라이언트의 전원장치를 고려하여 전송한다. 기본값은 10이다.
-apns-collapse-id : 64바이트를 초과하지 않아야 하고, 동일한 식별자 값의 알림을 단일 알림으로 표시한다.
<HTTP/2 Body>: 보내려고 하는 payload 데이터를 담아 보낸다.
B. Response Format
<HTTP/2 Header>
APNs-id | Request APNs-id 값. 만약 Request에서 포함하지 않았으면 APNs 서버 자체적으로 새 uuid를 만들고 Header에 반환한다. |
Status | 응답 코드 |
<HTTP/2 Body>
Reason | 실패에 대한 이유 |
TimeStamp | 410Error일 때에만 나오는 Key값, Device Token이 마지막으로 활성화 되었을 때의 시간 |
'etc.. > 그 외' 카테고리의 다른 글
XML 파서(Parser) (0) | 2020.12.09 |
---|---|
XMLHttpRequest (0) | 2020.12.09 |
XML DOM (0) | 2020.12.09 |
XML (0) | 2020.12.08 |
댓글