我正在使用 pywebpush 1.4.0 库从 Django 后端推送 Web 通知。我使用的密钥是从https://web-push-codelab.glitch.me/获得的。订阅似乎工作正常。此外,我在 Firefox 上对此进行了测试,并且在那里运行良好。
我在推送 Chrome 时收到以下错误服务器端:
Push failed: <Response [400]>: <HTML>
<HEAD>
<TITLE>UnauthorizedRegistration</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>UnauthorizedRegistration</H1>
<H2>Error 400</H2>
</BODY>
</HTML>
奇怪的是,我的后端控制着 3 个域,即使 Chrome 在一个域上运行,推送也可以正常工作,而在其他域上则无法正常工作。我排除了以下可能的问题:
- 不正确的私钥和公钥对,因为它在 Firefox 上运行良好
- 过时的 pywebpush 库在 Chrome 上的一个域上运行良好
- 很少有答案(Chrome Web Notification Push Unauthorized Registration 异常)指出要更新 pywebpush 安装的 py-vapid 版本,但它的版本已经是 py-vapid==1.3.0
我看到的唯一可能性是 Chrome 是否不允许来自同一后端的不同域的推送通知。有没有人知道这样的限制或可以在这里帮助我提供任何其他指示?
注意:我对所有三个域使用不同的密钥。
这是我用来推送的代码:
from pywebpush import webpush
webpush(subscription_info,
data,
vapid_private_key=vapid_private_key,
vapid_claims={"sub": "mailto:xyz@example.com"})
subscription_info 是订阅用户时收到的 json,vapid_private_key 是对应的私钥。