APNS 따라하기 시리즈 (iOS 구성하기)

앱단 개발 개요

앱에서 해줘야 할 일은 앱을 실행한 디바이스의 정보를 3rt Party 서버와 통신해 DeviceToken과 UUID 그리고 사용자 정보를 던져주면 됩니다.
해당기기로 접근할 수 있는 키(열쇠)라고 생각하시면 되며, 이외의 모든 일은 iOS와 APNS서버가 알아서 해줍니다.

 

아이폰/아이패드 개발 코드

코드 작성은 크게 4가지 메서드에서 처리하게 됩니다.

  1. 원격 알림서비스를 iOS에 등록해야 합니다. 등록 성공/실패시 2,3번을 각각 실행합니다.
  2. 앱을 실행시 사용자가 알림서비스를 승인하면 서버로 디바이스 토큰을 보내야 합니다.
  3. 앱을 실행시 알림서비스 등록에 실패하는 경우 로직을 구현합니다.
  4. 메시지를 수신했을 때 처리하는 로직을 구현합니다.

이렇게 구현하면 기본적인 구현 절차는 끝나게 됩니다.
앱에 따라서 처리하는 방식이 달라지는 부분은 주로 2번과 4번이 될 것입니다.
예를 들면 메시지 보낼때 참고할 다른 정보를 보내거나, 메시지를 수신하면 앱내의 특정 부분으로 이동해서 해당 내용을 보여주려고 하실텐데 그런 부분들이라고 생각하시면 됩니다.

그럼 작성해야 할 개발코드를 알아보도록 하겠습니다.
위에서도 언급했다시피 EasyAPNS를 이용해 구현하는 것이니 참고하시기 바랍니다.

우선 (BOOL)application:didFinishLaunchingWithOptions: 메서드에서 원격 푸시 서비스를 하겠다고 등록을 해야 합니다.
이것을 작성함으로써 처음 앱 실행시 푸시알림 메시지를 받겠냐고 물어보는 Alert창이 나타나게 되며, 이 절차를 통해 iOS에게 이 앱이 원격 푸시 서비스를 등록하겠다고 알리는 것입니다. 이렇게만 해주시면 APNS서버에서 메시지를 수신하는 처리는 iOS가 알아서 처리해 앱으로 통보해줍니다.

 

사용자가 푸시를 받겠다고 승인하면 (void)application:didRegisterForRemoteNotificationsWithDeviceToken: 메서드가 실행됩니다.
이때, 우리는 일전에 만들었던 서버단으로 UUID와 deviceToken을 보내 정보를 보관하고 있어야 합니다.
deviceToken은 어떤 앱인지와 어떤 디바이스인지의 조합으로 구성되어진 64개의 바이트 조합입니다.
여기서 UUID와 Token은 사용자의 동의를 얻은 후 외부로 보내져야만 하며 이를 어길시 리젝사유가 될 수 있음을 참고하시기 바랍니다.
deviceToken정보는 EasyAPNS로 구현되어진 서버단의 특정 URL로  정보를 담아 전송해주기만 하면 EasyAPNS가 Device정보를 데이터베이스에 저장해줄 것 입니다.

aps_binary_provider_2
Notification Format

여기서 DeviceToken만 저장해서 보내주면 되지~ 왜? 오만 잡다한 정보도 저장해야하는지 궁금하지 않으세요?
이는 해당 디바이스에서 어떤 설정을 갖고 있는지 알 수 있는 방법이 없어서 입니다. 현재 앱을 설치한 사용자가 배지설정을 켰는지 껐는지 사운드는 켰는지 껐는지를 보내는 쪽에서도 체크를 해야 합니다. 물론 애플에서 해당 디바이스의 정보를 가져올 수 있는 피드백이라는 기능을 제공하고 있긴 하지만 번거로운 작업인 것은 분명합니다. 만약 정보체크를 소홀히 하신다면 해당 사용자가 알림센터 기능을 끄더라도 메시지는 날아갑니다. 이점 반드시 참고하여주시고, 또하나 메서드를 살펴보면 NSData로 DeviceToken값을 넘겨주는데 이는 퍼포먼스때문에 컴퓨터가 좋아하는 바이너리 포맷으로 전달됩니다. 위의 그림에 다 나와있는 내용이니 참고하세요!
자 그럼, 아래와 같이 작성해서 처리를 완료해주시면 됩니다.

 

아래는 등록하다가 실패하는 경우 사용되는 딜리게이트입니다.
간혹 APNS등록해서 잘 사용하다가 Provisioning, Certification, AppID의 내용을 하나라도 수정하시는 경우 에러가 나타날 수 있습니다.
혹 안되실때 이런부분을 찾아보시기 바랍니다.

 

이제 여러분들이 가장 많이 손봐야할 딜리게이트 코드 입니다. 이곳으로 NSDictionary 형태로 메시지정보가 던져지게 됩니다.
그걸 받아서 원하는데로 처리하시면 되겠습니다.
아래는 기본적인 형태로 앱이 실행되지 않을때 경고창을 띄워 알려주는 역할하도록 따로 작성하고 그게 아닌 경우 로그만 찍히게 해봤습니다.
추후 저는 URL을 받아서 해당 URL로 강제이동되게 할 예정입니다.

 

자! 지금까지 iOS의 Application Delegate상에 코드 작성하는 것을 보셨는데요~!

여기서는 EasyAPNS를 사용해 프로바이더(서버)를 구성할 계획이므로 이와 같이 참고하시면 되겠습니다.
서버로 던져주는 인자값들은 EasyAPNS에서 정해진 그대로를 사용한 것입니다.
참고적으로 꼭 정해진 인자값만 보내실 필요는 절대 없다는 점 알아두시기 바라며, 가장 중요한 것은 deviceToken값만 있으면 전송에는 문제가 없습니다.

하지만 하이브리드로 작업하시는 경우 Device의 Unique한 값을 찾느라 고민하실 수 있습니다.
이는 키체인을 이용해서 DEVICE UID를 저장해서 쓰시기 바랍니다.
앱을 삭제했다 다시 설치해도 해당 UID값을 계속해서 쓸 수 있습니다.

참고로 안드로이드는 시리얼을 이용하시면 되겠습니다.

다음은 EasyAPNS을 이용해 프로바이더를 구성하는 법을 소개해드리겠습니다.

 

 

 

APNS관련 포스팅 보기

Published by

안반장

Web과 App 개발을 하고 있으며 최근 워드프레스에 관심이 많아져 네이버 카페 워드프레스 홈페이지의 TF팀으로 활동 중 입니다.개인적으로는 안반장의 개발 노트라는 블로그를 운영하면서 개발의 즐거움과 고충들을 차곡차곡 담아가고 있습니다.

  • mook

    많은 도움이 되었습니다. 감사합니다

    • 도움이 되셨다니 저도 기분 좋습니다. 즐건 주말 보내세요!

  • 김성준

    잘 보고 잘따라했습니다 정말 감사드려요 너무너무 이해가 쉽게 써주셨네요.