출처 : http://blog.naver.com/yjsplay2002?Redirect=Log&logNo=50109135158

어플 -> 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);


이부분을 반드시 수정하여 사용하시길...

+ Recent posts