Стоит задача: отправлять пользователям сайта Web PUSH уведомления, когда наступает определенное событие. Делать это необходимо максимально быстро (задержка не должна составлять более 1 минуты).
Поэтому решил не использовать всяческие сервисы, которые предоставляют такую возможность, а использовать базовое решение через Firebase Cloud Messaging, инструкция по которому подробно описана здесь
Хабр
Суть в чём...Опуская js, проблема сейчас в доставке данных "пушей". Токен пользователя получен и записан в БД. Т.е. разрешение на получение сообщений получено, токен известен.
Каждую минуту запускается cron и выполняет php-скрипт, который при необходимости отправляет сообщение через curl на fcm.googleapis.com/fcm/send (а оттуда уже посылается запрос браузеру, что необходимо вывести push-уведомление).
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $control->_connect_ini['google_url']);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
Всё как по инструкции. Однако, если запускать этот скрипт вручную из консоли - всё отправляется отлично в 100% случаев. Если же этот скрипт запускается по крону, то сообщение в 90% случаев не выводится, хотя весь код отрабатывает без ошибок и ответом от гугла приходит массив с данными об успешной отправке:
{
"canonical_ids": 0,
"failure": 0,
"multicast_id": 5652500584254823832,
"results": [
{
"message_id": "0:1527001372290285%2fd9afcdf9fd7ecd"
}
],
"success": 1
}
Не могу понять где собака зарыта.