看起来推送通知最终可用于网络应用程序!不幸的是,这需要ServiceWorker的https,并非所有站点都可以使用.
我在提到的规范中注意到一件事:
if r's url's scheme is not one of "http" and "https", then:
Throw a TypeError."
所以我很困惑 - 只要它包含来自https的服务工作者,该网站是否可以是http?例如,mydomain.com可以包含来自https://anotherdomain.com的https服务工作者?
另一个标准,web-api simple-push,没有提到需要https(可能是文档中的遗漏?),并且"Firefox桌面上的用户体验还没有被提取出来".关于这个过时的文档,还是推送真的只支持FirefoxOS?
我能够发送推送通知,并且在服务工作者中我正在进行服务呼叫我只是想要通过该服务调用发送GCM注册ID.如何在服务工作者中获取注册ID或订阅ID
这是我的代码
self.addEventListener('push', function(event) {
console.log('Received a push message from local', event);
var title = 'My title file. Testing on';
var body = 'New Push Message.';
var icon = 'refresh_blueicon.png';
var tag = 'my-push-tag';
event.waitUntil(
// Here i need to wind GCM Registration id / Subscription id with external service call
fetch('http://localhost/pushMsg/Push_Notification/msg.php').then(function(response){
if (response.status !== 200) {
console.log('Looks like there was a problem. Status Code: ' +
response.status);
throw new Error();
}
// Examine the text in the response
return …Run Code Online (Sandbox Code Playgroud) google-cloud-messaging chrome-gcm service-worker web-push push-api
我一直在阅读Chrome 在这里实施Web Push API的文档,我注意到API说"你保证在收到推送时会显示通知",并且在限制条件下它声明"你必须在你会收到推送信息".
在我的localhost上实现示例后,我使用cURL成功发送推送通知.我很好奇,所以我注释掉实际上调用showNotification函数的行,然后放入console.log,发现我实际上可以发送,接收和完全忽略推送通知.我甚至尝试使用if语句来控制是否根据我从主页面控制的全局布尔值来显示它们,这是有效的.所以我想知道是否有人知道他们的意思是说你需要显示通知,并且无法提供无声推送通知?
这不仅仅是为了它,我合法地可能需要控制是否在我的网络应用程序中显示这些通知,所以如果这实际上是可能的话会很好.如果你好奇,请在下面编写代码.
self.addEventListener('push', function(event) {
var title = 'New Message';
var body = 'You have received a new message!';
var icon = '/img/favicon.png';
var tag = 'well-notification';
console.log("DID RECEIVE NOTIFICATION")
if(settingsShowNotification) {
event.waitUntil(
self.registration.showNotification(title, {
body: body,
icon: icon,
tag: tag
})
);
}
});
Run Code Online (Sandbox Code Playgroud)
编辑:在Chrome 47上,如果它是相关的.
更新:经过进一步的实验,我发现了一个明显的问题,即一旦用户导航离开然后重新导航到同一页面,我就无法更新原始的全局变量.但是,我能够使用serviceworker本身的变量并使用此处描述的API向服务工作者发送消息以切换showNotifications布尔值来绕过这一点.
notifications google-chrome google-cloud-messaging web-push push-api
我正在尝试在我的网站上实现推送通知(使用Pushpad).因此我创建了一个"manifest.json",其中包含以下内容:
{
"gcm_sender_id": "my_gcm_sender_id",
"gcm_user_visible_only": true
}
Run Code Online (Sandbox Code Playgroud)
当然,我创建了一个有效的GCM帐户并拥有发件人ID
我把manifest.json放到我的根目录中,我也把这行添加到我的index.php中:
<link rel="manifest" href="/manifest.json">
Run Code Online (Sandbox Code Playgroud)
使用Firefox一切正常,我可以发送和接收推送通知(所以我认为清单包含工作正常),但Chrome无法正常工作......
控制台显示以下错误:
Uncaught (in promise) DOMException: Registration failed - manifest empty or missing
Run Code Online (Sandbox Code Playgroud)
我搜索谷歌很长一段时间,并尝试了我发现的一切,但没有任何作用.
我尝试了什么:
我真的希望有人可以帮助我.
我正在使用最近发布的FCM消息传递支持Chrome上的推送通知.当我的应用程序在后台时,我收到通知,但是当我点击通知时没有任何反应.如何指定用户单击通知时应打开的URL?(我理解如何使用notificationclick事件使用纯服务工作者概念完成,我想知道如何使用FCM消息传递.)
messaging.setBackgroundMessageHandler(function(payload) {
var data = payload || {};
var shinyData = decoder.run(data);
console.log('[firebase-messaging-sw.js] Received background message ', shinyData);
return self.registration.showNotification(shinyData.title, {
body: shinyData.body,
icon: shinyData.icon
})
});
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
push-notification firebase service-worker web-push firebase-cloud-messaging
在服务工作者注册上使用showNotification方法,是否可以设置显示的通知的样式,例如文本的颜色?
我对Android和桌面平台都很好奇.
notifications google-chrome service-worker web-push progressive-web-apps
我目前面临一些Chrome(Chromium)版本的问题,其中PushManager.subscribe来自ServiceWorker 的承诺保持在待处理状态.
代码本身很简单:
return serviceWorkerRegistration.pushManager.subscribe({
userVisibleOnly: true
});
Run Code Online (Sandbox Code Playgroud)
我有一个有效且可访问的JSON 清单,提供GCM发件人ID.我也尝试过不同的实现方式,如在这个岗位,但结果还是一样.
订阅部分适用于每47个以上的版本,旧版本中会出现此问题.(我正在使用Chromium连续版本来测试不同的主要版本).
另请注意,在Ubuntu上使用Chromium 46(及以下版本)时,承诺会在15分钟后拒绝使用Internal Server Error.
我正在尝试获取 Mozilla 的通知。但它不断抛出这个错误。
通知权限只能从短期运行的用户生成的事件处理程序内部请求。
这是我的代码。相同的代码在 Chrome、EDGE 和 Opera 上运行良好。
Notification.requestPermission().then(function (status) {
if (status === 'denied') {
//
} else if (status === 'granted') {
//
}
});
Run Code Online (Sandbox Code Playgroud)
我发现了一些与此相关的问题,但没有一个对我有帮助。
问题
我想知道webpush协议是如何工作的?WebSocket它是否像协议一样保持某种连接的打开状态?或者它使用类似的机制polling?
尝试过
根据文档WebPush 使用 HTTP 2.0 服务器推送:
描述了用于向用户代理传送实时事件的简单协议。该方案使用HTTP/2服务器推送。
服务器推送维基百科:
HTTP/2 Server Push 不是一种从服务器到客户端的通知机制。相反,当客户端可能以其他方式生成获取资源的请求时,客户端会使用推送的资源;
HTTP/2 服务器推送示例场景:
考虑一个包含三个资源的网站:index.html、styles.css 和 script.js。当用户通过浏览器连接到该网站的主页时,他们会自动检索index.html。当浏览器解析 index.html 中的 HTML 文本时,它会找到需要 styles.css 和 script.js 的指令。此时,浏览器将发出请求以获取另外两个文件。
通过 HTTP/2 Push,服务器可以采取主动,制定规则,甚至在请求内容之前就触发内容发送。在这个示例场景中,服务器知道任何请求index.html的人都需要styles.css和script.js,因此它可以立即将它们推送到客户端,而无需等待客户端请求它们。
根据 HTTP/2 服务器推送,WebPush 协议似乎应该在客户端请求之前返回某种通知。但我对此并不确定。所以这是我的问题:它到底是如何工作的?
我正在尝试在Chrome中执行网络推送通知,而不使用GCM/FCM.可能吗?我无法找到有关如何使用其他推送服务的示例.
google-chrome push-notification google-cloud-messaging web-push firebase-cloud-messaging
web-push ×10
push-api ×3
chrome-gcm ×2
firebase ×1
firefox-os ×1
html5 ×1
http2 ×1
javascript ×1
manifest ×1
mozilla ×1
pushpad ×1
server-push ×1