如何使用FCM的服务人员推送通知
我想使用服务人员与Firebase在Chrome上实现推送通知。我在我的web应用程序中有一个清单文件和一个sw.js文件。我已经在Firebase中创建了一个项目,并且已经测试了注册和发送通知。这一切都工作正常,但收到通知时数据为空。我不明白为什么,也没有任何有用的资源(据我所知!)。 这里是我的服务人员档案:如何使用FCM的服务人员推送通知
self.addEventListener('push', function(event) {
console.log('Push message', event);
var title = 'Push message';
event.waitUntil(
self.registration.showNotification(title, {
body: 'The Message',
icon: 'images/logo.svg',
tag: 'my-tag'
}));
});
这是我main.js文件:
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js').then(function(registration) {
// Registration was successful
console.log('ServiceWorker registration successful with scope: ', registration.scope);
registration.pushManager.subscribe({
userVisibleOnly: true
}).then(function(sub) {
console.log('endpoint:', sub.endpoint);
}).catch(function(e) {
});
}).catch(function(err) {
// registration failed :(
console.log('ServiceWorker registration failed: ', err);
});
}
manifest.json的:
{
"name": "APPNAME",
"gcm_sender_id": "SENDERID"
}
卷曲请求:
curl --header "Authorization: key=APIKEY" -application/json" https://fcm.googleapis.com/fcm/send -d "{\"registration_ids\":[\"REGISTRATIONID\"],\"notification\":{\"title\":\"test\",\"body\":\"testing\"},\"data\":{\"title\":\"erse\"}}"
我没有收到我在请求中发送的任何数据。这是用firebase做的其他方式吗? 在此先感谢。
根据this,您可以发送chrome版本为50以上的chrome通知版本的数据。
在Chrome 50之前,推送消息不能包含任何有效负载数据。当你的服务人员发起“推送”事件时,你所知道的只是服务器试图告诉你一些事情,而不是它可能是什么。然后,您必须向服务器发出后续请求,并获取要显示的通知的详细信息,这可能会在网络条件较差的情况下失败。
现在在Chrome 50中(以及在桌面上的Firefox的当前版本中),您可以随推送一起发送一些任意数据,以便客户端可以避免发出额外的请求。但是,拥有巨大的权力会带来很大的责任,所有的有效载荷数据都必须加密。
对于您目前的实现,你可以做这样的事情:
self.addEventListener('push', function(event) {
var apiPath = '<apiPath>';
event.waitUntil(registration.pushManager.getSubscription().then(function (subscription){
return fetch(apiPath).then(function(response){
if(response.status !== 200){
throw new Error();
}
return response.json().then(function(data){
var title = data.title;
var message = data.body;
var icon = data.icon;
var tag = data.tag;
var url = data.url;
return self.registration.showNotification(title,{
body: message,
icon: icon,
tag: tag,
data: url
});
})
}).catch(function(err){
})
}));
return;
});
对于可以与特定用户的任何具体的通知,您可以通过工人的注册ID的参数在API网址并获取该特定ID的通知。 希望这有助于!
根据this tutorial您目前不能将任何数据发送到GCM:
一个缺点,以目前执行的Chrome推送API的是,你不能用推送消息发送任何数据。没有,没有。原因是在将来的实现中,有效载荷数据在发送到推送消息端点之前必须在服务器上进行加密。这样,端点(无论它是否为推送提供者)将无法轻松查看推送消息的内容。这还可以防止其他漏洞,如HTTPS证书验证不良和服务器与推送提供商之间的中间人攻击。但是,此加密功能尚未得到支持,因此在此期间,您需要执行提取以获取填充通知所需的信息。
[使用GCM推送通知发布数据可能重复](http://*.com/questions/37966954/posting-data-with-gcm-push-notification) – Marco
我也有这个问题 – ihsansat
目前黑客入侵同样的问题。不要认为firebase目前支持我们通过serviceWorkers获得的webPush。 – pascalwhoop