2013-11-01 2 views
12

Наш проект был включен в белый список для тестирования нового API GCM User Notifications, который позволяет группировать идентификаторы регистрации на один «ключ уведомления», который затем может использоваться для отправки сообщений всем устройствам, принадлежащим Пользователь.Уведомления пользователя GCM: отсутствует поле «registration_ids»

Однако, когда я отправить запрос, как это:

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: [...] Запрос должен включать получатель-это может быть либо регистрационный номер, массив идентификаторов регистрации, или notification_key. Необходимые.

notification_key: Строка, которая отображает одного пользователя к нескольким идентификаторам регистрации, связанные с этим пользователем. Это позволяет стороннему серверу отправлять одно сообщение нескольким экземплярам приложений (обычно на нескольких устройствах), принадлежащими одному пользователю. Сторонний сервер может использовать message_key как цель для сообщения, а не отдельный идентификатор регистрации (или массив идентификаторов регистрации). […] Необязательный.

В приведенном выше примере используется сервер HTTP-подключения по адресу https://android.googleapis.com.

До сих пор я пытался:

  • включая пустой массив для registration_ids, не помогает
  • посылает значение notification_key в качестве регистрационного идентификатора в registration_ids поле, не работает либо
  • установив заголовок project_id на наш номер проекта (как требуется при создании notification_key), до сих пор не повезло
  • с использованием CCS (XMPP) вместо HTTP для связи с сервером API GCM, но к сожалению 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. Сначала вы должны сохранить этот идентификатор в своей базе данных, а затем использовать его для отправки уведомлений. –

+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» на «на», и он работает. Документация действительно глючит! –

+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

Идентификатор проекта необходим для восходящих сообщений. Для downstream (Server -> GCM -> Android) GCM принимает ключ API (как часть заголовка «Авторизация»), который затем используется для аутентификации сервера и подключения его к соответствующему проекту. –

+0

project_id от GCM требуется, чтобы узнать, какое приложение требует внимания ... После того, как GCM найдет желаемый проект, он движется вперед, беря device_id пользователя для отправки уведомления. – AndroidHacker

+0

Нет, GCM может идентифицировать запрос только на основе ключа API, а 'device_id' не требуется в API-интерфейсах пользователей. Пожалуйста, внимательно прочитайте мой вопрос. Кроме того, я попробовал, включая ID проекта, на всякий случай. Это не помогло. –

0

я встретил эту проблему "HTTP/1.1 401 Несанкционированный". И я решил проблему, заменив Ключ API на Ключ браузера.

Используйте ключ браузера, если приложение работает на клиенте.

Пожалуйста, обратитесь к следующей ссылке: https://developers.google.com/console/help/new/#generatingdevkeys

Смежные вопросы