web push UnauthorizedRegistration错误400

时间:2017-05-18 08:28:43

标签: javascript c# git web push-notification

我正在使用网络推送,并已按照this codelab了解如何注册用户。

对于后端,我将使用此库发送推送消息: https://github.com/web-push-libs/web-push-csharp

我注意到Chrome中的某些用户在注册时有两种可能的来源之一:

fcm.googleapis.com/fcm/sendandroid.googleapis.com/gcm/send

我已将所有参数添加到后端库,并且我尝试向所有用户批量发送通知。

当我发送消息时,我对所有消息使用vapidDetails,我看到只有ID为fcm.googleapis.com推送消息的用户才能正确发送。对于android.googleapis.com的所有用户,我收到了错误UnauthorizedRegistration。所以我尝试使用gcmAPIKey

我从Firebase获得了密钥,我看到它是2密钥所以我尝试了它们,我还读到在用户注册的网站中我需要将文件名manifest.json与gcm_sender_id放在一起所以我做到了......

我使用的所有代码,如果来自顶部的两个库。

我举例说明我发送的内容以及我从fcm工作和gcm无效的响应。 我也尝试阅读这个问题,但没有解决我的问题

{
  Method: POST,
  RequestUri: 'https://android.googleapis.com/gcm/send/f9PkPIROxKo:APA91bESvQBjMpHDmi_InXNHScEFt_-xWy4zEYhUfQvS6W78YBVZLrDGoYnKkw21bYjbTU0Q6zk_VXt8qdEiQtNEe0W2znE2Ho4_gYh5yLhqPZt8CHFrhhmUWdZaWpIlFDwvS8FhOALA', Version: 1.1, Content: System.Net.Http.ByteArrayContent,
  Headers: {
    TTL: 2419200
    Encryption: salt=mfZ6vUxS7u3Xo5jDPau_NA
    Authorization: key=AAAAZYYARKI:APA91bEIdVZ3LiZUsL0CgWmQTkz6hK_U8OPMTjuMt_6Ux2PmNNGGZEluzllixLIQHEDjUYygENPN8MCmnTmhxnPD29WfyHJrDVZjEUzbl7u--1NQVI49pYtag9kijSBsDw-mE4b6lOvD
    Crypto-Key: dh=BIBz0FvQPs6BdNCwFut_vHwU-Tk-pyuCBxnxqOSufo4EHEaps0DZ5lZjSTG46RcI53D-Dkj6uMHqyw9X5r2u_Hk
    Content-Type: application/json
    Content-Length: 74
    Content-Encoding: aesgcm
  }
}

{
  StatusCode: 400,
  ReasonPhrase: 'UnauthorizedRegistration', 
  Version: 1.1, 
  Content: System.Net.Http.StreamContent, 
  Headers: {
      X-Content-Type-Options: nosniff
      X-Frame-Options: SAMEORIGIN
      X-XSS-Protection: 1; mode=block
      Alt-Svc: quic=":443"; ma=2592000; v="37,36,35"
      Vary: Accept-Encoding
      Transfer-Encoding: chunked
      Accept-Ranges: none
      Cache-Control: max-age=0, private
      Date: Thu, 18 May 2017 07:28:48 GMT
      Server: GSE
      Content-Type: text/html; charset=UTF-8
      Expires: Thu, 18 May 2017 07:28:48 GMT
  }
}

以及工作的fcm:

