我过去几个小时一直在阅读关于Push Notification API和Web Notification API的内容.我还发现Google和Apple分别通过GCM和APNS免费提供推送通知服务.
我试图了解我们是否可以使用桌面通知向浏览器实施推送通知,我相信这是Web Notification API所做的.我在这里和这里看到了关于如何为Chrome做这件事的谷歌文档.
现在仍然无法理解的是:
我相信在一个答案中回答的所有问题都可以帮助很多有类似困惑的人.
javascript web-notifications google-cloud-messaging web-push push-api
在实施chrome推送通知时,我们从服务器获取最新的更改.在这样做时,服务工作者正在显示带有该消息的额外通知
此网站已在后台更新
已经尝试过这里发布的建议
https://disqus.com/home/discussion/html5rocks/push_notifications_on_the_open_web/
但到现在为止找不到任何有用的东西.有什么建议吗?
主要目标是增加站点发送Web通知的能力,以弹出系统通知,以使用Html5 Push API和服务工作人员提醒用户.不使用SignalR,它只能在打开网站时运行客户端脚本.也应该是,如果网站被关闭,如提及发布通知的能力在这里 -这是可能的.
这是关于Push API的好文章并提供了很好的示例 但是它使用NodeJS作为服务器和web-push组件来向通知服务发送请求.
找不到任何.NET示例.我想到了两个解决方法.
首先,是基于关于服务器的Push API文章说明从头开始编写所有内容:
当您发送没有数据的推送消息时,您只需使用HTTP POST请求将其发送到端点URL.但是,当推送消息包含数据时,您需要对其进行加密,这是一个非常复杂的过程.
其次,是使用AspNetCore.NodeServices(关于它的文章)来执行node.js脚本文件
还有更多解决方案吗?也许存在现成的解决方案?
经过学科研究
3例:
new Notification('Message')
它变得复杂了.怎么了?
可能的解决方案:
对于1和2个案例找到了此存储库.认为这是一个很好的前端解决方案,具有良好的后备支持.对于3个案例仍然不知道该怎么做.
当前解决方案 补充:2017-11-22
从文档中我可以看出Push API和Server Sent Events 都是半双工但为什么两种不同的技术具有相同的功能?Push API中有更重要的东西吗?
html5 push-notification server-sent-events web-push push-api
我正在尝试创建一个能够使用Push API发送推送消息的服务器:https://developer.mozilla.org/en-US/docs/Web/API/Push_API
我有客户端工作,但现在我希望能够从Java服务器发送带有负载的消息.
我看到了nodejs web-push示例(https://www.npmjs.com/package/web-push),但我无法将其正确地转换为Java.
我尝试按照示例使用此处的DH密钥交换:http://docs.oracle.com/javase/7/docs/technotes/guides/security/crypto/CryptoSpec.html#DH2Ex
在sheltond的帮助下,我能够找出一些应该工作的代码,但事实并非如此.
当我将加密的消息发布到Push服务时,我得到了预期的201状态代码,但推送从未到达Firefox.如果我删除了有效负载和标头,只是将POST请求发送到同一个URL,则消息成功到达Firefox,没有数据.我怀疑它可能与我用Cipher.getInstance("AES/GCM/NoPadding")加密数据的方式有关;
这是我目前使用的代码:
try {
final byte[] alicePubKeyEnc = Util.fromBase64("BASE_64_PUBLIC_KEY_FROM_PUSH_SUBSCRIPTION");
KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC");
ECGenParameterSpec kpgparams = new ECGenParameterSpec("secp256r1");
kpg.initialize(kpgparams);
ECParameterSpec params = ((ECPublicKey) kpg.generateKeyPair().getPublic()).getParams();
final ECPublicKey alicePubKey = fromUncompressedPoint(alicePubKeyEnc, params);
KeyPairGenerator bobKpairGen = KeyPairGenerator.getInstance("EC");
bobKpairGen.initialize(params);
KeyPair bobKpair = bobKpairGen.generateKeyPair();
KeyAgreement bobKeyAgree = KeyAgreement.getInstance("ECDH");
bobKeyAgree.init(bobKpair.getPrivate());
byte[] bobPubKeyEnc = toUncompressedPoint((ECPublicKey) bobKpair.getPublic());
bobKeyAgree.doPhase(alicePubKey, true);
Cipher bobCipher = Cipher.getInstance("AES/GCM/NoPadding");
SecretKey bobDesKey = bobKeyAgree.generateSecret("AES");
byte[] saltBytes = new byte[16];
new …
Run Code Online (Sandbox Code Playgroud) 我有一个Web应用程序.我想使用HTML 5内置通知API在用户位于特定页面时从服务器执行推送通知.可能吗?
我正在使用基于新服务工作者的API在Web上使用推送通知,并具有以下用例:
鉴于Push API对userVisible的限制,有没有办法实现这种体验?
我有一个响应和启用推送通知功能的网站.在我的原生Android应用程序中,如果我加载我的网站WebView
,然后弹出通常在chrome/firefox中询问是否用户想要允许推送通知,不显示在WebView
.很明显,它WebView
不会支持应用程序的相同Web推送通知.我知道如何在应用程序中实现GCM或FCM以启用移动推送,但我想知道是否可以通过android webview来支持web推送通知,以便它可以在我的应用程序中工作,因为它在chrome/firefox等工作.
我尝试了什么:在深入研究之后,我最终得出结论,由于Android WebView
不支持Push Api(在caniuse.com的帮助下),使用移动推送使用网络推送的俱乐部WebView
目前是不可能的.我对吗?或者有没有任何应用程序已经这样做?有可能吗?
我能够发送推送通知,并且在服务工作者中我正在进行服务呼叫我只是想要通过该服务调用发送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
push-api ×10
web-push ×9
javascript ×2
android ×1
asp.net-core ×1
c# ×1
chrome-gcm ×1
encryption ×1
html ×1
html5 ×1
java ×1