2013-03-01 2 views
5

Я работаю над push-уведомлениями с помощью Google Cloud Messaging (GCM). Я могу настроить сервер и клиентскую сторону после this tutorial.Подключение к серверу GCM, запущенному на локальном сервере

Сервер работает на Apache Tomcat6.0 (localhost) и эмуляторе Android в API Google (уровень API 17). У меня есть идентификатор отправителя и ключ API. При запуске из эмулятора я получаю сообщение об успешном подключении устройства. После этого после отправки сообщения с сервера отображается следующая ошибка.

com.google.android.gcm.server.InvalidRequestException: HTTP Status Code: 401() 
com.google.android.gcm.server.Sender.sendNoRetry(Sender.java:211) 
com.google.android.gcm.server.Sender.send(Sender.java:125) 
com.google.android.gcm.demo.server.SendAllMessagesServlet.doPost(SendAllMessagesServlet.java:83) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

Из других сообщений я понимаю, что неправильный ключ API является виновником. Но в моем случае я убедился, что использую правильный вариант из консоли API.

Кстати, когда я запускал эмулятор, я видел сообщение «отправка regId на сервер». Что такое идентификатор регистрации? Это не то же самое, что и идентификатор отправителя; выглядит как закодированный.

Любой прорыв?

EDIT

вопрос окончательно решен! Ant не правильно создавал WAR-файл. Поэтому ключ API вряд ли обновляется. Это был кошмар, чтобы обнаружить ошибку. Спасибо всем за вклад!

+0

Эмулятор не работает. Пользуйтесь с устройством –

+0

любыми ограничениями на уровне API-устройств.? – Renjith

+0

Его работа выше 2.2 –

ответ

2

Я предлагаю вам прочитать руководство GCM:

GCM guide for Android

Отправитель ID является константой, которая будет использоваться в коммуникации между GCM и сервером. RegsitratiomID (regID) управляется службой GCM, когда ваш телефон регистрируется на его службе.

Лучшее определение: http://developer.android.com/google/gcm/gcm.html

Sender ID:

Ряд проекта вы получаете из консоли API, как описано в разделе Приступая к работе. Идентификатор отправителя используется в процессе регистрации для идентификации приложения Android, которому разрешено отправлять сообщения на устройство.

Регистрация ID:

Идентификатор выданный серверов ГКХ в Android приложение, которое позволяет ему получать сообщения. После того, как приложение Android имеет идентификатор регистрации, он отправляет его на сервер сторонних приложений, который использует его для идентификации каждого устройства, зарегистрированного для приема сообщений для данного приложения для Android. Другими словами, идентификатор регистрации привязан к конкретному Android-приложению, запущенному на определенном устройстве.

0

Идентификатор отправителя - это номер проекта, который вы создали в консоли Google.

Регистрация ID

Когда ваши регистры приложений к GCM он получает регистрационный номер. Чтобы доставить сообщение, этот идентификатор регистрации будет использоваться GCM для идентификации вашего устройства + вашего приложения. Ваше приложение для Android должно отправить этот идентификатор регистрации на ваш сервер, чтобы при отправке вами сообщения сервером он мог пометить его идентификатором регистрации, и, следовательно, GCM может доставить его на нужное устройство &.

Диагностировать, был ли идентификатор регистрации успешно передан на сервер (Get/Post), если вы не получили никакого сообщения.

2

Учетная запись отправителя, которую вы пытаетесь использовать для отправки сообщения, не может быть аутентифицирована. Возможными причинами являются:

  1. Недопустимый заголовок авторизации или с недопустимым синтаксисом.
  2. Недопустимый номер проекта, отправленный как ключ.
  3. Ключ действительный, но с отключенным сервисом GCM.
  4. Запрос был инициирован с сервера, который не переименован в серверный ключ IP.

Убедитесь, что маркер, который вы отправляете внутри заголовка авторизации, является правильным ключом API, связанным с вашим проектом. Вы можете проверить подлинность ключа API, выполнив следующую команду:

api_key=YOUR_API_KEY 

curl --header "Authorization: key=$api_key" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send -d "{\"registration_ids\":[\"ABC\"]}" 

Если вы хотите, чтобы подтвердить правильность регистрации ID, вы можете сделать это, заменив «ABC» с регистрационным идентификатором. Случается, когда код состояния HTTP равен 401.

+0

У меня есть аналогичная проблема с новым backend. Странная часть - это завитки, но на странице с автогенерированной страницей с той же api_key появляется ошибка 401 при отправке сообщений GCM. Недоумение :-P – kenyee

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