푸시 기능 구현을 Node.js 에서 하기에는 너무 쉬운 관계로.. 안드로이드 쪽부터 보기로 하겠습니다. 
안드로이드는 실 기계에서 작업하지 않는 한 에뮬레이터에서 푸시 기능을 테스트 해 보기 위해서는 Google API 를 지원해야 합니다.

Android SDK Manager (Windows 메뉴에 보면 있습니다. OSX 기준) 를 실행시키고 화면을 보면 


Android 4.2 (API 17) 에 'Google APIs' 가 설치 되어 있어야 합니다. 만약 설치 안되어 있다면 체크박스에 체크 하고 설치해주시면 됩니다. 

Google API 가 설치되어 있는 형태의 '가상 기계'를 구동하셔야 푸시 이벤트 처리가 가능합니다. 

Android Virtual Device Manager 를 실행시킵니다. (역시 Windows 메뉴에 있습니다) 
그리고 새로 '가상 기계'를 설정해 주는데 OS 버젼 골라주는 곳? 그곳에서 Google API 라고 쓰여져 있는 버젼을 골라주면 됩니다. 


자 제것의 화면입니다. 같은 4.2 버젼이지만 Google API 를 쓰느냐 안 쓰느냐의 차이만 존재합니다. 

그리고 다시 Android SDK Manager 를 실행시켜줍니다.

 
위에 보이는 라이브러리를 설치해줍니다. 자 그러고 나면 

$SDK/extras/google/gcm/ 밑에 보면 프로젝트들이 설치되어 있습니다. 그중에서 samples 밑의 gcm-demo-client 를 주목해야 합니다.  (본인의 경우에는 /Users/crazia/work/android/sdk/extras/google/gcm/samples/gcm-demo-client 에 설치되어 있습니다. )

Eclipse 가 이미 구동되어 있을 테니 (안 그러면 SDK 메니져랑 가상 기계 매니져를 실행시킬 수 없었겠지요?) 위에 지정한 프로젝트를 Import 해옵니다. 

자 이제 안드로이드 쪽에서 해야 할일의 90% 는 끝이 난 셈입니다. 이제 키가 두개 필요합니다. 편의상 Project Key (SEND ID) 와 API Key 라고 부르겠습니다. 각각 클라이언트와 서버쪽에서 필요한 키입니다. 

https://code.google.com/apis/console 에 접속하셔서 


아직 등록이 안되어 있다면 'Create Project' 를 누르시면 프로젝트가 생성됩니다. 그리고 나면 URL 이 자동으로 변경이 되는데. 

https://code.google.com/apis/console/#project:4815162342

여기서 보이는 저 굵은 글자가 바로 Project Key 입니다. (SEND ID) 아이템을 얻었습니다!!

왼쪽에 탭을 보면 여러가지 메뉴가 있는데 그중에 

"Services." 탭을 선택합니다. 
"Google Cloud Messaging" 을 ON 으로 토글링 합니다. (켭니다) 


이제 구글 클라우드 메시지 서비스를 이용하기로 결정이 됐습니다. 
자 다시 왼쪽 탭을 보면 그중에서 

"API Access" 탭을 선택합니다. 
아래쪽에 보면 "Create New Server Key" 라는 버튼이 있습니다. 
보내고 싶은 IP 리스트에 대한 리스트를 작성해 주고 싶으면 작성하고 마땅히 할게 없으면 "Create" 버튼을 눌러줍니다. 



이제 중간에 나오는 화면에서 "API Key" 부분에 나와 있는 키를 따로 떼서 저장합니다. (Server Key) 아이템을 얻었습니다!!

중간 점검을 하자면 

1. Google API 를 지원할 수 있게 Virtual Device 를 생성하는 준비를 마쳤습니다. 
2. Extra/gcm 샘플 소스를 받아서 Eclipse 에서 쓸 수 있게 Import 했습니다. 
3. Sender ID 와 Server Key 로 사용할 수 있는 Project Number 와 API Key 를 받았습니다. 

여기까지 완수가 되었다면 이제 클라이언트 (Android) 쪽 코딩을 마무리 지어 봅니다. Eclipse 의 프로젝트에 포함된 파일중에서 CommonUtilities.java 파일을 열어줍니다. 

    /**

     * Base URL of the Demo Server (such as http://my_host:8080/gcm-demo)

     */

    static final String SERVER_URL = "http://192.168.0.36:3000";
    // node.js 서버가 기다리고 있는 주소와 포트를 적어 주는 것입니다. 


    /**

     * Google API project id registered to use GCM.

     */

    static final String SENDER_ID = "4815162342";
    // 위에서 얻은 Project Number 를 입력해 줍니다.

이로서 클라이언트 부분은 끝이 났습니다. 이제야 제일 핵심인 Node.js 에서의 푸시 기능 구현에 들어가겠습니다.

$ cd $PROJECT_DIRECTORY
npm install node-gcm --save

-- save 옵션을 package.json 에 해당 사항을 기입하라는 뜻입니다.  

app.js 를 열어서 다음과 같이 추가 해 줍니다. 

var main = require('main');

app.post('/register', main.regist);
app.get('/send', main.send_push);


main.js 파일을 하나 만들어서 열고 

exports.regist = function (req, res) {

console.log (req.param('regId'));
        // 원래는 DB 에 저장하는 부분이 있어야 할 것입니다. 받아서 디비에 저장하기       

res.end(); 


exports.send_push = function(req, res) {

var message = new gcm.Message();

var sender = new gcm.Sender('API Key 를 입력하는 곳입니다. ');

var registrationIds = [];


// Optional

message.addData('key1','message1');

message.addData('key2','message2');

message.collapseKey = 'demo';

message.delayWhileIdle = true;

message.timeToLive = 3;


// At least one required

registrationIds.push('이곳은 register 함수에서 받은 regId 를 입력하는 부분입니다.');
        // 만약 제대로 구현 됐다면 디비에서 읽어서 가져오겠지요?  

        

/**

 * Parameters: message-literal, registrationIds-array, No. of retries, callback-function

 */

sender.send(message, registrationIds, 4, function (err, result) {

    console.log(result);

});

// sender.sendNoRetry(message, registrationIds-array, function (err, result) {

//     console.log(result);

// }); // retry 없이 보내는 부분입니다. 보통은 이것을 더 많이 애용할 것 같습니다. 

}




너무 쉽게 끝났지요? 이게 node.js 의 힘이라고 볼 수 있습니다. 자신의 안드로이드 프로젝트에 기능을 추가하고 싶으시다면 참조 사이트를 참조하시면 됩니다. 

참조  사이트 

https://github.com/ToothlessGear/node-gcm : node.js 에 gcm 모듈 구현 
http://developer.android.com/google/gcm/gs.html : 구글의  gcm 모듈 구현하는 설명 페이지 (완전 중요!!)


 

+ Recent posts