Ошибка веб-push-уведомления с сообщением об отправке curl

Я хочу понять, что такое web-push и как я могу использовать его для своих проектов... Нашел этот пример https://mobiforge.com/design-development/web-push-notifications Но всегда возникает ошибка при попытке отправить уведомление через Firebase Cloud Messaging (FCM — это новая версия GCM)

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

Что значит "InvalidRegistration"? Что я делаю неправильно?

Мой php curl, но я уверен, что здесь нет проблем

$link = "https://gcm-http.googleapis.com/gcm/send";

$header = array();
// $header[] = "Content-length: 0";
$header[] = "Content-type: application/json";
$header[] = "Authorization: key=AIzaSy...";

$contentArray = array(
    "collapse_key" => "All",
    "registration_ids" => array(
        "gAAAAABX06BLKhA4n1yHNlsyzu02wxsDjZf89oxIljwM4ZdLpMZU7ty64TFEYahPQZaTmCeYlJo-WDWnfFHOKXzKURhNtRWmN0OgBgn9hJdmgatSGoiTkt69TeJpiD8F034WOr5HMEG2",
    ),
    "data" => array(
        "title" => "This is a Title",
        "message" => "This is a GCM Topic Message!"
    )
);
$jsonData = json_encode($contentArray);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $link);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
$string = curl_exec($ch);
echo $string;

$data['curl'] = curl_errno($ch);

if(!curl_errno($ch) && !strpos($string, "503"))
    $data = array_merge($data, explode("\n", $string));

curl_close($ch);

?><pre><? print_r($data); ?></pre><?

некоторые из Cosole.log

ServiceWorker registration successful with scope: https://.../app/
PushSubscription { endpoint="https://updates.push.ser...rjYvTTapou7WcEDgu3V7IOY",  options=PushSubscriptionOptions,  getKey=getKey(),  ...}
PushSubscription { endpoint="https://updates.push.ser...rjYvTTapou7WcEDgu3V7IOY",  options=PushSubscriptionOptions,  getKey=getKey(),  ...}
gAAAAABX06OYvBIk4q2rRF3AsE6UwRYUpzpZ0jpuiWz6TRrSptb8_cBKjy8Ci-_u5UtAyiGfAYJ_ycYnJjoukSuez7BN6UnSX-GL_EWNAWzEpAVMhCT2wrjYvTTapou7WcEDgu3V7IOY

person Павел Зорин    schedule 10.09.2016    source источник
comment
Вы используете FCM, но со старым протоколом GCM я не уверен, что он поддерживается. Я предлагаю вам использовать github.com/web-push-libs/web -push-php, поэтому вам не нужно реализовывать его самостоятельно.   -  person Marco Castelluccio    schedule 10.09.2016
comment
Может быть, это потому, что у меня нет сертификата для https?   -  person Павел Зорин    schedule 11.09.2016


Ответы (4)


Попробуйте проверить идентификатор подписки, который вы использовали.

Как указано в Проверьте ответ,

Если ответ показывает недопустимую ошибку регистрации, проверьте идентификатор подписки, который вы использовали.

Как обсуждалось далее при отправке запроса в GCM, обязательно используйте свой собственный ключ API и идентификатор подписки при запуске команды cURL.

Для получения дополнительной информации ознакомьтесь с документацией о том, как отправить запрос из командной строки для GCM, чтобы отправить сообщение.

person Teyam    schedule 11.09.2016

Это не работает. Я пытался много раз. здесь ниже, как я пытался в POSTMan

введите здесь описание изображения

person Tun    schedule 11.09.2016
comment
В вашем случае должно быть неправильно API KEY Попробуйте авторизацию: key=JGJHGj... - person Павел Зорин; 11.09.2016

По моему опыту, Registration_id, который вы используете, похоже, получен из подписки в браузере Firefox. Но все же вы пытаетесь отправить его на push-сервер Chrome.

Registration_id в Chrome должен выглядеть следующим образом:

APA91bGdUldXgd4Eu9MD0qNmGd0K6fu0UvhhNGL9FipYzisrRWbc-qsXpKbxocgSXm7lQuaEOwsJcEWWadNYTyqN8OTMrvNA94shns_BfgFH14wmYw67KZGHsAg74sm1_H7MF2qoyRCwr6AsbTf5n7Cgp7ZqsBZwl8IXGovAuknubr5gaJWBnDc

Это довольно новая технология, и коды более ранних версий все еще доступны на платформе разработчика Google, поэтому не очень легко понять, что делать. Я все еще экспериментирую с ним.

Проверьте эту лабораторию кода. Это хороший пример для понимания основы.

person LordCBK    schedule 22.10.2016
comment
chrome генерирует конечную точку, подобную этой, в реестре. android.googleapis.com/gcm/send/…Y85cTw2mYI_yCKyokk9qtoROXapvtr8oiXJnpOs44udr1i4yYK6zImm0n9TDy1PvKbMAiZM9Uz - person Pushker Yadav; 04.11.2016

Я также хотел бы поделиться своим ответом в этом посте.

Проверьте https://stackoverflow.com/a/40447040/4677062 для той же проблемы с недопустимым идентификатором регистрации.

Это разрешено. Работает как положено.

person bvakiti    schedule 06.11.2016