Node.js를 이용하여 Android 푸시기능 구현

안녕하세요 남산돈가스입니다.

오늘은 지난 포스팅에 이어 Nodejs를 이용하여 Android 푸시기능을 구현해보겠습니다.

개인적으로 gcm은 apple의 apns보다는 푸시기능 구현이 더 간단하다고 생각하는데요.
그 이유는 apns 같은 경우엔 인증서 및 키 파일을 발급받는 과정이 복잡한데 비해 gcm은 개발자 콘솔에서 프로젝트를 등록하고 gcm 서비스만 활성화하면 API Key와 sender ID 값을 바로 제공해주기 때문에 이것들을 가지고 바로 push기능을 구현할 수 있기 때문입니다.

API Key을 발급 받는 과정은 http://blog.saltfactory.net/node/implementing-push-notification-service-for-android-using-google-play-service.html 에 이해하기 쉽게 제공되고 있으니 참고하시기 바랍니다.

그렇다면 API Key와 SenderId값을 발급받았다는 전제 하에 본격적으로 NodeJs를 이용하여 안드로이드 푸시 기능을 구현해보겠습니다.

일단, NodeJS에서 gcm기능을 이용하기 위해선 gcm 모듈이 필요합니다.

npm install node-gcm

gcm 모듈을 다운받았으면 js 파일을 하나 생성합니다.

var gcm = require('node-gcm');

var message = new gcm.Message({  
    collapseKey: 'demo',
    delayWhileIdle: true,
    timeToLive: 3,
    data: {
        key: 'push Test',
    }
});

install한 gcm 모듈을 선언하고, message라는 변수에  gcm.Message 를 초기화 합니다.
이 Message라는 메서드에 전송 될 푸시에 대한 설정 정보가 json 형식으로 들어가게 됩니다.
간단하게 Message에 대한 설정들을 알아보면, collapseKey는 푸시할 유사 메시지별로 동일한 collapse_key를 주면, 각 메시지에 대한 동일한 메시지가 발생되는 것을 막을 수 있다.
delayWhileIdle은 true면, device가 잠들어있는 상황에서는 메시지를 곧바로 전달하지 않고, device가 active 될 때까지 기다리고 푸시를 전달하는 설정이다. Default값은 false.
timeToLive는 Device가 offLine일 때 메시지를 GCM 저장소에 보관하고 있어야 하는 시간을 말한다. 단위는 (초)이며, Default값은 4주이다. data는 실제로 푸시가 전송 될 메시지 데이터를 말한다.

var server_api_key ='Server API Key';
var sender = new gcm.Sender(server_api_key);
var registrationIds = [];
 

var token = 'Token';
registrationIds.push(token);

이제 실제 푸시를 send 하기 위해서 개발자 콘솔에서 발급받은 API Key를 server_api_key에 입력합니다.  그리고 아래 token값에는 위에서 공유한 링크에서 Android 프로젝트에서 발급받은 token값을 넣어줍니다.

여기까지 android에서 푸시를 보내기 위한 모든 준비가 끝났습니다. 그렇다면 이제 실제 푸시를 전송하는 부분에 대해서 확인해보겠습니다.

sender.send(message, registrationIds, 4, function (err, result) {
    console.log(result);
});

실제 전송부분입니다. sender는 new gcm.Sender(API_Key)를 가리키고 있는데요. 이 sender가 send메서드를 통해 실제로 푸시를 전송하게 됩니다. send에 대한 파라미터로는 위에서 설정한 message 정보, token정보를 담은 registrationsId, 4는 푸시 전송에 실패하였을 경우 재전송하는 횟수를 의미하고, 마지막 파라미터는 그에 대한 콜백값을 핸들링해주는 부분입니다.

이렇게 총 3번의 포스팅에 걸쳐 푸시기능과 apns, gcm에 대해서 알아보았습니다. 이번 포스팅을 통해서 nodejs를 이용하여 푸시기능을 구현하려고 하는 분들에게 작은 도움이 되었기를 바라겠습니다. 감사합니다.

댓글

주간 인기글

카드뉴스 마케팅 팁

[ubuntu] 신규 계정에 sudo 권한 추가하기

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

HTML 템플릿을 인쇄용으로 가공하기

[Spring Boot] JPA + Pageable 을 이용한 페이징 처리