2015년 3월 29일 일요일

[ Android ] GCM Server 만들기 (PHP)

GCM Client 만들기를 통하여 클라이언트 부분을 만들어 놓았습니다. 이번에는 PHP 서버에서 클라이언트로 푸시를 보내 동작을 확인해 보겠습니다.
 이 튜토리얼에서는 PHP의 설치 과정이나 사용방법을 다루지는 않습니다.


1. PHP 코드 작성하기

 위 코드를 작성하고 클라이언트에서 획득한 '등록ID'와 구글 개발자 콘솔에서 발급받은 '서버 키'를 대입시켜 줍니다. 그리고 클라이언트로 전송할 내용을 자유롭게 Json 형태로 넣어주면 코드가 완성됩니다.

 테스트 가능한 본인의 서버에 파일을 올리고 해당 페이지를 실행시키면 잠시 후 클라이언트로 푸시가 전송됩니다.

 만약 한 명의 사용자가 아닌 다수의 사용자에게 푸시를 전송하려면 arr['registration_ids']에 배열 형태로 등록ID를 넣어주시면 됩니다.

댓글 8개:

  1. 안녕하세요 이번에 GCM을 구현하려는 학생입니다. 안드로이드 클라이언트는 GCM Test Server를 통해서 제대로 구현된 것을 확인했습니다. 님께서 올려준 PHP코드로 GCM서버를 구현하려고 하는데 자꾸 오류가 나네요. Notice: Trying to get property of non-object in 이런 오류가 나는데 혹시 해결방법을 알 수 있을까요?

    답글삭제
    답글
    1. 먼저 PHP에서 Notice는 오류가 아닌 알림 정도로 파악 하시면 됩니다.
      해당 문구 뒤에 소스 몇번째 라인을 뜻하는지 출력이되므로 확인이 필요할 것 같습니다.

      삭제
    2. Notice라면 실행은 되서 푸시가 와야할 것 같은데 아예 푸시가 오지 않습니다. 제가 저 Notice가 나는 부분은 $cnt = $obj->{"success"}; 입니다. https://gcmsender.herokuapp.com/ 이 테스트 서버를 이용해서 보내면 제대로 푸시가 옵니다. 하지만 테스트 서버를 이용해서 보낸 Server API Key와 RegID를 그대로 소스에 대입해서 해도 이상하게 위와 같은 Notice가 뜨네요. 결과적으로 푸시가 안 오구요. 뭐가 잘못된 건지 알 수 있을까요??? ㅠ

      삭제
  2. 작성자가 댓글을 삭제했습니다.

    답글삭제
  3. 저도 조규선님 말대로 같은 상황, 같은 에러가 납니다.
    33번째 줄에서 나더군요.. 왜 안되는지 잘 모르겠씁니다. 다들 잘 이용하는데 말이죠..

    php 버전은 5.6이라 당연히 json포함되어있고 curl 모듈도 탑제가 되어있는데 안되더라구요... 읭..

    그래서 그냥 저도 gcmsender.herokuapp.com 에서 사용중입니다.


    답글삭제
  4. 감사합니다.
    여기저기 보다가 발견한 제일 짧은 코드인거 같은데 완벽하게 동작하네요.
    발견한 다른 코드에서 미리 함수나 클래스로 분리를 해놓거나 DB문을 넣어두거나
    변수를 따로 설정해서 알아보기도 어려웠는데 이 코드는 배열하나로 끝내버리네요.
    $regid를 mysql DB에서 불러오는 문장으로 대체해도 40줄정도밖에 안됩니다.
    정말 알아보기 쉽게 작성된것 같습니다.

    답글삭제
  5. 이창근님 여쭤볼게 있습니다. php 올려주신 코드로 잘 작성 했는데요. 비슷한 로직으로 두개의 파일을 만들었는데 하나의 파일은 안드로이드에서 제목과 내용이 잘 푸시가 완료됩니다. 근데 다른 비슷하게 만든 파일은 푸시는 오나 제목과 내용이 수신이 안되는데 뭐가 문제일까요 ?? 안드로이드 어플은 같은 거구요. php코드도 sql 쿼리 사용하는 부분 제외하고는 같은 gcm 전송코드입니다.

    답글삭제
  6. 하나만 문의드립니다. 여기에 있는 GCM 클라이언트와 서버용 모두 설피하고 서버의 php 파일을 실행하면 앱에서 푸시가 나타납니다. 그런데 서버쪽의 php에서 보낸 titl와 message는 앱에서 수신을 하지 않고 다른메세지가 나타납니다. 어떻게 하면 서버에서 보낸 값이 앱에 그대로 나타날까요?

    답글삭제

Post List