안녕하세요
php 3nd 파티 서버를 구현하고 안드로이드에서 처음 어플을 실행하면 등록id를 php서버로 보내줍니다.
그리고 받은 php서버는 바로 바로 다시 등록id로 c2dm서버에 요청을 하게됩니다.
그리고 안드로이드폰에서는 receive가 잘 됩니다.
하지만 여기서 문제가 생기는데, 이상하게도 intent.getExtras().getString("msg")를 하면 null이 들어옵니다.
그래서 intent.getextras90.toString()을 해보면 등록Id만 들어 있고 제가 보낸 파라미터값은 들어있지 않는데요.
이걸로 몇시간동안 고생하고 있는데 혹시 왜 그런지 아시는 분 있으시면 답 좀 해주시면 고맙겠습니다.
c2dm서버를 통해서 안드로이드폰에 receive가 된다는 것은 제대로 값이 날라왔다는 것인데,
왜 제가보낸 데이터는 null인지 모르겠습니다.
간단한 php서버 함수입니다. 이 함수로 요청을 하게 됩니다.
function sendMessageToPhone($auth, $deviceRegistrationId, $msgType, $messageText) {
$data = array(
'registration_id' => $deviceRegistrationId,
'collapse_key' => $msgType,
'data.message' => $messageText);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://android.apis.google.com/c2dm/send");
$headers = array(
"Content-Type: application/x-www-form-urlencoded",
"Content-Length: ".strlen($data),
"Authorization: GoogleLogin auth=$auth"
);
if($headers){
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
curl_close($ch);
}
안드로이드 소스입니다.
@Override
public void onReceive(Context context, Intent intent) {
this.ctx = context;
String c2dm_msg = null;
// 등록을 하는 경우
if (intent.getAction().equals(
"com.google.android.c2dm.intent.REGISTRATION"))
handleRegistration(context, intent);
// 푸쉬 메시지를 받은 경우 Notification으로 메시지 보이기
else if (intent.getAction().equals(
"com.google.android.c2dm.intent.RECEIVE"))
c2dm_msg = intent.getExtras().getString("message");
Log.d(TAG, intent.getExtras().toString());
//Log.d(TAG, c2dm_msg);
setNotification("");
}
$data = array('registration_id' => $deviceRegistrationId, 'collapse_key' => $msgType, 'data.message' => $messageText);
이 부분이 배열로 되어 있는데요.
$data = 'registration_id='.$deviceRegistrationId.'&collapse_key='.$msgType.'&data.message='.$messageText;
이렇게 고쳐서 함 해보세요~
저는 이렇게 넘기고 있거든요^^
만약 한글을 넘기시는 거라면 urlencode($messageText)로 넘기시면 됩니다~



