Ошибка авторизации 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-адресу моего компьютера?
Ответы
Ответ 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 здесь.
Ответ 9
если ошибка 401: GCM необходимо импортировать в FCM для работы
Затем идентификаторы сервера и отправителя можно найти по адресу
https://console.firebase.google.com/project/my_projectID/settings/cloudmessaging
Ответ 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. Просто проверьте, допустите ли вы ту же ошибку.