Apns Provider API



1. HTTP/2 프로토콜을 통해 APNS와 연결 가능하며, 인증서와 JWT Token을 이용해 푸쉬 알림을 보낼 수 있다.


2. HTTP/2 프로토콜을 이용한 APNS는 다음과 같은 특징을 갖고 있다.


http/2 ping Frame을 통해 연결 유지 가능하다.

http/2 goaway Frame을 통해 연결 종료 가능하다.








Request Format 





<HTTP/2 Header> 



Method

POST

PATH

/3/device/<장치토큰>




위의 두가지는 필수적으로 추가해야한다.

추가적으로 포함시켜야 하는 키와 데이터는 다음과 같은 항목이 있다,.



- authorization : 인증서 방식이 아닌 토큰 방식을 사용할 때 사용되는 키값이다.

 (토큰은 base64url인코딩된(Signature) jwt format 이어야 한다구체적으로 Bearer + <jwt token> 형태이다.)


- apns-topic : 인증서 방식이 아닌 토큰 방식을 사용되는 키값이다. 토큰 방식은 모든 앱에 전송할 수 있다.

 그렇기 때문에 apns-topic 키 값의 앱의 bundle_id에 해당하는 데이터를 입력한다.


- apns-idUUID , 형태는 32글자의 소문자를 포함한 16진수 Ex) 123e4567-e89b-12d3-a456-42665544000)


apns-expirationutc 시간, 0이면 저장하지 않고 바로 보낸다.


apns-priority : 10이면 즉시보내고, 5이면 클라이언트의 전원장치를 고려하여 전송한다. 기본값은 10이다.


apns-collapse-id64바이트를 초과하지 않아야 하고, 동일한 식별자 값의 알림을 단일 알림으로 표시한다.






<HTTP/2 Body>


- 보내고자 하는 Payload 데이터를 담아 보낸다.












Response Format




<HTTP/2 Header> 


Apns-id

Request apns-id의 값. 요청에서 포함하지 않았다면 apns 서버 자체적으로 새uuid를 만들고 헤더에 반환한다.

Status


응답 코드





Status 









<HTTP/2 body> 


- 성공적으로 request 요청이 수행되면 body 데이터는 비어있다.


- 실패하면 다음과 같은 항목이 포함된다.




Reason

실패에 대한 이유

timestamp


410 에러 상태일 때만 나오는 키 값 , 디바이스 토큰이 마지막으로 활성화 되었을 때의 시간






Status 및 Reason 









Netty를 통해 샘플코드를 작성해볼 수있다.





참고

https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/BinaryProviderAPI.html#//apple_ref/doc/uid/TP40008194-CH13-SW1









+ Recent posts