안드로이드 개발 질문/답변
(글 수 45,052)
예를 들어, a라는 변수가 있습니다. reg_id = hello 라고 가정합니다.
실제로 reg_id를 자바에서 length찍어봤는데 140정도 나왔습니다.
1) 안드로이드에서 php 서버 페이지로 Post 방식으로 reg_id를 전송합니다.
2) php서버 페이지에서 mysql과 연동하여 reg_id값은 mysql db에 저장이 됩니다.
- (이 떄 reg_id은 nvarchar(250) 형태입니다.)
- 여기까지 db에는 reg_id값(안드로이드어플로부터 받은)이 저장이 되있습니다.
3) php변수중 a라는 변수에 mysql에 저장된 reg_id값을 빼와서 저장을 했습니다. (db에 저장된 red_id=hello 가정합니다.)
- db로부터 뺴온 reg_id값을 갖고 구글서버로 Post방식으로 전송했습니다. 밑에 curl소스가 그것입니다.
문제는 이게 안됩니다.
4) a라는 변수에 제가 직접 hello라고 입력을 했습니다.
- 잘됩니다.
* 결론 *
- 제 생각으로는 구글서버에 보내는 데이터형은 Json형태입니다. 데이터형과 관련하여 계속해서 소스를 살펴보고 있습니다만
안풀립니다.
- 제가 둘다 비교해가며 확인했지만 철자는 다른게 없습니다.
- 또한 제가 안드로이드에서 php로 reg_id를 post방식으로 전송해서 DB에 저장하는게 아닌
제가 직접 DB에 reg_id 값을 집어넣어서 뺴와도 안됩니다.
아래는 제가 사용한 소스 및 환경설정입니다.
이 때 사용된 소스입니다.(자바)
conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
StringBuffer buffer = new StringBuffer();
buffer.append("id").append("=").append(id).append("&");
buffer.append("pw").append("=").append(pw).append("&");
buffer.append("reg_id").append("=").append(reg_id).append("&");
buffer.append("msg").append("=").append(msg);
PrintWriter pw = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "euc-kr"));
pw.write(buffer.toString()); //write함으로써 php서버에 buffer형태의 값을 보냅니다.
파라미터안에는 reg_id라는 파라미터가있습니다.
mysql에 저장된 reg_id는 nvarchar(250) 형태 입니다.
php 소스입니다.(서버)
<?
$headers = array(
'Content-Type:application/json',
'Authorization:key=AIzaSyCt0QXt8ZCG5w-gF6OYxkGKEmUs2OaTBOM'
);
$temp_id = $_POST['id']; //파라미터로 받은 id를 temp_id에 저장합니다.
$temp_msg = $_POST['msg']; //파라미터로 받은 msg를 temp_msg에 저장합니다.
$connect=mysql_connect("localhost", "아이디", "비번"); //db연동하는 과정입니다.
mysql_select_db("테이블명", $connect);
$result=mysql_query("select reg_id from personinfo where id='$temp_id'"); // db에서 id=temp_id와 같은 reg_id를 뺴옵니다.
$reg_id=mysql_result($result, 0, "reg_id"); // $reg_id에 db에서 빼온reg_id값을 집어넣습니다.
$arr = array(); //json형태의 데이터를 구성하기 위한 php 문법입니다.
$arr['data'] = array();
$arr['data']['msg'] = '$temp_msg';
$arr['registration_ids'] = array();
$arr['registration_ids'][0] = '$reg_id'; // 이 부분이 가장 문제입니다. 이렇게 db에서 빼온값을 집어넣으면
// 작동이 안되고
// $arr['registration_ids'][0] = '실제 reg_id값' 을 직접 입력하면 됩니다.
$ch = curl_init();
// 구글에 post방식으로 메시지를 보내는 소스입니다.
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);
?>