푸시 php 소스를 구현하여 처리를 해보아도 영어 와 숫자는 잘 푸시가 들어 가는데 이상하게 한글은 소리만 나고 문자가 노티피케이션 센터에 나오지를 않는다. 검색을 해보니, utf-8 과 euc-kr의 차이라 하는데, 전혀 예상하지 못했었다.
그래서 변환 하는 코드를 확인하여 중요하다 하여 변경해 보아도 잘 처리가 안되엇다. 결국 php 소스를 다른것으로 교체하기로 하고 아래의 소스를 참고 하기로 하였다.
주소 : http://........php? mcontents=준비됬나요?
빨강색만 수정하여 사용하세요
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
$alert = $_REQUEST["mcontents"];
echo $alert;
//exit;
//$alert ="준비됬나요??";
// 먼저 푸쉬를 넣을 때 표시할 문구와 기본적인 푸쉬 요소를 입력한다.
$payload = array();
$payload['aps'] = array('alert' => $alert, 'badge' => 0, 'sound' => 'default');
//alert은 푸쉬가 도착했을 때 표시할 문구이고 badge는 푸쉬가 도착했을 때 아이콘에 표시할 뱃지 수이고
//sound는 푸쉬가 도착했을 때 알림 소리이다.
//이제 이 것을 JSON문법 형태로 고쳐야 한다.
$push = json_encode($payload);
//아주 간단하다. 만약 변환된 형태가 궁금하다면 최상단의 링크를 참조하시라.
//만약 푸쉬를 통해서 앱으로 추가적인 정보를 전달해야 한다면 JSON으로 변환 전 추가적인 작업을 하자.
//$payload['extra_info'] = array('name' => 'Lifeclue', 'blog' => 'http://blog.naver.com/legendx');
//이런식으로 하면 푸쉬가 도착했을 때 앱에서 추가적으로 자료를 활용할 수 있다.
//이제 아까 만들었던 pem파일을 써먹을 차례다. 경로를 입력하자.
//만약 작성중인 php 파일과 같은 경로에 있다면
//테스트용
$apnsCert = 'apns-dev.pem';
//배포용
//$apnsCert = 'apns-pro.pem';
//그리고 애플의 푸쉬서버와 통신할 stream context를 작성한다.
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
//그대로 갖다 붙이면 된다;
//이제 애플의 푸쉬 서버에 연결해보자.
//테스트용
$apns = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $error, $errorString, 60, STREAM_CLIENT_CONNECT, $streamContext);
//실제 배포용
//$apns = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
//만약 앱을 배포할 때에는 애플 프로비저닝 포털의 App ID에서 개발용이 아닌 배포용 푸쉬 인증서를 받으신 후
//키체인에서 다시 인증서와 키를 추출한 후에 pem으로 돌리고 서버에 올리신 후 위에 있는 $apnsCert 변수의
//파일명을 바꿔주시면 되며, 바로 이 위에 있는 $apns변수의 주소에서 sandbox를 빼주시면 된다.
//ssl://gateway.push.aple.com
if (!$apns) {
print "Failed to connect $error $errorString\n";
return;
}
//만약 요청에 실패하면 Failed to connect가 브라우저에 뜰 것이다.
//자, 이제 드디어 푸쉬를 넣을 차례다!
$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', "d33c32bfde342cf35e0c2ebe77295e2250fbbd2dafcd....-디바이스토큰값")) . chr(0) . chr(strlen($push)) . $push;
$writeResult = fwrite($apns, $apnsMessage);
//마지막으로 썼던 것은 스스로 정리하자.
//socket_close($apns);
fclose($apns);
?>
그래도 한글이 깨지거나 소리만 난다면
meta 쪽을 euc-kr , utf-8 /
또는
iconv("EUC-KR", "UTF-8", 한글 문자열); , iconv("UTF-8", "EUC-KR", 한글 문자열);
처리하여 보자!!!
[출처] PHP로 구현하는 APNS (아이폰 푸쉬 서비스)|작성자 인생
'개발도구 > iOS - 아이폰 개발' 카테고리의 다른 글
[iOS]GestureRecognizer 터치이벤트 와 테이블에 적용방법 (0) | 2012.11.19 |
---|---|
[ios] llvm-gcc-4.2 failed with exit code 1 (0) | 2012.11.13 |
[ios] stream_socket_client() 에러 (1) | 2012.11.12 |
[ios] modalview MFMessageComposeViewController (0) | 2012.11.09 |
[ios] Create MD5 Hash from NSString, NSData or a File (0) | 2012.11.08 |