티스토리 뷰
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();
?>
반응형
'모바일 프로그래밍' 카테고리의 다른 글
Android 8.0 Oreo notification channel (0) | 2018.05.19 |
---|---|
Android Studio 3.1 Kotlin Support 빌드 에러 (0) | 2018.05.11 |
Android Studio Error: Default Activity Not Found (0) | 2018.04.18 |
Android Studio NDK: could not load library “libgnustl_shared.so” (0) | 2018.04.15 |
Android Only fullscreen opaque activities can request orientation (0) | 2018.02.05 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday