2013-11-01 41 views
12

我們的項目已經被列入白名單用於測試新的GCM User Notifications API,允許分組的註冊ID,到那時,可用於發送郵件,並根據所擁有的所有設備的單一的「通知」「鍵registration_ids」場用戶。GCM用戶通知:缺少

然而,當我發送這樣的請求:

POST /gcm/send 
Authorization: key=… 
Content-Type: application/json 

{"notification_key": "…", 
"data": {…} 
} 

我得到一個錯誤響應:

400 Bad Request 

Missing "registration_ids" field 

使用registration_ids字段發送消息,而不是notification_key修正的問題(和消息得到交付),但使用用戶通知API的全部要點是使用notification_key而不是registration_ids

documentation

registration_ids: [...]的請求必須包括一個接收者這可以是一個註冊ID,註冊ID的陣列,或一個notification_key。需要。

notification_key: 單個用戶與該用戶相關聯的多個註冊ID映射的字符串。這允許第三方服務器將單條消息發送給單個用戶擁有的多個應用實例(通常位於多個設備上)。第三方服務器可以使用notification_key作爲消息的目標,而不是單獨的註冊ID(或註冊ID陣列)。 […] 可選的。

上述示例使用HTTP連接服務器https://android.googleapis.com

到目前爲止我嘗試:

  • 包括用於registration_ids空數組,並不能幫助
  • 發送notification_key值作爲registration_ids字段一個註冊ID,無法正常工作或
  • project_id標題設置爲我們的項目編號(創建notification_key時需要),仍然沒有運氣
  • 使用CCS(XMPP)代替HTTP與GCM API服務器進行通信,但不幸的是the IP is blocked on Google App Engine
  • 既包括notification_key和請求notification_key_name,不利於

UPDATE:每個建議here作爲,我也試過張貼有效載荷/gcm/notification,與"operation": "send"屬性包含在JSON請求負載。仍然沒有幫助。現在,我得到:

{"error":"Missing \"registration_ids\" field"} 

同樣的事情,只是這一次它被送回JSON編碼。

+1

'registration_ids '一旦設備獲得了GCM註冊,就會得到一些東西。您必須先將此ID存儲到您的數據庫中,然後使用它來發送通知 –

+0

@SunilMishra我可以使用'registration_ids'生成'notification_key',然後我應該能夠使用'notification_key' *來代替*'registration_ids'。 –

+0

您是否嘗試過在請求中同時包含'notification_key'和'notification_key_name'? – Eran

回答

10

的文檔是越野車,你必須使用這個請求:

curl -vvv -X POST --header "Content-Type: application/json" --header "project_id: <YOUR-PROJECT-ID>" --header "Authorization: key=<YOUR-PROJECT-SECRET-KEY>" --data @- "https://android.googleapis.com/gcm/send" << EOF 
{ 
    "to": "<NOTIFICATION-ID>", 
    "data": {}, 
} 
EOF 

請參見我的博客文章https://medium.com/appunite-edu-collection/d7df385b0ff4更多細節

+1

你絕對是正確的。我從「notification_key」更改爲「to」,它工作。文檔真的是越野車! –

+1

我該如何提高@Jacek Marchwicki再多幾次?!我還會注意到,我不得不使用我的「項目編號」,而不是我的「項目編號」 – xbakesx

+0

GCM文檔可能是錯誤的!謝謝! –

0
Have you got project_id for your project. 
    If yes then have you included same at proper place. 

檢查this了..

+0

上游消息需要項目ID。對於下游(服務器 - > GCM - > Android),GCM接受一個API密鑰(作爲「授權」頭的一部分),然後用於驗證服務器並將其連接到相應的項目。 –

+0

GCM需要project_id來了解哪個應用程序需要注意...一旦GCM找到了所需的項目,那麼它通過將用戶的device_id放置通知來向前移動。 – AndroidHacker

+0

不,GCM可以根據API密鑰來識別請求,而且用戶通知API不需要'device_id'。請仔細閱讀我的問題。此外,我試圖包括項目ID,以防萬一。它沒有幫助。 –