티스토리 뷰

홈페이지 = http://www.easyapns.com/

푸시 서비스의 경우 개발 테스팅에서 시뮬레이터로는 테스팅이 불가하므로
꼭! 실 기기가 필요하다.

어제 iOS 푸시 해보느라 오후부터 밤10시까지 시간을 보냈다.
(메뉴얼 대로 잘 따라하면 몇시간 내로 되는데 한가지 빼먹어서 개고생)

몇가지의 라이브러리가 있었는데
이름부터 쉽다고 써 있는 Easy APNs를 쓰기로 생각하고 작업에 돌입하였다.

1. 인증서 작업

http://artyst.egloos.com/2652130 글을 보고 인증서 작업을 해야 한다.
여기서 주의 할 점이 있는데 App IDs 서브메뉴 페이지에서 기존 앱을
[ ] Enable for Apple Push Notification service
의 설정(체크) 없이 만들었었다면
Edit 링크를 눌러 Modify 하고 다시 다운받아 실행하여 인증서를 갱신해야 된다.
이 작업을 빼먹어서 개고생했다.

인증서 생성이나 갱신이 완벽히 되었다면

Easy APNs 홈페이지 상단 메뉴의 순서대로 작업을 하면 된다.


2. MySQL 테이블

추가시 웹호스팅 받고 있는 경우 Trigger 생성 권한이 없을 것이므로
기기 이력 테이블이 제외된 alternate database file 의 SQL문만 실행하면 된다.


3. PHP 소스

+ apns.php
최 상단의 쉘 스크립트 사용 선언 #!/usr/bin/php 은 웹호스팅 받을경우 사용이 안되므로
<?PHP 아래로 옮긴다.

+ class_*.php
웹호스팅 업체의 PHP에서 mysqli 확장 설정(php.ini 설정에서 extension="mysqli.so") 되어 있지 않은 경우 다수의 msyql 쿼리 관련 함수들을 수정해야 한다.
대체적으로
$result->num_rows() 에서 mysql_num_rows($result) 로
$return = $result->fetch_array(MYSQLI_ASSOC) 에서 $return = mysql_fetch_array($result, MYSQL_ASSOC) 로
등과 같이 수정해 줘야 한다.

$logpath 등을 사용자 환경에 맞게 절대 경로로 수정하라고 되어 있는데
웹호스팅 받고 있을 경우 루트로부터의 경로를 모르겠다면
apns.php가 위치해 있는곳으로부터의 경로를 입력해주면 잘 동작한다.

$certificate 의 apns.pem 파일 생성법은
http://theeye.pe.kr/511 글을 보면 키체인에서 필요한 파일 추출하고
콘솔에서 명령 줘서 pem 파일 생성하는 방법이 기재되어 있다.


4. AppDelegate 작업

푸시 클라이언트인 앱에서의 작업. Xcode에서 AppDelegate.m 소스파일을 편집해준다.

폰갭으로 포장한 앱은 PhoneGapDelegate.m 파일 편집.


5. Cron 작업

이게 왜 필요하냐면 Easy APNs는 메세지 발송 예제 실행시 (http://.../apns_sample.php)
apns_messages (큐)에 쌓아놓기만 한다.

실제 발송은 http://.../apns.php?task=fetch 를 실행 했을 때 되는 것이다.

웹호스팅 받을경우 cron 이용이 거의 불가하므로
http://cron.io/를 통해 해결한다.


6. Blog 메뉴

Easy APNs 홈페이지의 Cron 메뉴까지가 본론인것 같았지만
중요한 것들이 여기 다 모여 있다.

심지어 처음부터 봤어야 되는 셋업 동영상까지...

지금까지의 과정이 제대로 되었고
앱의 기기 테스팅을 처음 하게 되면

기기 등록정보가 DB의 apns_devices 테이블에 등록되고

푸시 알림 받을것인지 묻는 알림창이 뜨고... 블라블라~

기기 테스팅시의 우리는 apns development 프로파일로 하게 되는데
apns_devices 테이블의 development 필드의 기본값은 'production'이다.

즉, 저 필드값을 그냥 놔두면 개발 테스팅 해도 아무런 푸시알림이 오지 않을것이라는거다.

phpMyAdmin 등에서 해당 필드값은 둘 중 하나로 수정 할 수 있다.
개발시는 'sandbox'로 수정해주고 테스팅하도록 한다.


7. 푸시 알림 테스팅

cron 없이 곧바로 테스팅하는 방법은 5.에서 잠깐 소개했는데
http://.../apns_sample.php 로 메세지를 대기열에 넣어두고
http://.../apns.php?task=fetch 로 발송하면 된다.


마치며

젊은 개발자들이야 빠르게 해 내었겠지만
늦은 나이에 늦게서야 스마트폰 개발의 초보단계를 걷고 있으면서 

과정 중 한가지를 빠트려 개고생을 했지만
푸시 알림이 기기로 왔을때의 기쁨은 개인적으로 너무 좋았다.

좋은 라이브러리 제공, 자신의 노하우를 블로그를 통하여 공유 해주신 모든 분들께 감사드린다. 


댓글