올해는 머신러닝이다.
c2dm php 팁#1 본문
어플 -> c2dm -> 어플
다음과같은경우 구글 검색으로 얻을수 있는 소스로 수행해보면
한글 수신이 문제 없다.
하지만
어플 -> 별도서버 -> c2dm -> 어플
다음과 같이 서버로 메시지를 전송하고,
서버에서 c2dm 으로 전송하는 방법에서 한글이 보내지지 않았다.
http://www.xhost.co.kr/bbs/?id=iphone,16
다음 링크에서 curl 을 이용하여 c2dm 으로 전송하는 소스를 이용할때
한글이 전송 안되는 현상 발견
파일 문자셋을 바꾸고 별별짓을 해도 안됨..
그러다가
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.google.com/accounts/ClientLogin");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$data = array('accountType' => 'HOSTED_OR_GOOGLE',
'Email' => '아이디',
'Passwd' => '비번',
'source'=>'test-1.0',
'service'=>'ac2dm');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
$auth = substr(strstr($result, "Auth="), 5);
$auth = substr($auth, 0, strlen($auth)-1);
curl_setopt($ch, CURLOPT_URL, "https://android.apis.google.com/c2dm/send");
$data = "registration_id=등록아이디"."&collapse_key=1"."&data.msg=메세지";
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$headers = array(
"Content-Type: application/x-www-form-urlencoded",
"Content-Length: ".strlen($data),
"Authorization: GoogleLogin auth=$auth"
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
echo $result."\n";
curl_close($ch);
위의 메세지를 담는 부분을 인코딩하니 해결..
다음과 같이 바꿔준다.
$data = "registration_id=등록아이디"."&collapse_key=1"."&data.msg=".urlencode($메시지);
저같이 고생하시는분들 없길 바라며...
원래 한글을 urlencode 하면 이상한 문자들이 나오는데,
c2dm 에서 재변환 하는 과정을 수행해 주나보다..
c2dm 전송 php 소스를 공개하신 로빈아빠님 감사드립니다.
원본이 아니었군요...;;
민상K 님 감사드립니다.
출처 : http://minsangk.com/blog/main/116
-------------------------------------------------------------------------------------------------------------------------------------------
추가사항
위으 소스로 push 를 빠르게 보내면 20개쯤 보내지고 잘 안보내지는 현상이 발생한다.
이유는 collapse_key=1
이것 때문인데
구글서버에서 이 키가 같은 값으로 계속오면
중복 메시지로 판단하고 연속으로 올 경우 무시해 버린단다.
이 키를 랜덤 숫자로 바꿔주면 매우 빠르게 보내도 처리해 준다.
srand((double)microtime()*1000000);
$collapse_key = rand(1,99);
$data = "registration_id=$phoneID"."&collapse_key=$collapse_key"."&data.msg=".urlencode($sendText);
이부분을 반드시 수정하여 사용하시길...
'Android > Tip&Tech' 카테고리의 다른 글
[펌]Android: Check application is running (0) | 2011.09.21 |
---|---|
[팁]자바상에서 text 가변크기 설정(sp,dp등등) (0) | 2011.09.21 |
크롬용 웹 개발툴 설치 주소. (0) | 2011.09.20 |
[펌]안드로이드 C2DM 소스 (0) | 2011.09.20 |
[팁]Merge layout 에 관한 팁 (0) | 2011.09.16 |