使用 PHP 来自服务器端的浏览器通知

Posted

技术标签:

【中文标题】使用 PHP 来自服务器端的浏览器通知【英文标题】:Browser notifications from server side using PHP 【发布时间】:2016-02-24 07:12:47 【问题描述】:

我可以使用 php 从服务器向订阅用户发送浏览器通知吗?我今天看到了this tutorial,但这只能从客户端工作。我知道有 pushcrew 这样的服务,但我想使用 PHP 和 javascript 开发自己的服务。

我的实际要求是要求用户确认我是否可以使用此代码向他们发送通知,

if (Notification.permission !== "granted")

   Notification.requestPermission();

然后当我在我的网站上发布新文章时显示通知。

注意:浏览器支持无关紧要。

【问题讨论】:

如果你可以让它工作,你可以试试这个库:github.com/web-push-libs/web-push-php。我无法让它工作,即使我只是使用他们网站上的示例代码,库中的 PHP 代码也会抛出错误。 【参考方案1】:

您必须在客户端触发这些通知,因此您需要将它们从 PHP 服务器获取到您的 JavaScript:

每隔 x 秒执行一次 ajax 轮询,例如使用 jQuery ajax functions,并在服务器返回时显示一条消息 通过 WebSockets 推送消息,例如使用Ratchet

Web 推送 允许您推送通知,即使用户没有打开站点并且最近的 Firefox 44 支持它。Chrome 部分支持它。详情请查看Mozilla Hacks blog。

轮询示例

JavaScript jQuery 部分:

function doPoll() 
    // Get the JSON
    $.ajax( url: 'test.json', success: function(data)
        if(data.notify) 
            // Yeah, there is a new notification! Show it to the user
            var notification = new Notification(data.title, 
                 icon:'https://lh3.googleusercontent.com/-aCFiK4baXX4/VjmGJojsQ_I/AAAAAAAANJg/h-sLVX1M5zA/s48-Ic42/eggsmall.png',
                 body: data.desc,
             );
             notification.onclick = function () 
                 window.open(data.url);      
             ;
        
        // Retry after a second
        setTimeout(doPoll,1000);
    , dataType: "json");

if (Notification.permission !== "granted")

    // Request permission to send browser notifications
    Notification.requestPermission().then(function(result) 
        if (result === 'default') 
            // Permission granted
            doPoll();
        
    );
 else 
    doPoll();

如果有消息,JSON 服务器会在“test.json”中回答:


    "notify": true,
    "title": "Hey there!",
    "desc": "This is a new message for you",
    "url": "http://***.com"

“test.json”中的 JSON 服务器回答不显示消息:


    "notify": false

【讨论】:

当用户在我的页面上处于活动状态时,您的方法是用于自定义通知。但我的要求是使用浏览器通知,即使用户在我的网站上不活跃。 浏览器通知仅在发送通知的页面打开(活动或在后台)时起作用。想象一下,如果不是这样,有多少垃圾邮件发送者会淹没您的桌面? 你完全错了!浏览器通知是不同的。他们首先征得您的许可,然后才会开始显示通知。根本没有垃圾邮件。不同的域需要不同的权限。它不需要网页处于活动状态。如果您的浏览器已打开,它将显示通知。请查看此链接 - developer.mozilla.org/en/docs/Web/API/notification "通知 API 允许网页控制向最终用户显示系统通知——这些在***浏览上下文视口之外,因此即使用户切换了标签页或移动到另一个应用程序。” developer.mozilla.org/en-US/docs/Web/API/Notifications_API 瞧,我找到了你要找的东西:hacks.mozilla.org/2016/01/web-push-arrives-in-firefox-44

以上是关于使用 PHP 来自服务器端的浏览器通知的主要内容,如果未能解决你的问题,请参考以下文章

不显示来自后端的图像

Cordova Android 应用程序不接收来自服务器端的 FCM 通知

如何取消或停止来自客户端的推送通知?

如何在我的 iPhone 应用程序中显示来自服务器端的推送通知

Select总结

来自 php 服务器的 Android 推送通知