마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

FCM 앱에서 푸시 보내기

0 추천

안녕하세요,

제가 FCM 구현하면서 질문이 있는데요.

앱 설치 및 실행시 토큰 생성 후 디비 Insert, 그리고 값 불러와 메시지 보내기를 웹으로는 다 테스트해보니 잘 작동합니다.

그래서 이번엔 앱에서 입력한 문자열 값을, FCM서버에 보내는 php에 보내서 그 php에서 넘겨받은 값을 FCM서버에 보내 푸시가 올수 있게 테스트중이거든요.

아래는 입력한 곳(et_text)에서 버튼(btn_submit)을 눌렀을 때 푸시가 가도록 작성한 곳입니다.


@Override
public void onClick(View view) {

    switch (view.getId()){
        case R.id.btn_img:

            break;
        case R.id.btn_submit:

            String textStr = et_text.getText().toString();

            Toast.makeText(this, textStr, Toast.LENGTH_LONG).show();
            HttpURLConnection connection;

            URL url = null;
            try {
                url = new URL("xxxx/FCMPushMessage.php");
                connection = (HttpURLConnection) url.openConnection();
                connection.setDoOutput(true); //서버에 입력 가능하게 세팅한다.
                connection.setDoInput(true); //서버에서 출력 내용을 받아오게 세팅한다.
                connection.setRequestMethod("POST"); // POST방식을 사용한다.
                StringBuffer buffer = new StringBuffer();

                buffer = buffer.append("Text").append("=").append(textStr); 

                OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream());
                wr.write(buffer.toString());
                wr.flush(); // 서버에 작성
                wr.close(); // 객체를 닫음

                // 서버에서 값을 받아오지 않더라도 작성해야함
                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                StringBuffer sb = new StringBuffer();
                String line = null;
                connection.disconnect();
                while ((line = reader.readLine()) != null) {
                    sb.append(line);
                }

            } catch (Exception e) {
                e.printStackTrace();
            }


            break;

    }

}

위에가 네이티브 소스 중에 액티비티 연결된 곳이거든요.

입력한 값을 string으로 바꿔서 POST에 싣고, FCMPushMessage.php에 보냅니다.

 

그리고 php에서는

....

...


$Text = $_POST['Text'];
$imgsrc = "이미지경로"
$message = array("message" => $message, "imgsrc" => $imgsrc);

$message_result = send_notification($tokens, $message);
echo $message_result;
echo "<br>PushMessage OK";

 

이런식으로 값을 넘겨받아 send_notification을 실행하거든요. 이렇게 하면 푸시가 오질 않아서요.

그냥 저 php를 바로 주소창에치면 넘겨받은 메시지는 없기에 메시지는 보이지 않지만 푸시는 오거든요..

 

혹시 어디가 잘못된건가 해서 여쭤보려고합니다!

겸군님 (1,900 포인트) 님이 2016년 9월 27일 질문

1개의 답변

0 추천
 
채택된 답변

$message_result 에 결과값이 뭐라고 나오나요?

 

Development Guy (70,570 포인트) 님이 2016년 9월 27일 답변
겸군님님이 2016년 10월 13일 채택됨
제가 아직 초보라서요..

네이티브에서 php로 연결한 뒤에, 웹상에서 echo로 찍어보는걸 확인하는 방법이 있나요? 웹상에서 보내는거면 php만 새로고침해보면 되는데.. 네이티브에서 받은걸 새로고침해서 확인해보려면 변수 초기화되지 않나해서요.

지금 계속 해보고는 있는데.. 네이티브에서 해당 php를 여는거 자체가 안되고 있는거 같아요. 해당 php 열리면 디비에 한 줄 아무거나 들어가게 만들었는데.. php를 직접 바로 키면 디비에 한 줄이 들어가는데, 네이티브로 버튼누르면 디비에 안들어가네요..

토큰 등록할 때 쓴 소스 그대로에 php경로랑 변수만 바꿨는데 뭐가 문제인지 잘 모르겠습니다..
말씀하시는 네이티브가 안드로이드 소스파일 말씀하시는거죠?
안드로이드에서 웹에 요청하는 코드를 넣으셨다면 브라우저에서 표시되는 것처럼 httpResponse 값도 확인 하실 수가 있습니다. 만약 httpClient 를 사용하셨다면 httpResponse로 구글링 해보세요.
답변감사합니다 알아보겠습니다 :D
url = new URL("xxxx/FCMPushMessage.php");
 이 부분이요. URL의 파라미터가 url 포맷이 맞기는 한거죠? 혹시라도 위의 포맷처럼 된 거면 동작 안하는게 당연한거라...
그런 경우면 URL 포맷이 아니라고 로그에 에러가 뜨긴 하지만요.
...