it-swarm.com.ru

Ошибка авторизации GCM http 401

Когда мой внутренний сервер отправляет почтовые запросы на серверы GCM, я получаю ошибку авторизации HTTP 401.

Я следовал за шагами, описанными здесь:

http://developer.Android.com/google/gcm/http.html#auth_error

>> api_key=AIzaSyDEy3...

>> curl --header "Authorization: key=$api_key" --header Content-Type:"application/json" https://Android.googleapis.com/gcm/send  -d "{\"registration_id\":\"ABC\"}"

Я получаю это:

<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>

В поиске неисправностей говорится:

Authentication Error
The sender account that you're trying to use to send a message couldn't be authenticated. Possible causes are:
    1. Authorization header missing or with invalid syntax.
    2. Invalid project number sent as key.
    3. Key valid but with GCM service disabled.
    4. Request originated from a server not whitelisted in the Server Key IPs.

У меня есть вопросы по этому поводу:

  1. Правильный ли заголовок в запросе curl?
  2. Они означают «api_key» (AIzaSy…) или номер проекта, например 8305134….?
  3. Как я могу внести в белый список мой IP-адрес ключа сервера?
  4. Если я запускаю команду curl, должен ли я занести в белый список IP-адрес моего компьютера?
36
Pawel

Они означают «api_key» (AIzaSy…) или номер проекта, например 8305134….?

Это означает ключ сервера, который должен быть добавлен в ваш скрипт curl. Номер проекта не должен использоваться для отправки сообщения на стороне сервера.

Чтобы создать новый ключ сервера, выполните следующие действия:

  • Перейти к https://cloud.google.com/console/project
  • Нажмите ваш проект
  • Перейдите к API & auth на левой панели
  • Выберите учетные данные в подменю на левой панели
  • В Public API access нажмите «Создать новый ключ».
  • Выберите «Сервер»
  • В следующем диалоговом окне укажите IP-адреса из белого списка, если они есть. Если оставить это поле пустым, запросы будут поступать с любого IP
  • Нажмите Создать.
  • Вы найдете, что новый ключ сервера создан в "Public API Access"

Этот ключ должен использоваться для отправки сообщения в вашем скрипте на стороне сервера.

Как я могу внести в белый список мой IP-адрес ключа сервера?

Вы можете создать белый список при создании ключа сервера.

Если я запускаю команду curl, должен ли я занести в белый список IP-адрес моего компьютера?

Для целей тестирования вам не нужно указывать IP. Для коммерческих целей вы можете захотеть.

Warning установка IP на 0.0.0.0/0, как указано в руководстве Getting Started, разрешит все адреса IPv4, но не IPv6.

28
Vijay C

Обновление:

Google изменил консоль, теперь вы должны:

  • Перейдите на https://console.developers.google.com
  • Выберите ваш проект (выпадающий сверху)
  • Выберите Overview в меню на левой панели
  • Выберите Google Cloud Messaging в разделе Mobile API title
  • Нажмите кнопку Включить
  • Затем вы должны создать учетные данные

УСТАРЕЛО

У меня была такая же проблема ... потом я понял, что мне нужно добавить Google Cloud Messaging для Android.

  • Перейти к https://cloud.google.com/console/project
  • Нажмите ваш проект
  • Перейдите к API & auth на левой панели
  • Выберите APIs в подменю на левой панели
  • Найдите Google Cloud Messaging для Android (или/и Chrome) и включите его

Надеюсь, это поможет вам!

19
Maximiliano De Lorenzo

Я решил эту ошибку, используя ключ сервера вместо ключа API. Вы можете получить ключ сервера из консоли Firebase, нажав на шестерню и выбрав «Параметры проекта», после чего перейдите на вкладку «Облачные сообщения» и получите ключ сервера, и обычный ключ сервера, и ключ старого сервера будут работать.

Это работает как для Firebase, так и для GCM, поэтому нам не нужно объявлять два ключа отдельно.

15
Tyson

Наконец нашел мою проблему 

Я сделал HTTP-заголовок авторизации следующим образом Authorization:[Api key]

Решение

Мне не хватало «ключ =» + [Ваш ключ API] в заголовке авторизации, 

поэтому полный заголовок HTTP будет 

Authorization:key=Apikey

11
sree

У меня такая же проблема. Я использовал Android Key, как указано в инструкциях по адресу http://developer.Android.com/google/gcm/gs.html Но на самом деле мне пришлось использовать Ключ сервера, чтобы пройти аутентификацию из моего окна Fiddler и примера PushSharp.

9
Vijay Vepakomma

Если вы недавно пытались создать новый проект в GCM и добавить ключ сервера, авторизация в любом случае не пройдет, так как Google прекратил авторизацию вновь созданных ключей сервера для продвижения Firebase Cloud Messaging. В настоящее время единственная возможность создать новый ключ - это сначала перенести существующий проект в Firebase здесь .

2
Pelister
  1. Я не знаю синтаксис команды curl, но кажется странным, что один заголовок вы указываете как --header "key: value", а другой - --header key:"value". Возможно, один из них неверен. Кроме того, вы должны изменить registration_id:ABC на "{\"registration_ids\":[\"ABC\"]}".

  2. Они имеют в виду ключ API.

  3. Если вы не определили список IP-адресов, занесенных в белый список, при создании ключа API, по умолчанию он должен быть в белом списке.

2
Eran

если ошибка 401: GCM должен быть импортирован в FCM для работы Затем идентификаторы сервера и отправителя можно найти по адресу https://console.firebase.google.com/project/my_projectID/settings/ CloudMessaging

2
Matoeil

У меня была такая же проблема. Что я сделал, это:

  1. Очистите белый список IP-адресов, который будет автоматически установлен на любой IP-адрес.
  2. Восстановите ключ сервера и используйте новый сгенерированный ключ.
2
ENSATE

Для использования Firestore вы должны использовать Web API keyfirebase, который дает вам консоль, которую вы можете найти по адресу https://console.firebase.google.com/project/<yourProjectName>/settings/general/<yourAppPckageName>.

но для использования Firebase для push-уведомлений клиентов вашего мобильного устройства вы должны использовать Server key, который вы найдете в консоли разработчика, которую вы можете найти по адресу https://console.developers.google.com/apis/credentials?project=<yourProjectName>

0
MajidJafari

Проблема связана с авторизацией, но я столкнулся с этой ошибкой, когда пытался сделать что-то по-старому, Я знаю, что это старый вопрос, но позвольте мне поставить 50 центов. Сначала в городе появился новый ребенок под названием «Firebase Cloud Messaging FCM». Позвольте мне процитировать Google: 

FCM - это новая версия GCM под брендом Firebase. Наследует Основная инфраструктура GCM с новыми SDK для создания облачных сообщений разработка проще.

Преимущества обновления до FCM SDK включают в себя:

Упрощенная разработка клиента. Вам больше не нужно писать свой собственный логика повторных попыток регистрации или подписки. Из коробки решение для уведомления. Вы можете использовать Firebase Notifications, a Решение для безсерверных уведомлений с веб-консолью, которая позволяет любому отправлять уведомления целевой аудитории на основе Firebase Аналитика идеи . Больше информации о FCMКонфигурация для студии Android

Я надеюсь, что это помогает тому, кто пытается делать вещи по-старому

0
abdimuna

Несанкционированная проблема произойдет, если в API-ключе имеется несоответствие Очистите серверный ключ и создайте новый заново. Используйте ключ API сервера при кодировании на стороне сервера. И правильно использовать идентификатор отправителя в клиенте Android

0
Jiju Induchoodan