Ошибка авторизации 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. 

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

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

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

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

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

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

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

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

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

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

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

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

ОБНОВИТЬ:

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

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

DEPRECATED

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

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

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

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

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

Решение

Мне не хватало «key =» + [Your Api key] в заголовке Authorization,

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

Authorization:key=Apikey

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

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

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

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

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

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

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

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

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

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

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

FCM – это новая версия GCM под брендом Firebase. Он наследует основную инфраструктуру GCM, а новые SDK упрощают разработку Cloud Messaging.

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

Упрощение клиентских разработок. Вам больше не нужно писать собственную логику регистрации или подписки на повторную подписку. Готовое решение для уведомлений. Вы можете использовать Firebase Notifications – решение без серверных уведомлений с веб-консолью, которое позволяет отправлять уведомления для определенных аудиторий на основе информации Firebase Analytics. Дополнительная информация о конфигурации FCM Для студии android

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

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

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