Categories

  • posts

Tags

  • etc

GCM(Google Cloud Messaging)

GCM이란 개발자가 서버에서 자신의 Android 애플리케이션으로 데이터를 전송하게 해주는 무료 서비스이다.
서버에서 가져와야할 새로운 데이터가 있음을 Android 애플리케이션에 알리는 적은 용량의 메시지이거나,
최대 4KB의 데이터를 포함하는 메시지일 수 있다.
(1KB = 1024byte 한글자당 2byte 4KB = 한글 2천자 정도)
따라서 메신저와 같은 앱은 메시지를 직접 사용할 수 있다.

구글 2012 I/O에서 그전까지 사용한 C2DM대신 GCM을 들고 나왔다.
그 뒤 구글은 C2DM의 신규 가입을 중단하고, GCM만 사용하도록 권장하고 있다.
GCM이 구글 계정을 사용하고, 그 때문에 API 8 (프로요)이상 부터 사용이 가능하다.

[GCM 발송 절차]

  1. 개발자는 GCM서비스를 신청하고 projectid를 부여받는다.
  2. projectid를 개발하는 안드로이드 코드에 넣어서 app을 개발.
  3. app을 실행해서 GCM서버에 등록하면 regID를 서버로부터 부여받는다.
    • 기기별로 regID를 부여받는다.
  4. 개발자는 별도의 서버를 운영하여 개인이 부여받는 regID를 서버에 받아서 저장해둔다.
  5. app 사용자에게 메시지를 보낼때는 개인으로부터 전달받은 regID를 이용하여 GCM서버로 메시지를 전송한다.
  6. GCM서버는 전달받은 메시지를 개인한테 PUSH.

GCM을 이용하기 위해 프로젝트 아이디, API Key 신청해야 한다.

  1. Android Notification 표현(Project ID 사용) Notification = 알림. 통지. 통고
    • 최초 Registration ID 전송 (서버에서Registration ID를 저장) Registration = 등록
  2. 서버에서 구글 푸시 서버로 메시지, RegistrationID, API Key 전송
  3. 구글 푸시 서버에서 어플이 깔린 핸드폰으로 메시지 전송

[php curl 을 사용한 gcm 푸시예제]

$headers = array(
'Content-Type:application/json',
'Authorization:key=API Key 입력'
);

$arr = array();
$arr['data'] = array();
$arr['data']['msg'] = "GCM으로 보낼 메시지 작성";
$arr['registration_ids'] = array();
$arr['registration_ids'][0] = "디바이스에서 얻어낸 아이디";

$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 = culr_exec($ch);
echo $response;
curl_close($ch);