标签: push-api

如何将推送通知发送到Web浏览器?

我过去几个小时一直在阅读关于Push Notification APIWeb Notification API的内容.我还发现Google和Apple分别通过GCM和APNS免费提供推送通知服务.

我试图了解我们是否可以使用桌面通知向浏览器实施推送通知,我相信这是Web Notification API所做的.我在这里这里看到了关于如何为Chrome做这件事的谷歌文档.

现在仍然无法理解的是:

  1. 我们可以使用GCM/APNS向包括Firefox和Safari在内的所有Web浏览器发送推送通知吗?
  2. 如果不是通过GCM我们可以拥有自己的后端来做同样的事情吗?

我相信在一个答案中回答的所有问题都可以帮助很多有类似困惑的人.

javascript web-notifications google-cloud-messaging web-push push-api

165
推荐指数
8
解决办法
15万
查看次数

Chrome推送通知:此网站已在后台更新

在实施chrome推送通知时,我们从服务器获取最新的更改.在这样做时,服务工作者正在显示带有该消息的额外通知

此网站已在后台更新

已经尝试过这里发布的建议 https://disqus.com/home/discussion/html5rocks/push_notifications_on_the_open_web/
但到现在为止找不到任何有用的东西.有什么建议吗?

google-chrome push-notification web-push push-api

28
推荐指数
4
解决办法
3万
查看次数

Asp Net Core Web推送通知

主要目标是增加站点发送Web通知的能力,以弹出系统通知,以使用Html5 Push API和服务工作人员提醒用户.不使用SignalR,它只能在打开网站时运行客户端脚本.也应该是,如果网站被关闭,如提及发布通知的能力在这里 -这是可能的.

是关于Push API的好文章并提供了很好的示例 但是它使用NodeJS作为服务器和web-push组件来向通知服务发送请求.

找不到任何.NET示例.我想到了两个解决方法.

首先,是基于关于服务器的Push API文章说明从头开始编写所有内容:

当您发送没有数据的推送消息时,您只需使用HTTP POST请求将其发送到端点URL.但是,当推送消息包含数据时,您需要对其进行加密,这是一个非常复杂的过程.

其次,是使用AspNetCore.NodeServices(关于它的文章)来执行node.js脚本文件

还有更多解决方案吗?也许存在现成的解决方案?

经过学科研究

3例:

  1. HTTP +旧浏览器+ IE所有版本 - 使用信号R +使用html + js渲染通知
  2. HTTP +现代浏览器(Chrome,Firefox,Safary,Opera?,Edge),支持Notification API. - 使用SignalR并使用js触发本机浏览器通知new Notification('Message')
  3. HTTPS + Chrome(移动版),支持Push API,可以使用服务工作者触发已关闭网站的本机通知.移动版Chrome只能使用service-worker创建通知.

它变得复杂了.怎么了?

可能的解决方案:

对于1和2个案例找到了存储库.认为这是一个很好的前端解决方案,具有良好的后备支持.对于3个案例仍然不知道该怎么做.

当前解决方案 补充:2017-11-22

  • 没有脱机客户端通知支持
  • 没有移动支持
  • 对于Chrome v62 +将所有项目移至https - 链接
  • 使用SignalR(0.2.0)将推送发送到在线客户端
  • 使用pnotify v3 +显示本机desctop或html通知.
  • 正在等待pnotify v4.0.0(作者承诺提供Chrome移动支持.问题)
  • 等待带有SignalR 1.0的.NET Core 2.1将整个项目重写到它.

c# web-push push-api asp.net-core asp.net-core-webapi

25
推荐指数
1
解决办法
2万
查看次数

Push API和Server Sent Events之间有什么区别?

从文档中我可以看出Push APIServer Sent Events 都是半双工但为什么两种不同的技术具有相同的功能?Push API中有更重要的东西吗?

html5 push-notification server-sent-events web-push push-api

21
推荐指数
2
解决办法
6728
查看次数

在Java中加密Web 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)

java encryption diffie-hellman push-api

17
推荐指数
1
解决办法
7355
查看次数

如何在HTML5 Web应用程序中执行推送通知?

我有一个Web应用程序.我想使用HTML 5内置通知API在用户位于特定页面时从服务器执行推送通知.可能吗?

html javascript push-notification web-push push-api

14
推荐指数
1
解决办法
3万
查看次数

如何使用Web推送通知远程关闭通知?

我正在使用基于新服务工作者的API在Web上使用推送通知,并具有以下用例:

  • 用户选择在多个设备/平台上接收通知
  • 我们会在所有设备/平台上向他们发送通知
  • 用户在其中一个设备/平台上驳回通知
  • 我们现在想要远程隐藏来自其他设备/平台的通知

鉴于Push API对userVisible的限制,有没有办法实现这种体验?

service-worker web-push push-api progressive-web-apps

11
推荐指数
1
解决办法
511
查看次数

在原生Android应用程序中使用webview使Web推送通知工作?

我有一个响应和启用推送通知功能的网站.在我的原生Android应用程序中,如果我加载我的网站WebView,然后弹出通常在chrome/firefox中询问是否用户想要允许推送通知,不显示在WebView.很明显,它WebView不会支持应用程序的相同Web推送通知.我知道如何在应用程序中实现GCM或FCM以启用移动推送,但我想知道是否可以通过android webview来支持web推送通知,以便它可以在我的应用程序中工作,因为它在chrome/firefox等工作.

我尝试了什么:在深入研究之后,我最终得出结论,由于Android WebView不支持Push Api(在caniuse.com的帮助下),使用移动推送使用网络推送的俱乐部WebView目前是不可能的.我对吗?或者有没有任何应用程序已经这样做?有可能吗?

android push-notification android-webview web-push push-api

10
推荐指数
1
解决办法
4596
查看次数

用于chrome的推送通知中的服务工作者中的GCM注册ID

我能够发送推送通知,并且在服务工作者中我正在进行服务呼叫我只是想要通过该服务调用发送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

9
推荐指数
1
解决办法
4644
查看次数

谷歌Chrome无声推送通知

我一直在阅读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

9
推荐指数
1
解决办法
3136
查看次数