마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

GCM 서버에서 Multicast 푸쉬 요청

0 추천
 <HTML>
 
 <HEAD>
 
 <TITLE>GuestBook</TITLE>
 
 <meta http-equiv="content-Type" content="text/html" charset="utf-8">
 
 </HEAD>
 
 
 
 
 
 
 
 <BODY BGCOLOR="#006699" LINK="#99CCFF" VLINK="#99CCCC" TEXT="#FFFFFF">
 
 <center>
 
 <br><p>
 
 
 
 
 <?
 
 
 
 
 $apiKey = "AIzaSyAwhIjAqve0UP91qse-iL6f41Vu1s6gMTg";
 
 
 
 
 
 
 
  $message = $_POST['message'];
 
 
 
 
  echo("
 
    <FORM name='form' method='post' action='$PHP_SELF'>
 
    <TABLE border='0' cellspacing='1'>
 
    <TR>
 
    <TD width='109' bgcolor='#5485B6'><P align='center'><FONT face='굴림' size='2' color='#CDDAE4'>
 
   message</FONT></TD>
 
    <TD width='541'><P>&nbsp;<INPUT type='text' name='message' SIZE=25 MAXLENGTHTH='20'></TD>
 
    </TR>
 
   <TR>
 
    <TD><P>&nbsp;</TD>
 
    <TD><P>&nbsp;<INPUT type='submit' name='submit' value='sendMessage'></TD>
 
    </TR>
 
    </TABLE>
 
    <input type=hidden name=mode value='up'>
 
    </FORM>");
 
 
 
 
    if ($mode == 'up') {
 
     $messageData = addslashes($message);
 
      sendNotification($apiKey,$messageData);
 
    }
 
 
 
 
 function sendNotification( $apiKey, $messageData )
 
 {  
 
 
 
 
   $headers = array('Content-Type:application/json ; charset=utf-8', 'Authorization:key=AIzaSyAwhIjAqve0UP91qse-iL6f41Vu1s6gMTg');
 
 
 
 
    $connect = mysql_connect("165.229.88.50","ID","PASSWORD") or die("SQL server에 연결할 수 없습니다.");
 
   mysql_select_db("gcm",$connect);
 
 
 
 
   $result = mysql_query("SELECT gcm_regid FROM gcm_users");
 
   
 
    $conidx=0;
 
 
 
 
 
 
 
 $arr   = array();
 
 $arr['data'] = array();
 
 $arr['data']['msg'] = $messageData;
 
 $arr['registration_ids'] = array();
 
 
 
 
 
 
 
 
 
 
 while($row = mysql_fetch_array($result))
 
   {
 
   $arr['registration_ids'][$conidx] =  $row['reg_id'] ;
 
  $conidx++;
 
   }
 
   mysql_close($connect);
 
 
 
 
 $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);
 
 
 
 
 //return $response;
 
 }
 
 
 
 
 echo("
 
 <p>                            
 
 </BODY>
 
 </HTML>");
 
 ?>

 

안드로이드 하이브의 GCM Tutorial로 구성 되 있는 푸쉬 어플이 있습니다. 단일 전송은 잘 되구요. 다중전송을 해야하는데

여기서 문제가 생기네요. 위 소스는 안드로이드 하이브의 소스가 아닌 다른 분의 소스이구요. 현재 DB에 유저의 REGID가 쌓이는 DB는 안드로이드 하이브의 질의로 만든 DB 입니다.

CREATE TABLE IF NOT EXISTS `gcm_users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `gcm_regid` text,
  `name` varchar(50) NOT NULL,
  `email` varchar(255) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

위 부분이 안드로이드 하이브의 질의 내용들이구요.

여기서 Multicast를 위해 위 소스를 고쳐야 하는 부분이 있나요?? 제 생각입니다만 DB 세부정보 때문에 접근을 못하는것 같아서요.

조정하 (450 포인트) 님이 2013년 2월 24일 질문

1개의 답변

0 추천
while문의 condix를 기준으로 1000개 단위로 자르셔야 합니다

GCM은 최대 1000개 전송이에요

 

안되면 다시 알아보고 답변드릴게요

추정되는게 첫번째가 그거네여 ㅎ
수상한i (8,050 포인트) 님이 2013년 2월 24일 답변
답변 감사합니다!!
condix 기준이라면 제 데이터베이스에서는 100개를 못넘습니다.
아직 동아리 배포를 안해서 테스트용으로 20명정도 등록되 있구요.
MySQL DB에 인서트 하는 소스랑 다른 소스인데 입력과 뽑아오는 방식의 차이일까요?? DB쪽으론 아주 문외한이라 어느 부분이 정확하게 문제인지 못 찾겠습니다. 그것만 알아도 해결방법이 생길텐데 말이죠...ㅠㅠ
무조건 1000개를 채워야 Multicast가 가능하단 이야기인가요??
...