- push notification: 앱이나 웹사이트에서 사용자 디바이스로 보내는 짧은 메시지
- 초당 수백만개의 푸시가 APNS를 통해서 보내진다.
- 사용목적
- 적절한 정보를 때에 맞게 사용자에게 제공하기 위해서
- 동적인 경험을 제공
- 사용자를 끌어들이고 앱을 최신으로 유지하게 해줌
- 동작 원리
- 사용자에게 푸시 동의를 구한다.
- 동의하면 APNS가 디바이스 토큰을 만들어서 디바이스로 보낸다.
- 이 토큰은 특정 디바이스에서 앱을 유일하게 식별할 수 있게 해준다.
- 토큰은 변할 수 있기 때문에 서버쪽의 토큰을 최신으로 유지해야 한다.
- 토큰을 서버로 넘겨서 추후에 사용할 수 있게 한다.
- 서버는 이 토큰을 사용해서 APNS에 요청을 보낸다.
- APNS는 해당 디바이스에 push notification을 보낸다.
- Push Notification Console은 APNS와 상호작용하기 위한 도구들을 제공하기 위한 신규 도구
- Send notifications
- 앱을 개발하고 푸시를 붙이고 나면, E2E 테스트를 해보고 싶을 것이다.
- 콘솔에서 payload를 편집하고, 디바이스 토큰을 설정해서 즉시 보내볼 수 있다.
- 편집 form을 제공하고, raw json으로 넣을 수도 있다.
- 여기서 보낸 히스토리가 남는다.
- 여러 타입의 notification테스트 가능
- environment
- push type
- expiration
- priority
- examine delivery logs
- 가끔 notification이 전달이 안될 때가 있다. 이런 경우를 분석할 때 유용하다.
- notification이 APNS 스택을 지나갈때마다 전달 과정에서 발생하는 이벤트들이 기록된다.
- 이제 APNS가 반환하는 헤더의 apns-unique-id 값을 이용해서 이 정보를 가져올 수 있다.
- 테스트 해볼때는 저전력 모드로 notification이 오지 않는 상황을 시뮬레이션 할 수 있다.
- 디바이스가 저전력 모드이기 때문에 notification 발송이 딜레이된다.
- 저전력모드가 꺼지면 그 때 딜레이된 notification이 들어온다.
- Delivery Log 탭에 apns-unique-id 값을 넣으면 APNS에서 해당 notification의 이벤트 로그를 볼 수 있다.
- 각 이벤트가 무엇인지 뿐 아니라 왜 일어났는지도 자세하게 알려준다.
- ex. 디바이스가 오프라인이여서 APNs가 임시로 저장해놓기, 앱이 지워져서 버려진다던지
- 테스트용으로 보낸 것 뿐 아니라 정식으로 APNs API를 사용해서 보내진 notification도 똑같이 로그를 볼 수 있다.
- 테스트용으로 콘솔에서 보낸 것은 Send 탭에서도 같은 정보를 볼 수 있다.
- Debug with tools
- APNs 인증은 두가지가 있다.
- Certificate base: SSL인증서를 사용해서 신뢰하는 연결을 구축
- Apple Developer Portal에서 인증서를 각 앱 및 환경마다 만들어야 한다.
- 만료 기한이 있기 때문에 주기적으로 갱신해야 한다.
- Token base: JWT 기반
- 애플 개발자 계정 기반의 비밀키로 서명된 토큰이 필요하다.
- 비밀키는 인증서와 달리 만료되지 않는다.
- Console에서 토큰을 만들 수 있는 기능이 추가 되었다.
- 비밀키와 Key ID를 입력하면 된다.
- 이렇게 만든 토큰은 1시간내에 만료되기 때문에 임시적으로만 써야 한다.
- 비밀키는 어디도 업로드가 되지 않고 브라우저 내에서만 사용된다.
- 토큰이 이미 있는데 동작하지 않는 것 같다면 인증 토큰 검증기를 사용한다.
- 디바이스 토큰 검증기
- 디바이스 토큰은 environment와 push type과 연관이 있다.
- 디바이스 토큰을 넣으면 이 정보를 알 수 있다.