마스터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가 가능하단 이야기인가요??
...