Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带有curl发送消息的Web推送通知错误_Php_Curl_Google Cloud Messaging_Web Push - Fatal编程技术网

Php 带有curl发送消息的Web推送通知错误

Php 带有curl发送消息的Web推送通知错误,php,curl,google-cloud-messaging,web-push,Php,Curl,Google Cloud Messaging,Web Push,我想了解什么是网络推送,以及如何在我的项目中使用。。。 我发现了这个例子 但在尝试通过Firebase云消息发送通知时总是会出错(FCM是GCM的新版本) “无效登记”是什么意思?我做错了什么 我的php卷曲,但我确信这里没有问题 $link = "https://gcm-http.googleapis.com/gcm/send"; $header = array(); // $header[] = "Content-length: 0"; $header[] = "Content-type:

我想了解什么是网络推送,以及如何在我的项目中使用。。。 我发现了这个例子 但在尝试通过Firebase云消息发送通知时总是会出错(FCM是GCM的新版本)

“无效登记”是什么意思?我做错了什么

我的php卷曲,但我确信这里没有问题

$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><?

请尝试检查您使用的订阅ID

如中所述

如果响应显示无效注册错误,请检查您使用的订阅ID

正如在向GCM发出请求时进一步讨论的,确保在运行cURL命令时使用您自己的API密钥和订阅ID


有关详细信息,请查看有关如何操作的文档。

它不起作用。我已经试了很多次了。下面是我在《邮递员》中的尝试


根据我的经验,您使用的注册id似乎来自Firefox浏览器上的订阅。但你却试图将它发送到Chrome推送服务器

Chrome注册id应如下所示:

APA91BGDULDXGD4EU9MD0QNMGD0K6FU0UVHHHHNGL9FIPYZISRRWBC-QSXPKBXOCGSXM7LLQUAEOWWSJCEWWADNYQNYQNYQNYKZGHSAG74SM1/H7MF2QOYRCWR6ASBTF5N7CGP7ZQSBZW8OTMRVNA94SHN\u BfgFH14wmYw67KZGHsAg74sm1

这是一项非常新的技术,早期版本的代码仍然可以在google开发者平台上使用,所以要理解该做什么并不容易。我还在用它做实验


这是一个了解基本知识的好例子。

我也想在这篇文章中分享我的答案

检查是否存在相同的无效注册id问题


问题解决了。正常工作。

您使用的是FCM,但对于旧的GCM协议,我不确定是否支持。我建议您使用,这样您就不需要自己实现它。可能是因为我没有https证书?在您的情况下,它应该是错误的API密钥尝试授权:KEY=JGJHGj…chrome正在寄存器上生成这样的端点…Y85CTW2MYYCKYOKKK9QTOROXAPVTR8OIXJNPOS44UDR1I4YYK6ZIM0N9TDY1PVKBMAIZM9UZ
$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><?
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