Обратите внимание, что этот вопрос должен существенно отличаться от других вопросов с похожим именем из-за того, что 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. После создания проекта просто используйте автоматически сгенерированный ключ сервера. Ниже приведены шаги по поиску ключа сервера:
Для старых проектов GCM вы можете просто импортировать проект в консоль Firebase:
В последние несколько дней я наблюдал эту озабоченность. Казалось бы, неограниченные ключи возвращают 401 ошибок, и это может быть потому, что они обеспечивают безопасность для всех ключей API ( там, где вы видите предупреждение ).
Таким образом, я обычно рекомендую использовать ограничение IP-адреса (видя, что это для GCM, и это должен быть ключ сервера) и добавить IP-адрес вашего сервера. См. Мой ответ здесь .