Intereting Posts
C # – запрос POST Json, отправленный, но не полученный сервером PHP Категории и подкатегории Создание таблицы со значениями подзапроса в PHP Как отображать HTML в браузере постепенно в течение длительного периода времени? Как добавить 24 часа в временную метку unix в php? Лучший способ избежать дублирования ввода в базу данных mysql Является ли временная метка в микросекундах всегда уникальной? Как отсортировать массив по подобию по отношению к введенному слову. Показать запрос в строке таблицы (th) Как загрузить страницу PHP в div с помощью jQuery и AJAX? Динамически отображать CSV-файл в виде таблицы HTML на веб-странице Будет ли PHP умирать в мире разработки веб-страниц? PHP image_jpeg не работает, если файл UTF-8 работает, если это ANSI php проверяет несколько дат в массиве в пределах диапазона дат Произвольное перемещение случайных чисел без повторения в Javascript / PHP

Ошибка несанкционированной ошибки 401 GCM

Обратите внимание, что этот вопрос должен существенно отличаться от других вопросов с похожим именем из-за того, что API, похоже, значительно изменился за последние несколько лет.

Я пытаюсь отправить push-уведомление на устройство iOS с использованием GCM.

Я (я думаю), в основном, настроил его правильно. У меня есть ключ API от GCM, я установил свой SSL-сертификат на Apple Developer, и у меня есть мое устройство, правильно получающее идентификатор регистрации.

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

define('API_ACCESS_KEY', '<API KEY HERE>'); $fields = array( 'to' => '<REG_ID HERE>', 'registration_ids' => '<REG_ID HERE>', 'notification' => array('body' => 'test', 'title' => 'Test'), ); $headers = array( 'Authorization: key=' . API_ACCESS_KEY, 'Content-Type: application/json' ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://gcm-http.googleapis.com/gcm/send'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); $result = curl_exec($ch); curl_close($ch); 

В настоящее время я использую неограниченный ключ для тестирования:

 This key is unrestricted. To prevent unauthorized use and quota theft, restrict your key. Key restriction lets you specify which web sites, IP addresses, or apps can use this key. 

Насколько я знаю, в этом должен быть белый список, не так ли? Есть несколько ответов от нескольких лет назад на SO о том, как вы должны белить сервер, но это похоже на старый интерфейс / настройку API.

Что может быть причиной этой проблемы?

Обновление . В документах GCM есть заметная заметка:

Начиная с сентября 2016 года новый серверный ключ может быть создан только в Firebase Console, используя вкладку « Облачные сообщения » на панели «Настройки». Существующие проекты, которые необходимо создать новый ключ сервера, можно импортировать в консоль Firebase, не затрагивая их существующую конфигурацию.


Обновление : также показалось бы, что переход с GCM на FCM устраняет проблему для 401 Unauthorized Error.

Если вы только начинаете использовать GCM , вместо создания проекта в Консоли Google Developers Console, сделайте это в Firebase Console. После создания проекта просто используйте автоматически сгенерированный ключ сервера. Ниже приведены шаги по поиску ключа сервера:

  1. Перейдите в свою Firebase Console и нажмите CREATE NEW PROJECT .
  2. Введите желаемое название проекта и выберите свою страну. После этого новый проект должен быть активным.
  3. Затем на левой панели нажмите кнопку переключения передач и выберите « Настройки проекта» .
  4. Затем перейдите на вкладку Cloud-Messaging .

Для старых проектов GCM вы можете просто импортировать проект в консоль Firebase:

  1. Перейдите в свою Firebase Console и нажмите « IMPORT PROJECT» .
  2. Выберите проект, который вы хотите импортировать, и страну.
  3. Нажмите ADD FIREBASE . После этого новый проект должен быть активным.
  4. Затем на левой панели нажмите кнопку переключения передач и выберите « Настройки проекта» .
  5. Затем перейдите на вкладку Cloud-Messaging .

В последние несколько дней я наблюдал эту озабоченность. Казалось бы, неограниченные ключи возвращают 401 ошибок, и это может быть потому, что они обеспечивают безопасность для всех ключей API ( там, где вы видите предупреждение ).

Таким образом, я обычно рекомендую использовать ограничение IP-адреса (видя, что это для GCM, и это должен быть ключ сервера) и добавить IP-адрес вашего сервера. См. Мой ответ здесь .