Payload


공급자 서버가 APN (ApplePushNotification Service)에 보내는 각 알림에는 페이로드가 포함되어 있다.


알림을 보내기 위해 메시지를 정의하고, 옵션을 선택하는 등의 역할을 하는  json 형태의 데이터다.





특징


- Json 형태의 데이터

- 디바이스로 알림을 보내기 위한 옵션 및 메시지 설정

- TCP Binary API 를 이용하여 보낼 시 최대 2KB 전송 가능

- HTTP/2 API 로 보낼 시 최대 4KB 데이터 전송 가능

- VolP 알림으로 보낼 시 최대 5KB 데이터 전송 가능






ex)


{ "aps" : { "category" : "NEW_MESSAGE_CATEGORY" "alert" : { "body" : "Acme message received from Johnny Appleseed", }, "badge" : 3, "sound" : “chime.aiff" } }







※ Aps Key에 대한 Json Dictionary



key

Value 

설명

Alert

String , 혹은 json dictionary

 

Badge

Number

0의 값은 뱃지를 제거

Sound

String

Apple 에서 지정한 string 문자열

Content-available

Number

1의 값은 백그라운드에서 앱을 깨우고 알림을 전달

category

String

알림의 식별자 값 지정

Thread-id

String

그룹화 알림을위한 앱 별 식별자를 나타내는 문자열 값을이 키에 입력하십시오. 알림 콘텐츠 추가 앱 정보를 제공하는 경우이 값을 사용하여 알림을 그룹화 할 수 있습니다.







※ Alert Key에 대한 Json Dictionary



key 

Value

설명

Title

String

알림의 제목

Body

String

 알림의 내용

Title-loc-key

String or null

로컬 라이즈 용의 파일 내의 타이틀 캐릭터 라인의 키

Title-loc-args

Array of String or null

가변 문자열 값의 형식 지정자의 장소에 표시

Action-loc-key

String or nullString

문자열을 지정하면 닫기 및보기 단추가 포함 된 경고가 표시됩니다.

Loc-key

String

현재 지역화 파일 의 경고 메시지 문자열에 대한 키

Loc-args

Array of string

가변 문자열 값의 형식 지정자의 장소에 표시

Launch-image

String

파일 이름 확장자의 유무에 관계없이 앱 번들에있는 이미지 파일의 파일 이름입니다. 사용자가 작업 버튼을 누르거나 작업 슬라이더를 움직일 때 이미지가 실행 이미지로 사용됩니다.
















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한다.






개요 



Apple Push Notification Service


- apns는 보안 연결을 통해 third-party server에서 앱이 설치된 사용자 디바이스로 푸쉬 알림을 보낼 수 있는 클라우드 서비스이다.




iOS 단말에 모바일 알림 서비스를 이용하려면 애플에서 자체적으로 구축된 푸쉬서버를 이용해야한다.







특징


Apnsend-to-end에서 시행한다.


- Provider는 메시지를 전달하는 공급자이며, 주로 3rd Party Server에서 수행된다. 


Apns에 연결하기 위해서는 인증 토큰 혹은 인증서를 사용해야 한다. 

  (인증토큰과 인증서는 https://developer.apple.com/account/ 에서 확인가능)



Apnstwo levels of trust와 함께 암호 검증 및 인증을 한다.(connection Trust token trust)
: Connection Trust는 연결 level에서 수행되는 암호 검증 단계
: token Trust는 단말기의 고유 deviceToken 인증 단계

- QoS를 지원한다.

 

Quality of Service(QoS)  구성요소 :  Stored-and-Forward, Coalesced Notification




  • QoS: 다른 응용 프로그램, 사용자, 데이터 흐름 등에 우선 순위를 정하여, 데이터 전송에 특정 수준의 성능을 보장하기 위한 능력

  • Stored-and-Forward: Apns가 알림을 전달하려고 할 때 장치가 오프라인이라면 일정 기간 동안 저장하고 장치가 다시 사용될 때 전달한다. 장치가 오프라인이라면 최신 알림만 보내고 이전 알림은 삭제하며, 오랫동안 오프라인이라면 모든 알림을 삭제된다.
  • Coalesced Notification :유사한 알림을 통합 할 수 있도록 알림 요청 내에 축소 식별자를 포함 할 수 있다.

  • 예를 들어 동일한 헤드 라인을 두 번 보내는 뉴스 서비스는 두 요청에 동일한 축소 식별자 값을 사용하여 통합된 알림으로 전송할 수 있다.







참고사이트: https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html












+ Recent posts