使用Angular2 Web应用程序(带有清单和NGSW服务工作者的PWA)我无法使Firebase消息传递正常工作。在请求令牌(firebase.messaging()。getToken())时,我得到:
消息传递/令牌订阅失败请求缺失 身份验证凭证
如果我使用@ angular / service-worker SwPush,我可以使用swPush.requestSubscription()获取PushSubscription。如果我在Firebase云功能中使用Node.js的Web Push库,我可以使用从swPush.requestSubscription()返回的订阅成功发送推送消息。
顺便说一句,在swPush.requestSubscription()中,我使用生成的公共VAPID,我也在Firebase控制台中注册Firebase以供使用。
所以无法正常工作 - Firebase消息传递,正常工作 - 使用网络推送进行swPush
Questing-1:使用Firebase消息传递是否有任何优势(因为我可以使用工作设置)?我想也许可以向主题发送推送通知(我还没有使用工作设置测试它)。
问题2:如果有优势,如何在尝试获取令牌时解决此错误,可能是什么原因?
失败的请求发送:
authorized_entity: xxxxxxx
endpoint: https://fcm.googleapis.com/fcm/send/yyyyyyyy
encryption_key: zzzzzzzzzz
encryption_auth: qqqqqqqqqq
获得401
但是enpoint,key和auth正是我从工作的swPush.requestSubscription()得到的,所以Firebase设法发送正确的(我猜)订阅细节。然后在后端发生了什么?不知道authorized_entity是什么或做了什么,在文档中找不到任何对它的引用。也许某种程度上存在不匹配。
代码(主要是Firebase文档中的示例代码):
pushSubscribeFB() {
navigator.serviceWorker.getRegistration().then(swreg => {
console.log('swreg with getregistration: ', swreg)
if(swreg){
firebase.messaging().useServiceWorker(swreg)
firebase.messaging().requestPermission().then(function() {
console.log('Notification permission granted.');
firebase.messaging().getToken().then(function(currentToken) {
if (currentToken) {
console.log('token: ', currentToken)
// sendTokenToServer(currentToken);
// updateUIForPushEnabled(currentToken);
} else {
// Show permission request.
console.log('No Instance ID token available. Request permission to generate one.');
// Show permission UI.
// updateUIForPushPermissionRequired();
// setTokenSentToServer(false);
}
}).catch(function(err) {
console.log('An error occurred while retrieving token. ', err);
// showToken('Error retrieving Instance ID token. ', err);
// setTokenSentToServer(false);
});
}).catch(function(err) {
console.log('Unable to get permission to notify.', err);
});
}
}).catch(err => console.log('could not get SW: ', err))
}