【问题标题】:Web push notification error with curl send message带有 curl 发送消息的 Web 推送通知错误
【发布时间】:2017-01-18 07:22:46
【问题描述】:

我想了解什么是网络推送以及如何将其用于我的项目... 找到了这个例子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"}]}

“无效注册”是什么意思?我做错了什么?

我的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

【问题讨论】:

  • 您使用的是 FCM,但使用旧的 GCM 协议,我不确定是否支持。我建议你使用github.com/web-push-libs/web-push-php,这样你就不需要自己实现了。
  • 可能是因为我没有 https 的证书?

标签: php curl google-cloud-messaging web-push


【解决方案1】:

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

Check the response中所述,

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

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

有关更多信息,请查看有关如何send a request from the command line for GCM to push a message 的文档。

【讨论】:

    【解决方案2】:

    它不工作。我已经尝试了很多次。下面是我在 POSTMan 中尝试的方法

    【讨论】:

    • 你的情况应该是错误的 API KEY Try Authorization: key=JGJHGj...
    【解决方案3】:

    根据我的经验,您使用的registration_id 似乎来自Firefox 浏览器上的订阅。但是您正在尝试将其发送到 Chrome 推送服务器。

    Chrome 注册 ID 应该如下所示:

    APA91bGdUldXgd4Eu9MD0qNmGd0K6fu0UvhhNGL9FipYzisrRWbc-qsXpKbxocgSXm7lQuaEOwsJcEWWadNYTyqN8OTMrvNA94shns_BfgFH14wmYw67KZGHsAg74sm1_H7MF2qoyRCwr6AsbTf5n7Cgp7ZqsBZwl8IXGovAuknubr5gaJWBnDc P>

    这是一项相当新的技术,早期版本的代码仍然可以在 google 开发者平台上找到,所以很难理解要做什么。我还在尝试。

    查看codelab 这是了解基础知识的好例子。

    【讨论】:

    【解决方案4】:

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

    检查 https://stackoverflow.com/a/40447040/4677062 是否存在相同的无效注册 ID 问题。

    解决了。按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-01
      • 2019-11-14
      • 2014-07-23
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      相关资源
      最近更新 更多