2

Google gcm 구현을위한 기본 예를 읽었습니다. 내가 성공적으로 gcm 서버에서 등록 ID를 제공하는 작은 클라이언트 쪽 안드로이드 응용 프로그램을 개발했습니다. 지금 서버 측에서 레일에 따라서 우리는 gcm https://github.com/dondeng/gcm_on_rails의 서버 측을 구현하기 위해이 보석을 사용하고 있습니다. 내 등록 ID를 내 서버로 전달합니다. 내가 성공적으로 명령을 실행Android Gcm ROR과 함께 작동하지 않음

장치 = GCM :: Device.create (: registration_id => "XXXXXXXXXXXXXXXXXXXXXX")

통지 = GCM :: Notification.new

notification.device = 장치

notification.collapse_key = "updates_available"

알림. delay_while_idle = 사실

notification.data = {: registration_ids => [ "RegistrationID"] : 데이터 => {: MESSAGE_TEXT =>} "클라우드 나인에 엎드려"}

notification.save 알림을 전달하는 데 사용

: 오류없이 실행

$ rake gcm:notifications:deliver 

내 레이크 명령. 그러나이 모든 작업을 완료 한 후에 내 장치는 어떤 메시지도받지 못하고 있습니다. 백그라운드에서 진행되는 작업을 모릅니다. 보낸 메시지를 장치별로 제대로 확인하는 방법 ... 도움이 필요합니다 ... 감사합니다 ....

답변

0

서버 측에서 오류가 발생하지 않으면 Android 앱에서 이벤트를 올바르게 처리하지 못하고있을 수 있습니다.

다음 지침을 따르십시오 : http://developer.android.com/guide/google/gcm/gs.html#android-app 및 디버그 로그를 작성하십시오.

+0

안녕하세요 manelizzard 답장을 보내 주셔서 감사합니다 ... 위의 링크에 따라 androidmanifest.xml에서 이미 필요한 모든 권한을 가져옵니다. 내 클라이언트 측 안드로이드 응용 프로그램에는 ** GCMIntentService.java ** 확장 GCMBaseIntentService **와 ** mainactivity.java ** 두 개의 java 파일이 있습니다. 이 클라이언트 측 응용 프로그램을 실행하면 오류없이 실행되며 또한 regId를 제공합니다 ... 서버에서 알림을받지 못함 ... 클라이언트 측에서 놓친 기타 ... – nilkash

+0

서버 사이트를 성공적으로 구현했습니다. 파트 및 클라이언트 측 파트 http://androidv5.wordpress.com/2012/08/15/how-to-implement-google-cloud-messaging/ 또한 사용자가 성공적으로 등록되었음을 보여 주지만 시도했을 때 사용자에게 메시지를 보내면 오류가 발생합니다 ** Servlet SendAllMessagesServlet을 사용할 수 없습니다 ** – nilkash

+0

이것은 서버 측 오류입니다. SendlAllMessagesServlet.java' [여기] (http://code.google.com/searchframe#76pVTUyLnDo/samples/gcm-demo-server/src/com/google/android/gcm/demo/server/) 클래스가 있습니까? SendAllMessagesServlet.java & q = SendAllMessages % 20 패키지 : gcm % 5C.googlecode % 5C.com & ct = rc & cd = 1 & sq =) 'web.xml'[여기] (http://code.google.com/searchframe#76pVTUyLnDo/samples /gcm-demo-server/WebContent/WEB-INF/web.xml&q=SendAllMessages%20package:gcm%5C.googlecode%5C.com&ct=rc&cd=3&sq=)? – manelizzard

1

GCM 디버깅 메시지는 복잡하고 어려울 수 있습니다.

한 가지 가능한 이유는 잘못된 API key for GCM이며 구성 파일에 정의해야합니다. 잘못된 API 키를 사용하면 메시지가 전송되지 않았지만 서버 {:code=>200, :message=>nil}에서 성공한 응답을받을 수 있습니다. 이 경우 Google API Console으로 이동하여 올바른 키를 찾으십시오.

또 다른 가능한 이유는 기기에 대해 REGISTRATION_ID입니다. REGISTRATION_ID가 올바르지 않으면 NotRegistered 또는 InvalidRegistration 오류가 발생할 수 있습니다.이 오류는 gcm_on_rails 플러그인 (현재)에서 인식되지 않습니다. 다음 curl 명령을 사용하여 콘솔을 통해 API를 디버깅합니다 (API_KEY 및 기기의 REGISTRATION_ID 삽입).

curl --header "Authorization: key=API_KEY" \ 
    --header Content-Type:"application/json" \ 
    https://android.googleapis.com/gcm/send \ 
    -d "{\"registration_ids\":[\"REGISTRATION_ID\"], 
      \"data\":{\"message_text\":\"Test, Test\"}}" 

다음과 같이한다 GCM API를 호출하는 성공/실패 시도 :

{"multicast_id":7961..,"success":1,"failure":0,"canonical_ids":1, 
"results":[{"registration_id":"..","message_id":"0:.."}]} 

{"multicast_id":7961..,"success":0,"failure":1,"canonical_ids":0, 
"results":[{"error":"NotRegistered"}]} 

마지막으로 또 다른 이유는 잘못된 하루에 키는 다음과 같은 message_type 같은 예약어를 사용하지 않는이 데이터 해시 키.상태 코드 200을 반환하지만 알림을 전달하지 않습니다. message_typeadvanced options 중 하나입니다 (나를 찾으려면 한 시간 이상 걸렸습니다).