2

我讀過谷歌gcm的基本示例。我開發了小型客戶端Android應用程序,它成功地給了我gcm服務器的註冊ID ..現在在服務器端我在rails上使用Ruby,因此我們使用這個gem來實現服務器端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 => 「獲取關於雲9」}}

notification.save

用於傳遞通知

:沒有任何錯誤運行

$ rake gcm:notifications:deliver 

我rake命令。但完成所有這些任務後,我的設備沒有收到任何消息..我不知道後臺發生了什麼。如何確認發送的消息正確接收設備..需要幫助...謝謝....

回答

0

如果你沒有在服務器端的錯誤,也許你沒有正確處理你的Android應用程序中的事件。

請遵守本指引:http://developer.android.com/guide/google/gcm/gs.html#android-app,並寫入日誌以進行調試。

+0

嗨manelizzard謝謝你的回覆......根據上面的鏈接我已經在androidmanifest.xml中提取了所有必需的權限。我的客戶端Android應用程序包含兩個java文件,一個是** GCMIntentService.java **,另一個是** mainactivity.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%20package:gcm%5C.googlecode%5C.com&ct = rc&cd = 1&sq =)並映射到'web.xml' [here](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不正確,您可能會收到一個未註冊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之一(花了我一個多小時才找出來的)。