Push의 종류
- 로컬 푸시(Local Notification): 앱으로부터 push를 앱에 띄우는 것 => https://clamp-coding.tistory.com/43
- 서버 푸시(Remote Notification): 서버로부터 push를 앱에 띄우는것.
Remote Notification을 사용하는 상황?
- VIP를 선별하여 쿠폰을 발급하고 싶다.
- 내가 팔로우하는 사용자가 나를 태그했을 때 확인해 보라는 알람을 보내고 싶다.
- 불특정 시간, 불특정 인원, 불특정 장소에 상황에 맞게 알람을 보내고싶다.
Local에서 사용하는 장소, 시간, 간격에 맞춰 알람을 보내고싶은게 아닌, 특정 상황에 특정 타겟에게 알람을 보내고 싶을 때 필요한 Notification이다.
Remote Notification 전송 방식
서버에서 APNs를 거쳐 로컬 기기에 전달되게된다.
APNs(Apple Push Notification Service)
Remote Notification을 사용할 때 APNs를 무조건 거쳐야 한다.
서버에서 바로 기기로 알림을 보내지 않고 애플의 APNS를 무조건 거쳐야 한다.
APNs의 역할
1. APNs의 알림 전달 관리
APNs에는 저장 후에 전달기능을 수행하는 QOS가 포함되어있다.
만약 APNs가 알림을 전달하고자 할 때 사용자의 기기가 Off상태라면 제한된 시간동안 알림을 저장한다.
그 후 장치가 On이 되면 알림을 전달하게된다.
또한 APNs는 기기 및 앱 별로 가장 최근의 알림만을 저장한다. 따라서 장치가 Off라면 기존의 알림이 아닌 가장 최근의 알림만 전달하게된다.
여러 앱이 알림을 보내려하는데, 장치가 Off라면 앱 별로 가장 최신의 알림을 저장하고, 만약 Off인 시간이 길어지면 저장된 모든 알림을 삭제하는 식으로 관리된다. 이런 관리 센터의 역할을 한다.
2. APNs의 보안관리
보안이 약하거나 고려되지 않으면 특정 사용자에게 전달되어야할 알림이 탈취당하거나, 메시지가 오염되어서 전달될 수 있다. 이런 보안문제를 해결하기위해 APNs는 자체적인 보안아키텍처를 활용해 보안수준을 높인다.
이런 보안 수준 유지를 위해 두가지를 사용한다.
Connection trust(연결신뢰)
서버와 APNs, APNs와 장치간에 작동을 한다. 애플과 계약한 승인된 공급자만 APNs와 연결해서 보안 신뢰를 구성한다. 이를 위해 두 가지 방법을 사용한다.
서버와 APNs의 연결
- token-based: token을 사용해 유효한 인증키를 활용한다.
- certificated-base: 인증서 기반으로 SSL인증서를 이용해서 인증받는다.
- 현업에서 이 과정은 백엔드 개발자가 맡게된다.
APNs와 기기의 연결
- 승인된 장치만 APNs에 연결하여 알림을 받게 한다.
- 각 장치와 Cunnection trust를 자동으로 적용해서 안전성을 보장한다.
Device token
원격알림에서 end to end를 담당한다. 즉 알림의 제공자(서버)와 장치 사이에서만 라우팅 되도록 한다.
디바이스토큰은 특정 장치, 고유 앱에만 할당한 고유 식별자를 포함하는 NSData이다.
누군가 이 토큰을 탈취하더라도 내용을 이해할 수 없다. 오직 APNs만 토큰의 내용을 해독하고 이해할 수 있다.
그러므로 각 앱은 원격알림(Remote Notification)을 활용하기 위해 APNs에 등록을 하게되고, 이 때 고유한 장치 토큰을 받게된다.
그런 다음 해당 제공자(서버)에 토큰을 전달해야하고, 제공자(서버)는 연결된 장치를 대상으로 하는 각각의 push알림 요청에 장치토큰을 포함하여 전달해야한다.
APNs는 요청에 포함된 토큰을 통해 push알림을 고유한 사용자에게 전달할 수 있다.
디바이스토큰이 새로 발급되는 경우
APNs는 여러 상황에서 디바이스토큰을 새로 발급할 수 있다.
- 새 기기에서 앱을 다시 설치하는 경우
- 백업에서 기기를 복원하는 경우
- 운영체제를 다시 설치하고 업데이트 하는 경우
PushNotification의 동작방식
Push Server는 많은 사용자중에 특정 내 App에게만 알람을 보낼 수 있는가.
1. App이 APNs에게 Device Token을 요청한다.
위에서 설명했듯 Device Token은 푸시가 전송되는 App의 주소가 됩니다.
내 App을 찾는 방법이 Device Token이 되며 Device Token은 주소가 됩니다.
2. APN가 내 App으로 Device Token을 발급해줍니다.
3. App이 Push Server에게 Device Token을 전달합니다.
여기까지가 Push를 받기위한 필수동작입니다.
이 과정을 거쳐야 Push서버로 푸시 알람을 받을 수 있습니다.
이후과정은 Push 서버가 실제로 Push알람을 울리고 싶을 때 작동방식입니다.
Push알림 전송 과정
1. push서버는 push를 보내고 싶을 때 APNs에게 Device Token과 Data를 보냅니다.
push server는 특정 App으로 푸시알림을 보내고 싶은 경우 App으로부터 전달받은 Device Token, Data(어떤 메세지를 보낼것인지)를 APNs로 전달하게 됩니다.
이 때 APNs와 Provider는 TLS통신을 하기 때문에 Push Server에는 인증서가 준비되어 있어야 합니다.
* TLS는 TLS(1), TLS(2)를 참고하시면 좋습니다.
2. APNs는 해당 Device Token으로 데이터를 보냅니다.
.
3. Device에 알림 발생
Background상태일 경우 - OS에서 처리
Foreground상태일 경우 - AppDelegate에 정의한 대로 App위에 띄워짐
Push알림의 데이터 형식
Device Token에 데이터를 전달할 때 data는 256byte를 초과하지 않는 Json 데이터 형태여야 합니다.
{ "aps":
{
"alert": "메시지 도착"
"sound": "카톡!"
}
}