본문 바로가기
스마트폰 프로그래밍/안드로이드

PHP로 GCM 메시지 보내기

by o테리o 2013. 4. 24.

아래 코드를 보라 무척 쉽다.

$headers = array(
'Content-Type:application/json',
'Authorization:key=AIzaSyCzMhR0yAL5RrZwMDaNnQaOq1w9mbTJDBg'
);

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

어떤 외국인이 왜 잘 안될까요? 요러고 남긴거보고 해보니 잘되더라 그 외국인은 안타깝게도

array -> json 으로 안 하고 문자열 하나로 하다가 안 되었다.

하여간 내가 쓰고 있는 코드다. $response에 결과가 들어 있는데 걍 웹에서 뿌려보고

성공 나오는 것은 확인했다.

안 되는 경우 다시 보내지 않게 처리해줘야 하는거 같은데 세부적인 코드를 몰라서 일단 보류다.

하여간 당장 메시지 쏘고 싶으면 긁어다 살짝 고쳐서 쓰시라.

보면 알겠지만 json과 curl이 필요하다.

윈도우 서버에 apm 깔고 쓰는데 dll복사하고 php.ini수정하니 바로 사용 가능하더라

보편적인것 같으니 없으면 설치해서 쓰는게 정신건강에 이로울 것이다.

추가)

db에서 select 한 아이디들을 $arr['registration_ids'][] 에 집어 넣고 200명 넘게 보내봤는데

한 명씩 쏘는 것에 비해서 빠른 결과를 보였다.

결과도 200개가 다 넘어온다. 결과는 아이디를 넣은 순서에 맞춰서 나오는 것으로 보인다.

db에서 제거 해야 하는  처리를 하거나 재발송하는 처리를 하긴 해야 하는데..

테스트 삼아서 해본거라 문제 있는 부분은 넘어갔다.

하여간 개별로 전송하는 것 보다는 1,000개 단위로 넘기는 것이 좋은 것 같다.