Apns Connection Server


HTTP/2


Development enviroment : api.development.push.apple.com: 443 
production enviroment : api.push.apple.com: 443

(APN과 통신 할 때  2197 포트도 사용가능)


HTTP / 2 PING프레임을 사용하여 연결 상태 확인

 HTTP / 2 연결을 종료하기로 결정하면 GOAWAY프레임으로 확인 가능


    TCP Binary


Development enviroment : gateway.sandbox.push.apple.com : 2195 port

production enviroment : gateway.push.apple.com  : 2195 port


Development enviroment : feedback.sandbox.push.apple.com : 2196 port

production enviroment : feedback.push.apple.com  : 2196 port







Apns Connection Trust

APN에 연결할 때 공급자가 TLS 1.2 이상으로 연결 (Http 방식에서만) , 기본적으로 TLS 및 SSL 방식에서 연결
APN 공급자 apns 인증서 없이 연결하려면 개발자 계정을 통해 제공되는 키로 서명 된 공급자 인증 토큰을 만들어야 함. (Json Web Token)
APN은 각 연결에 대해 여러 개의 동시 스트림을 허용.

인증서가 아닌 토큰을 사용하여 APN에 대한 연결을 설정할 때 유효한 공급자 인증 토큰을 사용하여 푸시 메시지를 보낼 때까지 하나의 스트림에 연결 

-> 즉, 개발자 계정의 인증서 파일 혹은 개발자 인증 토큰을 통해 연결을 해야함.




   Device to Apns Connection




1.APNS 서버에 보안연결을 요청. (암호화 보안 프로토콜 SSLTLS) 

2.APNS 인증

3.APNS 인증서의 유효성 검사 
4. 디바이스 단말 인증
5. Device 인증서 유효성 검사 확인 이후 연결





  Provider to Apns Connection




1.APNS 서버에 보안연결을 요청. (암호화 보안 프로토콜 SSL과 TLS) 
2.APNS 인증
3.APNS 인증서의 유효성 검사 
4. 푸쉬 메시지 전송 ( 전송할 단말의 디바이스 토큰 값과 함께)
5. Provider의 인증토큰 값을 검사 (token Trust)
        6. Requst의 대한 응답

=> 기본적으로 http 방식으로 APNS와 연결하고자 할 때, JWT로 구성된 token 값이 포함되어야 한다. ( Device의 고유한 token과는 별개의 개념)
=> TCP 방식으로 구현하고자 할 때 token 값 대신 인증서가 있어야 한다.





Provider to Device Push Notification



메시지 공급자에서 iOS 단말 디바이스로 메시지를 보내는 플로우는 다음과 같다.



1. iOS 디바이스 토큰 값이 Apns 서버에 먼저 등록되 있어야 한다.


2. 메시지 공급자는 디바이스 단말의 토큰과 보내고자 하는 메시지를 포함하여 APNs 서버에 요청한다. 


3.  위의 방식은  http 방식의 요청이기 때문에 token 값을 포함하여 인증해야 한다.


4. apns 서버는 인증 토큰을 토큰 키와 함께 복호화 하여 payload에 담겨진 notification message를 디바이스에 push한다.












-> 정리하면 Provider에서 APNS에 Connection 하기 위해 HTTP / TCP 방식으로 구현 가능하며, 각 각 인증 토큰 값과 인증서 파일이 필요하다.

-> 디바이스 단말 token 값은 Apns 서버에 먼저 등록되어야 하며, 등록된 고유 디바이스 단말 token으로 인증 token과 함께 notification을 push한다.





+ Recent posts