Уведомления пользователя GCM: отсутствует поле "registration_id"

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

Однако, когда я отправляю запрос следующим образом:

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.

Из документация:

registration_ids: [...] Запрос должен включать получателя - это может быть либо идентификатор регистрации, либо массив идентификаторов регистрации, либо уведомление. Обязательный параметр.

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

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

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

  • включая пустой массив для registration_ids, не помогает
  • отправка значения notification_key в качестве идентификатора регистрации в поле registration_ids, не работает либо
  • настройка заголовка project_id на наш номер проекта (как требуется при создании notification_key), до сих пор не повезло
  • используя CCS (XMPP) вместо HTTP для связи с сервером API GCM, но, к сожалению, IP заблокирован в Google App Engine
  • включая как notification_key, так и notification_key_name в запросе, не помогает

ОБНОВЛЕНИЕ: В соответствии с предложенным здесь, я также попытался отправить полезную нагрузку на /gcm/notification, "operation": "send", включенное в полезную нагрузку запроса JSON. Все равно никакой помощи. Теперь я получаю:

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

То же самое, только на этот раз он отправляется обратно в JSON-кодировку.

Ответ 1

Документация не работает, вы должны использовать этот запрос:

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 для более подробной информации

Ответ 2

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

Отметьте этот вне.

Ответ 3

Я также встретил эту проблему "HTTP/1.1 401 Unauthorized". И я решил проблему, заменив ключ API ключом браузера.

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

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