Подтвердить что ты не робот

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

Когда мой сервер backend отправляет почтовые запросы на серверы 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.

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

  • Правильно ли указан заголовок в запросе завивки?
  • Они означают "api_key" (AIzaSy...) или номер проекта, например 8305134....?
  • Как изменить белый IP-адрес сервера?
  • Если я выполняю команду curl, мне нужно присваивать белый список IP-адресу моего компьютера?
4b9b3361

Ответ 1

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

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

  • Перейдите в https://cloud.google.com/console/project
  • Нажмите на свой проект
  • Перейдите в API и авторизуйтесь на левой панели
  • Выберите учетные данные в подменю на левой панели
  • В Открытом доступе API нажмите " Создать новый ключ"
  • Выберите "Сервер"
  • В следующем диалоговом окне Укажите белые IP-адреса, если они есть. Если оставить его пустым, запросы будут выполняться с любого IP
  • Нажмите Создать.
  • Вы найдете новый ключ сервера в разделе Открытый доступ к API "

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

Как изменить белый IP-адрес сервера?

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

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

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

Предупреждение IP-адрес 0.0.0.0/0, как указано в руководстве "Начало работы", позволит использовать все IPv4-адрес, но не IPv6.

Ответ 2

UPDATE:

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

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

РЕКОМЕНДУЕТСЯ

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

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

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

Ответ 3

Наконец, найден Моя проблема

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

Решение

Мне не хватало "key =" + [ваш ключ Api] в заголовке авторизации,

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

Authorization:key=Apikey

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

  • Они означают ключ API.

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

Ответ 8

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

Ответ 10

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

Ответ 11

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

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

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

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

Я надеюсь, что это поможет кому-то, кто пытается сделать что-то по-старому.

Ответ 12

Вышеприведенные действия выполняются, затем проверяйте операцию инициализации curl функцией
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 );
включен или нет, если он не включает в себя функцию

Ответ 13

У меня была такая же проблема. То, что я делал, вместо ключа API я отправлял сообщение, а вместо сообщения я отправлял ключ API. Просто проверьте, допустите ли вы ту же ошибку.