我正在使用网络推送,并已按照this codelab了解如何注册用户。
对于后端,我将使用此库发送推送消息: https://github.com/web-push-libs/web-push-csharp
我注意到Chrome中的某些用户在注册时有两种可能的来源之一:
fcm.googleapis.com/fcm/send
或android.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
}
}
答案 0 :(得分:0)
让我们将这个问题分解为2:
在较新版本的Chrome(和三星互联网浏览器)中,您可以传入applicationServerKey
,这将返回fcm.googleapis.com
推送订阅。
如果您没有提供applicationServerKey
或者您在不支持applicationServerKey
的浏览器中提供,但支持 Web应用程序清单中的专有gcm_sender_id
参数,然后您将获得android.googleapis.com
端点。
我的预感是,您将最初链接到的代码库和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
可行密钥生成器(包括公共服务器应用程序密钥和私钥): Workable keys generator
可行的Google教程: Workable google tutorial
<强>结论强>
applicationServerKey
并导致错误Workable keys generator
但仍有错误Google tutorial
更新服务工作者以防止出现错误