반응형

APNs 이란?

APNs(Apple Push Notification Service)는 Apple Device에 Push를 보내줄 수 있는 서비스이다. 지원하는 방식으로는 다음과 같다.

 

Legacy Push

- TLS(SSL) 소켓 통신

- Production(gateway.push.apple.com:2195) / Development(gateway.sandbox.push.apple.com:2195) 

Push

- HTTP/2 통신

- Production(api.push.apple.com:443) / Development(api.sandbox.push.apple.com:443) HTTP/1.1 통신을 지원하지 않는다.

 

APNS 기능

기본적으로 Push Notification 은 단방향 서비스이다.

개발 서버에서 APNS 에 푸쉬 알림을 요청하면 APNS가 알아서 디바이스에 전송한다.

개발 서버는 APNS에 요청하면 할 일은 끝이다.

개발 서버는 APNS 에 푸쉬 알림을 요청할 때, 데이터 format 등에 대한 정상 여부는 리턴 받지 만 실제 도착여부에 대해서는 리턴을 받지 못한다.

사용자가 설정에서 알림을 끄더라도 알림이 출력되지 않지만 알림 수신은 된다.

사용자가 알림을 중지했는지 여부는 알 수 없다. (즉 앱에서만 알 수 있음)

 

 

APNS 유실되는 사례

디바이스 전원이 꺼져있는 경우 APNS의 QoS (Quality of Service) 컴포넌트는 디바이스 전원이 꺼져있는 경우, Notification을 잠시 저장했다가 다시 사용 가능해질 때 Notification이 전달되도록 하지만, 다 음의 경우 저장된 Notification이 폐기된다.

 

- 잠시 꺼져 있는 경우(얼마나 잠시인지 명시되지 않았음) , APNS는 Notification을 저장을

하는데 저장 가능한 Notificaiton은 하나다. 디바이스가 꺼졌있는 동안 하나의 앱에서 여러

개의 푸쉬 알림을 보낸다면, 제일 나중에 보내진 Notification만 저장되어 전달된다. 이전

에 저장된 Notification 은 폐기된다.

 - 장시간 꺼져 있는 경우 (장시간이 얼마나인지는 명시되지 않았음), 저장된 Notification은 폐기된다.

 

APNS 서버 응답 코드

- 200 성공 

- 400 잘못된 요청 

- 403 인증서 또는 공급자 인증 토큰에 오류가 발생했습니다.

- 405 요청에 bad : 메서드 값이 사용되었습니다. POST 요청 만 을 지원합니다. 

- 410 장치 토큰이 해당 항목에 대해 더 이상 활성화되지 않습니다.

- 413 알림 페이로드가 너무 큽니다.

- 429 서버가 동일한 장치 토큰에 대해 너무 많은 요청을 수신했습니다.

- 500 내부 서버 오류 503 서버가 종료되어 사용할 수 없습니다.

- 503 서버가 종료되어 사용할 수 없습니다.

 

 

Feedback Service

Feedback 서비스는 Notification 전달 실패 정보를 개발 서버에 알려주기 위한 서비스다. 푸쉬 알림이 앱이 삭제된 이유로 전달되지 못했다면 , APNS 는 이를 Feedback 서비스에 알리 고 Feedback 서비스는 실패한 디바이스의 토큰을 리스트에 저장한다.

APNS 에서 푸쉬 알림을 디바이스로 전송하기 전에 실패한 – data format error 등 – 경우에 는 Feedback 서비스의 리스트에 등록되지 않는다.(즉, 전송자체가 성공한경우 Feedback 서 비스 사용이 가능함) 개발 서버는 APNS 연결과는 별개로 Feedback 서비스에 접속해서 디바이스 토큰 리스트를 요 청해야 한다. Feedback 서비스는 리스트가 요청될 때마다 리스트를 전달한 후 리스트를 초기화 (clear) 한다.

Feedback 서비스로부터 받은 리스트의 데이터에는 timestamp 정보가 포함되어 있다. 이를 이용하여 리스트에 있는 디바이스 토큰이 Push Service에 재등록되어 있는지를 확인할 수 있 다. (푸쉬 알림을 보낸 시각과 디바이스 토큰의 timestamp 를 비교하면 디바이스 토큰의 재등록 여부를 확인할 수 있다.)

 

Feedback 서비스로의 요청을 위한 url, port 및 format 등의 내용은 아래 링크 참조.

https://developer.apple.com/library/archive/documentation/NetworkingInternet/ Conceptual/RemoteNotificationsPG/BinaryProviderAPI.html

 

 

2020/05/19 - [개발노트] - UUID의 구성 요소

2020/05/18 - [분류 전체보기] - Multiple font colors in a single UILabel

2020/05/18 - [개발툴/Xcode] - Storyboard References (스토리보드 분리)

2020/05/18 - [iOS/Jailbreak] - OpenSSL Mac 연동

2020/05/18 - [iOS/Objective-C] - NSLog 출력 크기 제한 풀기

2020/05/18 - [OS/Mac OS X] - Symbolic Link

2020/05/18 - [개발툴/Xcode] - Release 모드에서 디버깅

2020/05/18 - [iOS/Jailbreak] - 탈옥후 안정화

2020/05/15 - [iOS/Swift] - 다중 문자열 / 캐릭터 제거

2020/05/15 - [iOS/Swift] - String substring

2020/05/15 - [iOS/Swift] - Framework 경로

2020/05/15 - [iOS/Objective-C] - Frameworks 경로

2020/05/15 - [iOS/Objective-C] - iOS디바이스 설정창 이동

2020/05/15 - [iOS/Objective-C] - Xcode 한글 깨짐 복구

 

반응형

'개발 > iOS' 카테고리의 다른 글

Frida 설치 및 사용법  (0) 2020.05.19
Tcpdump 사용법  (0) 2020.05.19
Multiple font colors in a single UILabel  (0) 2020.05.18
OpenSSL Mac 연동  (0) 2020.05.18
NSLog 출력 크기 제한 풀기  (0) 2020.05.18
블로그 이미지

SKY STORY

,