상세 컨텐츠

본문 제목

phonegap 3.5 에서 푸쉬(Push Notification) 적용하기 - 4. 서버 작성 (iOS)

프로그램개발/Phonegap

by fsteam 2014. 7. 12. 10:37

본문

iOS의 푸쉬메시지를 보내기 위해서는 여러가지 공개라이브러리가 존재한다.

여러가지 다양한 옵션을 제공하고 있어서 필요에 맞게 이용할 수 있겠지만.. 

단순함의 미학!! 여기서는 핵심적인 요소만 이용해서 간단하게 뼈대만 작성해 보도록 하겠다.


안드로이드나 아이폰의 푸쉬는 모두 해당 서버를 이용해서 발송해야 한다.

즉 안드로이드는 google GCM 서버를, 아이폰의 경우 apple APNS 서버를 통해 단말로 원하는 푸쉬메시지를 전송하게 된다.


이러한 프로세스를 그림으로 표현하면 다음과 같다.


일반적인 서비스에서는 GCM, APNS와 통신하기 위한 서버가 필요하다. 위 그림은 기본적인 푸쉬 발송 프로세스를 설명했다.

1,2,3 번은 푸쉬서비스 등록에 대해서 A,B 는 푸쉬 발송에 대해서 필요한 절차이다.


* 푸쉬서비스 등록 절차

1) 단말에서 APNS, GCM 서버로 device token(iOS), registration id(Android)를 요청한다.

2) 등록이 성공하면 단말로 device token(iOS), registration id(Android)를 전달한다.

3) 단말에서는 서비스 서버로 device token(iOS), registration id(Android)을 전달하고 서버에서는 이 값을 저장해 놓는다.


* 푸쉬서비스 메시지 전송 절차

A, 서비스 서버에서 GCM, APNS로 푸쉬를 요청한다. 이 때에는 단말의 device token, registration id와 서버의 key 값, 기타 메시지 내용등을 함께 전달한다.

B. GCM, APNS 에서는 요청받은 내용으로 해당 device에 푸쉬메시지를 전달한다.


앞서.. 푸쉬서비스 등록 절차에 대해서 설명했으니 여기서는 위 A에 해당하는 푸쉬메시지 요청에 대해서 알아보겠다.

사실 복잡한 내용은 없다.. 단지 규격에 맞게 APNS 서버로 푸쉬요청을 던져주면 끝!


소스에 달린 주석을 보면 쉽게 이해할수 있을 것이다. 여기서는 php 로 샘플 소스를 작성했다.


<?

$deviceToken = array();

$deviceToken[0] = '68b26146a56c................................284ff15e32bce293'; // iphone 5

$message = '푸쉬메시지 테스트 갑니다~~';

$badge = 1;

$sound = 'default';


// 개발용 서버 설정

$apnsHost = 'gateway.sandbox.push.apple.com';

$apnsCert = 'apns-dev.pem';

 

// 실서비스용 서버 설정

//$apnsHost = 'gateway.push.apple.com';

//$apnsCert = 'apns-prod.pem';


$apnsPort = 2195;


$msgBody = array();

$msgBody['aps'] = array('alert' => $message);

if ($badge) $msgBody['aps']['badge'] = $badge;

if ($sound) $msgBody['aps']['sound'] = $sound;


// APNS서버와 SSL 소켓 통신

$streamCtxt = stream_context_create();

stream_context_set_option($streamCtxt, 'ssl', 'local_cert', $apnsCert); 

$fp = stream_socket_client('ssl://'.$apnsHost.':'.$apnsPort, $err, $errstr, 30, STREAM_CLIENT_CONNECT, $streamCtxt);


if (!$fp) {

    print "Error : [$err]$errstr \n";

    exit;

} else {

// 보낼 내용을 json 포맷으로 인코딩

$payload = json_encode($msgBody);


for($i=0; $i<count($deviceToken); $i++) {

$apnsMsg = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken[$i])) .chr(0) . chr(strlen($payload)) . $payload;

fwrite($fp, $apnsMsg);

}


fclose($fp);

}

?>


애플 푸쉬를 위한 인증서를 발급받을때 개발용과 프로덕션용이 있었다.

서버도 개발용과 프로덕션용이 있으니.. 향후 앱을 스토어에 등록시 주의해야 한다.


보낼 내용을 작성후 ssl 통신으로 APNS 서버에 전송해 주면 끝!! 

이후는 APNS에서 해당 단말로 푸쉬 메시지를 보내준다.


관련글 더보기