Не отправляется Push уведомление

Пытаюсь отправить уведомление на Android, но получаю ошибку:

{"multicast_id":88286863010470080,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]}

В чем ошибка?

<?
$fcm_token = htmlspecialchars($_GET['fcm_token']);

echo sendGCM('Test Message', $fcm_token);

function sendGCM($message, $id) {
    $url = 'https://fcm.googleapis.com/fcm/send';
    $fields = array('registration_ids' => array($id), 'data' => array("message" => $message));
    $fields = json_encode($fields);
    $headers = array('Authorization: key='."----", 'Content-Type: application/json');

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);

    $result = curl_exec($ch);
    echo $result;
    curl_close($ch);
}

Ответы (1 шт):

Автор решения: teran

в документации описаны ответы сервера https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes

Invalid Registration Token
200 + error:InvalidRegistration
Check the format of the registration token you pass to the server. Make sure it matches the registration token the client app receives from registering with Firebase Notifications. Do not truncate or add additional characters.

если перевести то будет как-то так

Невалидный токен. Проверьте токен, который вы отправляете. Убедитесь, что он совпадает с полученным клиентом при регистрации. Не обрезайте токен и не добавляйте к нему никакие дополнительные символы.

тут главное соотнести выделенное жирным и использование htmlspecialchars в вашем коде.

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

→ Ссылка