Javascript web推送未授权注册错误400
我正在使用web推送,并已按照以下步骤学习如何注册用户 对于后端,我将使用此库发送推送消息: 我注意到Chrome中的一些用户在我注册时有两种可能的来源之一: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
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
- 如果您将
添加到whenapplicationServerKey
subscribe
- openssl生成的密钥对我不起作用
- 由vapid生成的键对我不起作用
- 谷歌教程作品中提到的网站生成的密钥。
- 可用密钥生成器(包括公用服务器应用程序密钥和私钥):
- 可行的谷歌教程:
applicationServerKey
并导致错误可用密钥生成器
,但仍然存在错误谷歌教程
更新服务人员以防止出现错误