RSS

애플 푸시 알림 서비스(APNS) 개요

04 5월
애플의 푸시 노티피케이션 서비스(APNS)를 사용하는 방법
1. APNS란?
iOS 앱스가 백그라운드로 돌아가고 있을 때에도, 해당 앱을 깨우거나 메시지를 전달할 수 없을까? 크게 두가지로 방법이 있는데 하나는 local notification과  remote notification이다. 이름처럼 local notification은 앱스 내의 타이머를 세팅하고 알람해주는 방식이고 remote notification은 원격 서버에서 메시지를 보내서 앱스에게 전달되는 방식이다. (주의! local notification은 ios 4.0 이후로 지원한다.)
본 글에서 이야기 하려는 것은 remote notification이다.
2. 등장인물
remote notificaiton을 설명하려면 세명의 등장인물이 있다. 앱스와 APNS서버와 APNS Provider 이다. 이들의 역할은 다음과 같다.
  • 앱스  – 내가 만든 앱
  • APNS서버 – 애플이 구축해놓은 iOS장치로 푸시 메시지를 보내는 클라우드 서버
  • APNS Provider – 애플의 APNS서버로 특정 디바이스의 앱스로 푸시 메시지를 보내달라고 요청하는 역할의 전용 서버.
3. 동작 방식
이 주인공들 사이에서 어떤 일이 일어나서 푸시 메시지가 전달되나 살펴보면 다음과 같다.
  1. 어떤 앱스가 APNS서버에게 푸시용으로 사용할 deviceToken를 요청해서 받는다.
  2. apps는 받은 deviceToken를 APNS Provider에게 보낸다.
  3. APNS Provider는 해당 deviceToken으로 푸시 메시지를 보내줄 것을 APNS서버로 요청한다.
  4. APNS 서버는 deviceToken를 보고 어느 디바이스의 어떤 앱스인지 판단하고 보낸다.
4. device token 좀 더 자세히
device token은 애플에서 암호화 해서 전달될 64바이트 문자열이다. 개념적 정의는 어느 디바이스와 어느 앱스를 특정하는 역할이다. 즉 메일 수신 주소와 비슷하다. someApp@someDevice 으로 이해하면 되겠다. 이것은 iOS앱스를 실행할 때 미리 정의된 콜백함수를 구현함으로 받을 수 있다.

– (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

device token은 두 종류가 있는데, 개발(development)용과 배포(production)용이다. 개발인증서로 sign된 경우는 development용 device token이, 배포용인 경우는 배포용으로 받아지게 된다.
5. APNS Provider
애플의 APNS 클라우드 서버에 특정 deviceToken으로 어떤 메시지를 보내달라고 요청하는 전용서버인데, 이해하기 쉬운 예를 들자면 보내는 메일 서버같은 개념이다. deviceToken이 이메일 수신자라면 APNS Provider에서 해당 수신자로 어떤 내용을 보내달라고 요청한다. 이때 애플의 클라우드와 SSL 보안 접속을 하기 때문에 이 서버에는 인증서가 설치되어 있어야 한다.
필자도 apns-php 프로젝트의 도움으로 쉽게 푸시서비스를 구현할 수 있었다.
관련 참고 자료
Advertisements
 
 

태그: , , ,

애플 푸시 알림 서비스(APNS) 개요”에 대한 12개의 응답

  1. 초보자

    2011년 5월 20일 at 11:39 오전

    질문이 하나 있습니다.

    푸시테스트를 위해 여러가지 방법으로 시도 중입니다.

    질문은…-> 디바이스 토큰이 변하기도 하나요???
    원래 있었던 로직상 성공했지만 푸시가 오지 않더라구요.
    ㅠㅠ

     
    • 최피디

      2011년 5월 20일 at 12:26 오후

      디바이스 토큰은 개발용과 프로덕션용이 다른 것을 주지하셔야 하구요. 프로적션 용 토큰이 바뀌는 경우는 디바이스를 공장초기화 하는 경우가 있어요.

       
  2. kaojinz (@kaojinz)

    2011년 11월 2일 at 7:20 오후

    안녕하세요. 최피디님 혹시 앱엔진에서 APNS가 되던가요^^?

     
    • 최피디

      2011년 11월 3일 at 8:47 오전

      apns사용을 위한 프로바이더가 되려면 소켓 연결이 필요합니다. gae는 그것을 허용하지 않지요. 따라서 apns provider역할을 하는 dedicate server를 구성하고 gae에서 business logic에 따라 dedicate server로 http request하는 방식으로 우회해야 할 것입니다.

       
  3. 정정일

    2011년 12월 22일 at 1:07 오전

    질문이 있는데욤
    백그라운드 상태에서 push가 오면 ios에서 이를 감지해서 앱에 전달하자나요
    근데 이 ios에서 앱으로 전달할 때,
    즉, 앱이 백그라운드 상태에 있을 때, 푸시가 오면 화면상단에 푸시 알림이 오는데
    이 때 앱에서 발생하는 이벤트가 뭔가요??
    local notification 에서 이를 감지할 거 같았는데,
    이벤트가 검사 되지가 않더라고요,,,,,,

     
    • 최피디

      2011년 12월 22일 at 7:24 오전

      그 상태에선 아직 앱으로 아무것도 오지 않습니다. 유저가 그걸 터치해야 앱이 실행되는 걸로 알고 있습니다.

       
  4. 차준호

    2012년 1월 12일 at 3:09 오후

    질문이 있는데요 PUSH로 문자열을 넘겨 앞 10자를 코드로 뒷 문자를 알림 메세지로 뿌려 주고 싶습니다.
    이 때, 앞 10자리가 노출되지 않도록 할 수 있나요>

     
  5. Jongsoon Park

    2012년 4월 10일 at 1:57 오후

    최피디님 잘 보고 갑니다 ^^

     
    • 최피디

      2012년 4월 10일 at 2:01 오후

      ^_^ 감사합니다. 뜻밖이에요!

       
  6. 정원태

    2012년 4월 12일 at 4:39 오후

    글 잘보고 갑니다 ^^

     
    • 최피디

      2012년 4월 12일 at 4:57 오후

      ^^; 이야기하자 바로 찾아 들어오셨군요!

       

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

 
%d 블로거가 이것을 좋아합니다: