Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
Javascript web推送未授权注册错误400_Javascript_C#_Git_Web_Push Notification - Fatal编程技术网

Javascript web推送未授权注册错误400

Javascript web推送未授权注册错误400,javascript,c#,git,web,push-notification,Javascript,C#,Git,Web,Push Notification,我正在使用web推送,并已按照以下步骤学习如何注册用户 对于后端,我将使用此库发送推送消息: 我注意到Chrome中的一些用户在我注册时有两种可能的来源之一: fcm.googleapis.com/fcm/send或android.googleapis.com/gcm/send 我已将所有参数添加到后端库中,并尝试向所有用户批量发送通知 当我发送消息时,我对所有消息使用vapidDetails,我发现只有ID以fcm.googleapis.com开头的用户才能正确发送推送消息。对于所有使用an

我正在使用web推送,并已按照以下步骤学习如何注册用户

对于后端,我将使用此库发送推送消息:

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

fcm.googleapis.com/fcm/send
android.googleapis.com/gcm/send

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

当我发送消息时,我对所有消息使用
vapidDetails
,我发现只有ID以
fcm.googleapis.com
开头的用户才能正确发送推送消息。对于所有使用
android.googleapis.com
的用户,我得到了错误
未经授权注册
。因此,我尝试使用
gcmAPIKey

我从Firebase获得了密钥,我看到是2个密钥,所以我尝试了它们,我还读到,在用户注册的网站上,我需要将文件名manifest.json与
gcm\u sender\u 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个部分:

1.为什么有两种不同的起源? 在较新版本的Chrome(和三星互联网浏览器)中,您可以传入
applicationServerKey
,这将返回
fcm.googleapis.com
推送订阅

如果您没有提供
applicationServerKey
,或者您所在的浏览器不支持
applicationServerKey
,但支持web应用程序清单中专有的
gcm\u发送者id
参数,那么您将获得
android.googleapis.com
端点

2.为什么你不能让它工作? 我的预感是,您已经将最初链接到的代码库和混合在一起了

既然你说你在订阅了android.googleapis.com之后做了一个Firebase项目,我99%肯定你使用了其他人的
gcm发送者id
,这意味着只有该项目的所有者才能向该用户发送消息。如果您从数据库中删除了这些用户,请使用您自己的
gcm\u发送者\u id
重新注册,如果可以的话

有关gcm\u发送者\u id的信息以及如何使其与Firebase协同工作的详细信息:

  • 您将遇到以下所述错误的情况之一:

    谷歌教程还提到以下内容:

    打开DevTools(右键单击>检查)并转到应用程序面板,单击服务人员选项卡并选中重新加载时更新复选框。启用此复选框后,每次重新加载页面时都会强制更新服务人员。

  • 如果要在网站中推送带负载的通知:

    当您订阅时,在中添加
    applicationServerKey

  • 如果您将
    applicationServerKey
    添加到when
    subscribe

  • openssl生成的密钥对我不起作用
  • 由vapid生成的键对我不起作用
  • 谷歌教程作品中提到的网站生成的密钥。
  • 可用密钥生成器(包括公用服务器应用程序密钥和私钥):

  • 可行的谷歌教程:

结论

  • 我添加了
    applicationServerKey
    并导致错误
  • 我使用了
    可用密钥生成器
    ,但仍然存在错误
  • 我按照
    谷歌教程
    更新服务人员以防止出现错误
  • 工作