MongoDB 와 Parse server 를 구축하였으므로 실제로 메시지를 보내 푸시가 정상적으로 보내지는지 확인한다.

Parse DB 에는 이미 device 데이터들이 업로드 되어 있다고 가정한다 ^^ 없는 사람들은 installation 활용하여 데이터 업로드.

아래는 appId 와 masterKey 등을 헤더에 넣어 POST 요청으로 android 와 ios 사용자 모두에게 메시지를 보내는 쿼리를 보내는 예제이다.



1. Configure Client Apps


앱 개발자들에게 아래의 링크를 주고 설정하라고 말한다ㅋ


IOS - http://parse.com/apps/quickstart#parse_data/mobile/ios

Android - http://parse.com/apps/quickstart#parse_data/mobile/android


간단히 설명하자면,

해당 개발 언어의 최신 Parse SDK 를 다운받아 추가하고, AppId 와 Parse server 를 세팅하여 해당 앱에서 Parse 서버에 연결할 수 있게 한다.



2. Push Test


$ curl -X POST \
    -"X-Parse-Application-Id: you_app_id" \
    -"X-Parse-Master-Key: your_master_key" \
    -"Content-Type: application/json" \
    -'{
          "where": {
            "deviceType": {
              "$in": [
                "ios",
                "android"
              ]
            }
          },
          "data": {
            "title": "The Shining",
            "alert": "All work and no play makes Jack a dull boy."
          }
        }'\   http://your_server_address/parse/push
cs


요청에 문제가 없다면 JSON 방식의 응답 {"result":true} 를 전달받을 것이고, 문제가 있다면 error code 와 에러 내용이 출력된다.

{"result":true} 가 출력되었다면 Parse 서버에는 다음과 유사한 로그가 기록된다.


GCM request and response {"request":{"params":{"priority":"normal","data":{"time":"2016-02-10T03:21:59.065Z","push_id":"NTDgWw7kp8","data":"{\"alert\":\"All work and no play makes Jack a dull boy.\"}"}}},"response":{"multicast_id":5318039027588186000,"success":1,"failure":0,"canonical_ids":0,"results":[{"registration_id":"APA91bEdLpZnXT76vpkvkD7uWXEAgfrZgkiH_ybkzXqhaNcRw1KHOY0s9GUKNgneGxe2PqJ5Swk1-Vf852kpHAP0Mhoj5wd1MVXpRsRr_3KTQo_dkNd_5wcQ__yWnWLxbeM3kg_JziJK","message_id":"0:1455074519347821%df0f8ea7f9fd7ecd"}]}}
APNS Connected  APNS Notification transmitted to:7a7d2864598e1f65e6e02135245b7daf8ea510514e6376f072dc29d53facaa41
cs



3. Troubleshooting


만약 위 예제처럼 테스트를 했는데 푸시가 정상적으로 전달되지 않았다면 다음 사항들을 순서대로 확인한다.


- PUSH 요청시 {"result":true} 가 출력되지 않았다면, AppId, MasterKey, 요청 타입, 쿼리를 다시 한번 확인한다.

- 요청 URL (http://your_server_address:port/parse/push) 이 올바르지 않거나 포트가 막혀 있거나 parse-server 데몬이 running 상태가 아니라면 응답이 오지 않을 수도 있다.

- parse-server 데몬 상태 확인 : $ ps ax | grep parse

- PUSH 요청시 {"result":true} 가 출력되었다면, 그 다음 처리 로그는 parse-server 에서 확인할 수 있다.

- Parse 서버 로그에서 (예, GCM request and response {"request"... ) "response" 가 없다면 configuration.json 파일에 값이 올바른지 체크한다.

- "response" 는 있지만 푸시 상태가 fail 이라면 보통 {"error":"MismatchSenderId"} 이란 메시지를 볼 수 있는데, 클라이언트 앱 설정을 확인한다.


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  4개가 달렸습니다.
  1. 제우스 2016.11.02 20:05
    기존 parse의 installation 정보를 활용해서 푸시 발송이 가능한가요?
    하기와 같이 해보면 모두 정상으로 나오는데 실제 푸시는 발송 되지 않습니다
    기존 그대로 활용이 가능한지요?

    <서버 셋팅 환경>
    1. ssl을 사용하지 않음
    2. 기존 parse installation 데이터 사용
    3. ios의 경우 기존 parse.com의 p12 파일 사용
    4. 기존 ios앱 사용
    • 이관 작업 하시나봅니다.. result 는 true 인데 실제 푸시 발송이 안되었다면 세팅은 정상적으로 된거 같구요. 기존 installation 정보를 그대로 가져왔다면 될 것 같은데... DB 구조만 동일하게 하나 더 생성하셔서 테스트 해보는 것도 좋겠네요.
  2. 현재 parse 서버를 이관하여 작업중인데, 클라이언트단(안드로이드)을 수정하지 않은 채로 서버상의 키값만 변경하여 테스트를 할 수 있는 방법이 없을까요?
    클라이언트단(안드로이드)에는 키가 등록되어있지 않은 상황입니다.(sender-id, api-key)
    • 글쎄요... ios 에는 잘된다는 말씀이시죠? 안드로이드에 키가 등록이 되지 않았는데 테스트를 하신다는 말씀이 잘 이해가 안되네요; push 가 되려면 키 등록이 되야 하는걸로 알고 있습니다만...ㅜ 그 이상은 잘 모르겠네요.
secret