消息被报告为已成功发送,但没有弹出通知出现。
使用onMessage有时可以记录消息。
请求FCM令牌仅适用于本地主机。
在.com网站上尝试时,错误消息取决于我使用PC还是chromebook-生成的错误消息有所不同。
我使用了2种不同的设备,但始终使用Chrome浏览器。云功能将消息和FCM响应写入功能日志,以确认发送成功。
当我从收件人网页删除onMessage时,没有任何通知的迹象。
在这些试用期间将打开网页。这是web / javascript。
在两个设备中,通知权限均设置为允许。
我花了数小时进行网络搜索,试图找到有关尝试方法的任何提示。
firebase-messaging-sw.js
importScripts('https://www.gstatic.com/firebasejs/3.9.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/3.9.0/firebase-messaging.js');
firebase.initializeApp({
'messagingSenderId': '593287500713'
});
const messaging = firebase.messaging();
与网页一起运行的相关代码
messaging.onMessage(function (payload) {
console.log('Message received. ', payload);
});
我假设没有onMessage,则通知应基于Firebase SDK出现,但不是。错误的假设
在后台时,没有任何显示。 (我认为通知应该会自动出现。)
在本地主机上运行时,我可以请求并接收FCM令牌,但是在部署时,相同的代码会引发错误。 “请求缺少必需的身份验证...”
我一直在与支持部门@ Google取得联系,他们向我保证了此建议,然后另一个人将100%解决该问题。没有任何改变。
我已经尝试了Firebase文档和github示例中的代码段。
如果我能找到可行的现有代码,那将是一个不错的开始,因为我认为经过40个小时的努力才能找到解决方案。
我错过了明显的事情吗?
更新......
我发现了看不到通知的两个原因。
1)我的PC的设置似乎部分抑制了显示。意外,因为确实会显示YouTube通知。 (打开屏幕右下角的通知托盘。带有新月形符号的“聚焦辅助”。如果单击它,则显示“开”或“仅警报”,我认为这限制了所看到的内容。)
2)我基于Firebase文档和视频的假设是onMessage()可以防止用户在网页上时发出通知,并允许开发人员忽略或处理页面内的通知。对了一半显然,通知是默认忽略的,除非onMessage()对它们进行了处理。该文档提供了onMessage()的代码片段,但仅提供了如何登录到控制台。
还发现了一个有趣的问题。现在,我的PC已注册了邮件的收件人,即使该收件人已注销并已在另一台设备上登录,它也会收到邮件。听起来像个问题。
该代码的当前工作版本。这会出现在网页/应用中(不是位于messages-sw.js文件中
答案 0 :(得分:0)
关于消息传递的介绍性视频表明,当有人访问网站时,弹出来自网站的通知是不好的UX。因此,代码可以包含onMessage()来忽略通知或在页面中处理通知。
文档提供了onMessage版本,该版本仅将通知记录到控制台,并且仅包含有关执行其他操作的注释。
文档的其他部分说明系统会自动显示通知。
因此,我推断没有onMessage(),通知将自动出现。
看来我错了。
我花了很多时间来解决这个问题并找到一些代码来使通知出现。 (即使现在我不确定我是否已经掌握了发生的情况,但以下方法似乎可行)
它进入网页/应用程序。 (不在messaging-sw.js中。将其放在“使用窗口方法”时会引发错误)
[请注意,我还发现自己的PC设置方式似乎允许YouTube发送通知,但阻止了FCM通知的显示。 (请参阅相关说明)
到目前为止,当用户使用打开网页,后台显示网页以及关闭浏览器时,我已经对此进行了测试。通知以默认声音显示,并在通知托盘中列出。
如果收件人从网页注销并在另一台设备上登录,也会发生这种情况。消息继续发送到同一设备。
消息发送到设备而不是用户]
messaging.onMessage(function (payload) {
try{ //try???
console.log('Message received. ', payload);
noteTitle = payload.notification.title;
noteOptions = {
body: payload.notification.body,
icon: "typewriter.jpg", //this is my image in my public folder
};
console.log("title ",noteTitle, " ", payload.notification.body);
//var notification = //examples include this, seems not needed
new Notification(noteTitle, noteOptions);//This can be used to generate a local notification, without an incoming message. noteOptions has to be an object
}
catch(err){
console.log('Caught error: ',err);
}
});
``````````