티스토리 뷰

728x90
반응형
<?php
echo "start<br>";
// 로그인 체크하는 부분
session_start();
if(!isset($_SESSION['user_id']) || !isset($_SESSION['user_name'])) {
    echo "<meta http-equiv='refresh' content='0;url=login.php'>";
    exit;
}

echo "session ok<br>";

// 변수 받아오기
$msg = $_POST["msg"];
echo "msg=[".$msg."]<br>";

// DB 시작
include "config.php";

// 루프 돌아서 gcm을 보내자
// 한번에 1000개 까지 보낼수 있다
// 헤더 설정
$headers = array(
    'Content-Type:application/json',
 
    // 이거는 구글 api에서 browser로 생성한 키를 입력
    'Authorization:key=AIzaSyAIwJr4nbF7jcDu9DUt4OdyTB_vEW?????'
);

// 이제 DB에서 regid들을 꺼내오자
// 발송로그를 적어야 되지 않을까...

// 일단 접속부터...
// mysqli로 객체지향 방법으로 사용하자
$mysqli = new mysqli($HOST, $DBUSER, $DBPW, $DBNAME);
if(mysqli_connect_errno()) {
    echo "mysql error<br>";
    exit;
}
else {
    echo "mysql ok<br>";
}

function send_gcm($headers, $arr, $ids) {
    // send하기전에 log테이블로 넣음
    echo "<br>";
    global $mysqli;
    global $msg;

    // gcm_log에 넣음
    echo "ids count=".count($ids)."<br>";
    for($i=0; $i<count($ids); $i++) {
        $sql = "insert into gcm_log(user_id,msg,regdate) values($ids[$i],'$msg',now())";
        echo "gcm_log insert i=$i sql=$sql<br>";
        $result = $mysqli->query($sql);
        if(!$result) {
            echo "gcm_log insert error=".$mysqli->error."<br>";
            $mysqli->close();
            exit;
        }
    }
    
    echo "headers=$headers<br>";
    echo "arr=$arr<br>";    
    echo "ids=$ids<br>";    
    
    // curl로 gcm을 호출
    $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."<br>";
    curl_close($ch);
}

$arr = array();
$arr['data'] = array();
$arr['data']['msg'] = $msg; 
$arr['registration_ids'] = array();
$ids = array();

$sql = "select user_id, regid from gcm";
$result = $mysqli->query($sql);

// 결과 에러 체크
if(!$result || $result->num_rows <= 0) {
    echo "regid error=".$mysqli->error."<br>";
    $mysqli->close();
    exit;
}

echo "num_rows=".$result->num_rows."<br>";

// 1000단위로 잘라서 넣음
for($i=0; $i<$result->num_rows; $i++) {
    $divi = (int)($i/1000);
    $modi = $i%1000;
    echo "divi=$divi modi=$modi<br>";
    
    // 1000개 꽉찼을때 처리
    if($i > 0 && $modi == 0) {// 0이 아니고 1000의 배수일때
        echo "1000개<br>";
        send_gcm($headers, $arr, $ids);
        $arr['registration_ids'] = array();
        $ids = array();
    }

    $row = $result->fetch_array(MYSQLI_NUM);
    
    $thisi = $i-$divi*1000;
    echo "i=$i thisi=$thisi<Br>";
    // 나중에 DB에 로그를 넣기위해서 id를 기억함
    $ids[$i-$divi*1000] = $row[0];
    $arr['registration_ids'][$i-$divi*1000] = $row[1];
}

// 나머지를 보내자
if(count($arr['registration_ids']) > 0) {
    echo "나머지=".count($arr['registration_ids'])." regid=".$arr['registration_ids'][0]."<br>";
    echo "headers=$headers<br>";
    echo "arr=$arr<br>";    
    echo "ids=$ids<br>";    
    send_gcm($headers, $arr, $ids);
}

$result->free();
$mysqli->close();
?>


반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday