GCM(Google Cloud Messaging)
GCM이란 개발자가 서버에서 자신의 Android 애플리케이션으로 데이터를 전송하게 해주는 무료 서비스이다.
서버에서 가져와야할 새로운 데이터가 있음을 Android 애플리케이션에 알리는 적은 용량의 메시지이거나,
최대 4KB의 데이터를 포함하는 메시지일 수 있다.
(1KB = 1024byte 한글자당 2byte 4KB = 한글 2천자 정도)
따라서 메신저와 같은 앱은 메시지를 직접 사용할 수 있다.
구글 2012 I/O에서 그전까지 사용한 C2DM대신 GCM을 들고 나왔다.
그 뒤 구글은 C2DM의 신규 가입을 중단하고, GCM만 사용하도록 권장하고 있다.
GCM이 구글 계정을 사용하고, 그 때문에 API 8 (프로요)이상 부터 사용이 가능하다.
[GCM 발송 절차]
- 개발자는 GCM서비스를 신청하고 projectid를 부여받는다.
- projectid를 개발하는 안드로이드 코드에 넣어서 app을 개발.
- app을 실행해서 GCM서버에 등록하면 regID를 서버로부터 부여받는다.
- 기기별로 regID를 부여받는다.
- 개발자는 별도의 서버를 운영하여 개인이 부여받는 regID를 서버에 받아서 저장해둔다.
- app 사용자에게 메시지를 보낼때는 개인으로부터 전달받은 regID를 이용하여 GCM서버로 메시지를 전송한다.
- GCM서버는 전달받은 메시지를 개인한테 PUSH.
GCM을 이용하기 위해 프로젝트 아이디, API Key 신청해야 한다.
- Android Notification 표현(Project ID 사용) Notification = 알림. 통지. 통고
- 최초 Registration ID 전송 (서버에서Registration ID를 저장) Registration = 등록
- 서버에서 구글 푸시 서버로 메시지, RegistrationID, API Key 전송
- 구글 푸시 서버에서 어플이 깔린 핸드폰으로 메시지 전송
[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);