{
  Method: POST,
  RequestUri: 'https://fcm.googleapis.com/fcm/send/e1N5dtHsikc:APA91bEHZztef21cjooCnaPu_lAmcYjA2twELeecS7wIuJibbpptAlUdYaVHNkVukph5qy9mnVml3qenqti1Yz7wUqL6A-UY3h-Ifkv1dnxSsngPIvmG8VXMmjy66aSvJ1DtI1p3W3Sm', Version: 1.1, Content: System.Net.Http.ByteArrayContent,
  Headers: {
      TTL: 2419200
      Encryption: salt=W1Y-iRlHUu1spMta3etHGw
      Authorization: WebPush eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJhdWQiOiJodHRwczovL2ZjbS5nb29nbGVhcGlzLmNvbSIsImV4cCI6MTQ5NTEzNTQ2OCwic3ViIjoibWFpbHRvOm9maXJAZmllbGRzb2ZsZWFkcy5jb20ifQ.zZ5cqwhbGNHDhO_swjwdxjqnCczFrOFoAJSvjMP2Xeylt5C6MfGwNz92vZWMPkiJwhHrJZt9nmsbrh_6ghxaLw
      Crypto-Key: dh=BLeaQC8dvMuxASHFsp4_8kcExsa6yZcT1V2x7MZJnUGgSxq3JXYa6JN7Rm6xtPpwA0Q5tftSdy6dR7P1ZMztPMs;p256ecdsa=BDd3_hVL9fZi9Ybo2UUzA284WG5FZR30_95YeZJsiApwXKpNcF1rRPF3foIiBHXRdJI2Qhumhf6_LFTeZaNndIo
      Content-Type: application/json
      Content-Length: 74
      Content-Encoding: aesgcm
  }
}

{
  StatusCode: 201,
  ReasonPhrase: 'Created',
  Version: 1.1,
  Content: System.Net.Http.StreamContent,
  Headers: {
      X-Content-Type-Options: nosniff
      X-Frame-Options: SAMEORIGIN
      X-XSS-Protection: 1; mode=block
      Alt-Svc: quic=":443"; ma=2592000; v="37,36,35"
      Cache-Control: max-age=0, private
      Date: Thu, 18 May 2017 07:25:38 GMT
      Location: https://fcm.googleapis.com/fcm/0:1495092338974351%0f493ae6f9fd7ecd
      Server: GSE
      Content-Length: 0
      Content-Type: text/plain
      Expires: Thu, 18 May 2017 07:25:38 GMT
  }
}

2 个答案:

答案 0 :(得分:0)

让我们将这个问题分解为2:

1。为什么有两个不同的起源?

在较新版本的Chrome(和三星互联网浏览器)中,您可以传入applicationServerKey,这将返回fcm.googleapis.com推送订阅。

如果您没有提供applicationServerKey或者您在不支持applicationServerKey的浏览器中提供,但支持 Web应用程序清单中的专有gcm_sender_id参数,然后您将获得android.googleapis.com端点。

2。为什么你不能让它发挥作用?

我的预感是,您将最初链接到的代码库和my simple push demo混合在一起。

由于您说您已经之后>已经进行了Firebase项目,因此我已经99%确定您使用了其他人{{1}意味着只有该项目的所有者才能向该用户发送消息。如果您从数据库中删除这些用户,请使用您自己的android.googleapis.com再次注册,如果应该有效。

有关gcm_sender_id的信息以及如何使其与Firebase一起使用的详细信息:https://web-push-book.gauntface.com/chapter-06/01-non-standards-browsers/

答案 1 :(得分:0)

  • 您将遇到此错误的一种情况如下所述:

    One will produce the wrong process

    Google教程还提到了以下内容:

    open DevTools (Right Click > Inspect) and go to the Application panel, click the Service Workers tab and check the Update on Reload checkbox. When this checkbox is enabled the service worker is forcibly updated every time the page reloads.

  • 如果您想在网站中推送带有效负载的通知:

    在您applicationServerKey

  • 时加入subscribe
  • 如果您在applicationServerKey

    时加入subscribe
    1. openssl生成的密钥对我不起作用。
    2. vapid生成的密钥对我不起作用。
    3. Google教程中提到的网站生成的密钥可用。
  • 可行密钥生成器(包括公共服务器应用程序密钥和私钥): Workable keys generator

  • 可行的Google教程: Workable google tutorial

<强>结论

  1. 我添加applicationServerKey并导致错误
  2. 我使用Workable keys generator但仍有错误
  3. 我按照Google tutorial更新服务工作者以防止出现错误
  4. 工作原理