상세 컨텐츠

본문 제목

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

프로그램개발/Phonegap

by fsteam 2014. 7. 13. 14:11

본문

푸쉬 메시지를 발송하기 위한 서버구성과 기본적인 플로우는 앞서 작성한 글을 참고하기 바란다.


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


여기서는 안드로이드 디바이스에 푸쉬메시지를 보내는 서버 구현에 대해서 간단히 설명하겠다.
안드로이드도 아이폰과 마찬가지로 GCM 서버쪽에 우리가 원하는 메시지를 던지면.. 이후 과정(해당하는 디바이스에 푸쉬메시지를 전송하는것)은 GCM 서버에서 알아서 해준다. 우리가 할일은 GCM 서버로 메시지를 보내는 것.

아이폰이 SSL 프로토콜을 이용한 바이너리 데이터를 보내야 했던것과는 조금 다르게.. GCM에서는 https 프로토콜을 이용한다.
https 연결에 원하는 문자열을 ascii 형태로 전송하면 된다. 
따라서, stream_context_create 를 통해 SSL 소켓을 만들 필요 없이 curl 을 이용하여 전송할 수 있다.

데이터 포맷은 json 을 이용하여 post로 전송하며.. 포함되는 항목은 data 배열과 registration_ids 배열이 포함되어야 한다.
data : 하위에 원하는 형태의 포맷으로 데이터를 입력하여 device로 전송할수 있다.
registration_ids : GCM 등록된 device들의 registration id를 배열형태로 넣어줘야 한다.

보낼 데이터 구조의 예를 들자면 아래와 같다.

$arr   = array();

$arr['data'] = array();

$arr['data']['title'] = "제목입니다.";

$arr['data']['message'] = "이건 내용이구요~";

$arr['data']['another'] = "다른 내용도 필요해요..";

$arr['registration_ids'] = array();

$arr['registration_ids'][0] = "APA91bFFb5aIBDqh0HIW......................HXc94RXIdy-K5a7zo";


위에서 굵게 표시한 title, message, another 등은.. data 배열안에 자유롭게 선언하여 쓸수가 있다. GCM 서버를 통해 device로 bypass 하여 전달되는 데이터이므로.. device 에서는 이 데이터를 그대로 사용할 수 있다.

registration_ids 는 device의 regid 를 배열형태로 집어 넣어서 보낼수 있다. 같은 내용의 푸쉬 메시지를 보낼 경우.. 한번의 연결로 다수의 device에 푸쉬를 보낼수 있는것이다.

다만, 이 갯수가 무제한은 아니고.. google 가이드에 따르면 최대 한번에 1000개의 device에 보낼수 있다고 한다.


Android device로 푸쉬를 발송하는 간단한 전체 소스는 다음과 같다.

<?php 


// 헤더 부분

$headers = array(

'Content-Type:application/json',

'Authorization:key=GCM 등록 시 발급받은 서버키를 넣는다'

);


// 발송 내용

$arr   = array();

$arr['data'] = array();

$arr['data']['title'] = '타이틀이 들어간다';

$arr['data']['message'] = '푸쉬로 전송할 메시지를 담는다';

$arr['registration_ids'] = array();


$arr['registration_ids'][0] = "APA91bFFb5aIBDqh0...................vsURvoRiA5BAU1_vX3-Q";


$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,    'https://android.googleapis.com/gcm/send');

curl_setopt($ch, CURLOPT_HTTPHEADER,  $headers);

curl_setopt($ch, CURLOPT_POST,    true);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_POSTFIELDS,json_encode($arr));

$response = curl_exec($ch);

curl_close($ch);


// 푸쉬 전송에 대한 결과를 수신

$obj = json_decode($response);


// 전송 성공한 갯수

$s_cnt = $obj->{"success"};


?>


위의 간단한 예제는 1명에게 푸쉬를 발송하는 경우이며.. 여러명에게 보내고 싶은 경우에는 DB에서 registration_id를 읽어와서 registration_ids 에 배열로 추가해서 전송하면 된다.



관련글 더보기