精华内容
下载资源
问答
  • 就在近日,华为终于发布了大家期盼已久的鸿蒙操作系统,至此鸿蒙系统算是正式走进了大众视野,相信很多朋友已经第一时间进行了系统升级,开始享受鸿蒙带来的全新体验。不过关于鸿蒙系统的了解,相信很多人其实依然...

    就在近日,华为终于发布了大家期盼已久的鸿蒙操作系统,至此鸿蒙系统算是正式走进了大众视野,相信很多朋友已经第一时间进行了系统升级,开始享受鸿蒙带来的全新体验。

    4507a8f7a2eee5daff08910cf6b40b10.png

    不过关于鸿蒙系统的了解,相信很多人其实依然一知半解,或者会有很多疑惑,其实这在意料之中,因为在华为发布鸿蒙系统之前,关于对鸿蒙系统的介绍,也一直没有一个系统的全面的讲解。

    这同样也在意料之中,因为鸿蒙毕竟一直都在不断的开发之中,所以在不同的开发阶段,或许就会有不同的解读,同时不同的人,在理解上可能也会出现偏差,然而这种情况,其实在华为内部也同样如此。

    就在华为发布鸿蒙系统后的第2天,由徐直军签发的“关于规范HarmonyOS沟通口径的通知”就被发布,其中在通知的开篇就提到,对于鸿蒙操作系统,华为内部理解不一致,对外说法不一致。

    557ac53d36c38ab1063c7a1af4e0043f.png

    因此该通知实际上是对鸿蒙系统,进行了一个综合的、全面的、严谨的定义,简单来说,鸿蒙系统就是做到了4个实现:

    实现不同设备的智能化、互联与协同实现不同设备统一OS,弹性部署实现设备硬件之间互助,资源共享实现软件一次开发,多端部署然而如果我们细品之后,会发现,这其实是鸿蒙这个系统的特性,或者说是功能、能力,因此依然没有触及到鸿蒙系统的本质,说白了,就是鸿蒙系统到底是谁?

    658ed6873fbfb1b9ad556d85f6708b63.png

    紧接着,我们在该通知的第2条、第3条和第5条上,终于看清了鸿蒙是谁,可以说,我们现在常说的鸿蒙,是一个“套壳”系统,但此“套壳”并非彼“套壳”。

    看上去似乎有点乱,其实并不乱,我们简单说明,大家就能看得清清楚楚。

    以安卓系统举例,例如小米MIUI等这一类安卓系统,其实都是“套壳”AOSP,想必这个有很多朋友知道,AOSP是一个开源项目,也就是安卓开放源代码项目,谁都可以参与进来,对于AOSP,也谁都可以使用。

    a03a665a7132cb28ab0ecf71aa626d32.png

    那么鸿蒙呢?我们常说的鸿蒙,其实对应的就是HarmonyOS,目前华为发布的是HarmonyOS 2版本,其“套壳”的就是OpenHarmony 2,HarmonyOS 2是OpenHarmony 2的商业版本,而OpenHarmony项目的参与者众多。

    OpenHarmony开源项目由开放原子开源基金会来负责,其中华为在2020年和2021年分别向该基金会捐献了该系统的基础能力,目前该项目的参与者已经达到了245位。

    所以OpenHarmony就类似于AOSP,而HarmonyOS就类似于EMUI,目前的鸿蒙系统也就是指的HarmonyOS,为了兼容一些安卓软件,所以HarmonyOS也会支持AOSP,随着鸿蒙生态的成熟,后续也可以去除AOSP。

    b546f088abee0b7e676587aa8bab1d0a.png

    或者在一些设备上,如果鸿蒙生态就可以满足用户所需,那么也可以直接就不支持AOSP。

    因此像小米、OV等手机厂商,则可以通过OpenHarmony开源项目,然后对系统进行个性化的修改,变成自己的系统,当然就不能叫鸿蒙了,毕竟华为已经取得了商标,但其本质与鸿蒙是无异的,就像小米的MIUI与华为的EMUI都是基于AOSP是一个道理。

    基于同样的道理,我们都把基于AOSP的系统叫做安卓系统,例如上面提到的MIUI、EMUI,当然也可以把都基于OpenHarmony的系统,口头上称为鸿蒙,只不过华为比较特殊,干脆就叫鸿蒙了,但我们认为,其实鸿蒙应该作为开源系统的中文名似乎更合适。

    d0c230c645abb362446f6b73846b7f36.png

    这就像GPS一样,像我们的北斗、欧洲的伽利略等,其实都叫做GPS,只不过美国比较特殊,把它自己的全球定位系统的名字,就叫做GPS了,所以很多人在这方面都有误解和混淆。

    也或许就是这样的原因,使得大家对于鸿蒙系统存在认知混乱的情况,就如我们上面所说的,如果华为将鸿蒙这个名字给了OpenHarmony开源项目,然后给自己的HarmonyOS再另起一个中文名,或者英文名也不带Harmony,那么大家就会更容易理解了。

    3a7094842f69ad5ad2699a3aa7b088d8.png

    总之,今后我们所称呼的鸿蒙系统,就是华为基于OpenHarmony所研发的“套壳”系统,也可以叫做变种系统、商业系统,我们以前所理解的鸿蒙,本质上其实是OpenHarmony,即开源鸿蒙,现在大家明白了吗?

    举报/反馈

    展开全文
  • 事件通知(EventNotification)实践问题描述作为DBA,我们常常需要在SQLServer实例或数据库级别上跟踪正在发生的事件。有没有方法跟踪这些修改而不会太影响SQLSe事件通知(Event Notification)实践问题描述作为DBA,...

    事件通知(EventNotification)实践问题描述作为DBA,我们常常需要在SQLServer实例或数据库级别上跟踪正在发生的事件。有没有方法跟踪这些修改而不会太影响SQLSe

    事件通知(Event Notification)实践

    问题描述

    作为DBA,我们常常需要在SQL Server实例或数据库级别上跟踪正在发生的事件。有没有方法跟踪这些修改而不会太影响SQL Server性能呢?

    解决方案

    SQL Server 2005及其以后版本提供了事件通知(Event Notification)机制,来跟踪发生在数据库或实例级别上的事件或修改。这其实也可以通过DDL触发器或这SQL跟踪来实现,但是事件通知有异步相应事件和运行在事务范围之外的优点,因此能作为数据库应用程序的一部分,捕获预定义的事件,而无需占用分配给事务的资源。

    事件通知是一个使用DDL触发器或SQL跟踪的可编程的替代方案,执行相应不同的DDL语句、SQL跟踪、Service Broker事件(像QUEUE_ACTIVATION或BROKER_QUEUE_DISABLED),然后以XML格式发送信息到SQL Server Service Broker服务。换句话说,当创建一个通知,SQL Server跟踪预定义的事件,并将发生的事件写入到SSB服务,然后异步地从SSB队列接收信息。

    步骤一:

    首先检查Service Broker是否在数据库级别被启用,如果没有,启用它。然后创建一个SSB队列,SSB服务将会用这个队列去存储消息到服务。该服务使用内置的契约(契约定义了一个能发送到SSB服务的消息类型),,专用于事件通知(Event Notification)。注意:你需要排他访问数据去执行修改数据库命令。

    --Check if the database is enabled for Service Broker

    --If not then enable it

    IF EXISTS (SELECT * FROM sys.databases WHERE name = 'AdventureWorks2012'

    AND is_broker_enabled = 0)

    ALTER DATABASE AdventureWorks2012 SET ENABLE_BROKER;

    GO

    USE AdventureWorks2012

    GO

    --Create a queue which will hold the tracked information

    CREATE QUEUE dbo.EventNotificationQueue

    GO

    --Check if the queue is created or not

    SELECT * FROM sys.service_queues

    WHERE name = 'EventNotificationQueue'

    GO

    --Create a service on which tracked information will be sent

    CREATE SERVICE [//AdventureWorks2012/EventNotificationService]

    ON QUEUE dbo.EventNotificationQueue

    ([])

    GO

    --Check if the service is created or not

    SELECT * FROM sys.services

    WHERE name = '//AdventureWorks2012/EventNotificationService'

    GO

    步骤二:

    创建两个数据库级别的通知。首先,,当有一个创建表命令执行时,将发出通知;然后,当有一个修改表命令执行时,将发出通知。也可以创建一个通知事件组;例如,你可以创建一个单一的通知DDL_TABLE_EVENTS去跟踪像创建、修改、删除表的所有事件。

    --Create a notification to track create table command

    CREATE EVENT NOTIFICATION NotifyCREATETABLEEvents

    ON DATABASE

    FOR CREATE_TABLE

    TO SERVICE '//AdventureWorks2012/EventNotificationService' , 'current database'

    GO

    --Create a notification to track alter table command

    CREATE EVENT NOTIFICATION NotifyALTERTABLEEvents

    ON DATABASE

    FOR ALTER_TABLE

    TO SERVICE '//AdventureWorks2012/EventNotificationService' , 'current database'

    GO

    --Check if both the above notifications created or not

    SELECT * FROM sys.event_notifications

    WHERE name IN ('NotifyCREATETABLEEvents','NotifyALTERTABLEEvents')

    GO

    步骤三:

    创建一个服务器级别的通知,当一个错误在SQL Server实例级别触发时,该通知即被触发。可以查看sys.server_event_notifications目录视图查看通知是否存在于该服务器上。

    --Create a notification to error occuring at server level

    CREATE EVENT NOTIFICATION NotifyERROREvents

    ON SERVER WITH FAN_IN

    FOR ERRORLOG

    TO SERVICE '//AdventureWorks2012/EventNotificationService', 'current database'

    GO

    --Check if the above notification was created or not

    SELECT * FROM sys.server_event_notifications

    WHERE name IN ('NotifyERROREvents')

    GO

    步骤四:

    验证刚才建立的事件通知是否在正常工作。在这个脚本里,先创建一个表,然后修改它,它将会被数据库级别的事件通知捕获到,并且我使用了RAISERROR(WITH LOG从句需要被服务器级别事件通知捕获)在SQL Server里触发一个错误,该错误将会被上一个服务器级别的事件通知捕获到。

    --Generate a create table event

    CREATE TABLE ABC

    (

    COL1 INT,

    COL2 INT

    )

    GO

    --Generate an alter table event

    ALTER TABLE ABC

    ADD COL3 INT

    GO

    --Generate a server level event

    RAISERROR (N'Generating error for Event Notification testing...', 16, 1)

    WITH LOG

    GO

    --Review if the events were tracked in queue

    SELECT CAST(message_body AS XML) AS message_in_xml

    FROM dbo.EventNotificationQueue

    GO

    步骤五:

    事件通知以XML格式发送捕获到的信息到SSB服务;可以查询队列去看到捕获的信息,但是你需要用RECEIVE命令从队列接收消息,如下所示,处理它们并从队列中移除。使用RECEIVE命令你可以设置在一次接受的记录的数量。在这个脚本中,我使用TOP (1)命令接受第一行队列中的消息,并显示它的内容。事件通知以XML格式发送消息(注意:我们使用创建服务的内置契约,它定义了只有XML数据能被写入到服务),因此我转换消息体到XML数据类型。因为我使用了TOP (1)从句在RECEIVE命令,因为队列中有3条记录,我运行了下面的命令3次。查询的结果如下图。也可以使用一个循环的结构去从队列读取所有的记录,而不用运行这个脚本多次。

    f68f2add0b68e4f9810432fce46917b7.png

    本文原创发布php中文网,转载请注明出处,感谢您的尊重!

    展开全文
  • js通知消息提示音

    2021-01-12 17:02:13
    time%22:%226:Month%22%7D","link":"https://www.aliyun.com/product/rocketmq","icon":"https://img.alicdn.com/tfs/TB1DThKRXXXXXa.XpXXXXXXXXXX-200-200.png","btn2":"消息产品总览","tip":"消息队列AMQP发布,...

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里巴巴双11官方指定消息中间件,经过阿里巴巴交易核心链路反复打磨与历年双十一购物狂欢节的严苛考验,是一个真正具备低延迟、高并发、高可用、高可靠,可支撑万亿级数据洪峰的分布式消息中间件。","link1":"https://common-buy.aliyun.com/?commodityCode=onsbag&request=%7B%22pack_type%22:%22topic%22,%22region%22:%22ons-pack-china%22,%22flowout_topic%22:%22150%22,%22pack%22:%22FPT_onsbag_deadlineAcc_1544755088%22,%22ord_time%22:%226:Month%22%7D","link":"https://www.aliyun.com/product/rocketmq","icon":"https://img.alicdn.com/tfs/TB1DThKRXXXXXa.XpXXXXXXXXXX-200-200.png","btn2":"消息产品总览","tip":"消息队列AMQP发布,兼容 RabbitMQ,推出7种多语言客户端了解详情​!","btn1":"超值资源包","link2":"https://www.aliyun.com/product/ons","title":"消息队列 RocketMQ"}],"search":[{"txt":"消息队列 RocketMQ-金融等业务消息领域","link":"https://common-buy.aliyun.com/?commodityCode=onsbag&request=%7B%22pack_type%22:%22topic%22,%22region%22:%22ons-pack-china%22,%22flowout_topic%22:%22150%22,%22pack%22:%22FPT_onsbag_deadlineAcc_1544755088%22,%22ord_time%22:%226:Month%22%7D"},{"txt":"消息队列 MQTT-支持IOT与物联网等领域","link":"https://common-buy.aliyun.com/?commodityCode=onsMqtt&request=%7B%22version%22:%22normal%22,%22region%22:%22mq-internet-access%22,%22max_connection%22:%22100%22,%22max_tps%22:%22100%22,%22max_sub%22:%221000%22,%22order_num%22:1,%22ord_time%22:%22%5B3,%5C%22Month%5C%22%5D%22%7D"},{"txt":"消息队列 AMQP-全面兼容RabbitMQ","link":"https://common-buy.aliyun.com/?commodityCode=onsproxy_bag&request=%7B%22pack_type%22:%22queue%22,%22region%22:%22ons-pack-china%22,%22flowout_queue%22:%22150%22,%22pack%22:%22FPT_onsproxy_bag_deadlineAcc_1547457704%22,%22ord_time%22:%223:Month%22%7D"},{"txt":"消息队列Kafka-大数据通道","link":"https://common-buy.aliyun.com/?commodityCode=alikafka_post&request=%7B%22region%22:%22cn-hangzhou%22,%22vpc_deploy%22:%22true%22,%22IO_max%22:%2220%22,%22disk_type%22:%220%22,%22disk_size%22:900,%22msg_retain%22:72,%22order_num%22:1%7D"}],"countinfo":{"search":{"length_pc":0,"length":0},"card":{"length_pc":0,"length":0}},"simplifiedDisplay":"newEdition","newCard":[{"link":"https://img.alicdn.com/tfs/TB1XY8hGYr1gK0jSZFDXXb9yVXa-1740-328.png","icon":"ons","title":"消息队列 MQ","des":"MQ 产品生态丰富,多个子产品线联合打造金融级高可用消息服务以及对物联网的原生支持,覆盖金融保险、(新)零售、物联网、移动互联网、传媒泛娱乐、教育、物流、能源、交通等行业。","btn1":"消息队列 RocketMQ 版","link1":"https://www.aliyun.com/product/rocketmq","btn2":"消息队列 Kafka 版","link2":"https://www.aliyun.com/product/kafka","btn3":"消息队列 AMQP 版","link3":"https://www.aliyun.com/product/amqp","infoGroup":[{"infoName":"优惠活动","infoContent":{"firstContentName":"消息队列 AMQP 1个月免费试用","firstContentLink":"https://www.aliyun.com/product/amqp","lastContentName":"","lastContentLink":""}},{"infoName":"关联产品","infoContent":{"firstContentName":"微消息队列 MQTT","firstContentLink":"https://www.aliyun.com/product/mq4iot"}}]}],"visual":{"icon":"ons","topbg":"https://img.alicdn.com/tfs/TB14iILhgDqK1RjSZSyXXaxEVXa-286-101.jpg","textColor":"light"}}

    {"$env":{"JSON":{}},"$page":{"env":"production"},"$context":{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里巴巴双11官方指定消息中间件,经过阿里巴巴交易核心链路反复打磨与历年双十一购物狂欢节的严苛考验,是一个真正具备低延迟、高并发、高可用、高可靠,可支撑万亿级数据洪峰的分布式消息中间件。","link1":"https://common-buy.aliyun.com/?commodityCode=onsbag&request=%7B%22pack_type%22:%22topic%22,%22region%22:%22ons-pack-china%22,%22flowout_topic%22:%22150%22,%22pack%22:%22FPT_onsbag_deadlineAcc_1544755088%22,%22ord_time%22:%226:Month%22%7D","link":"https://www.aliyun.com/product/rocketmq","icon":"https://img.alicdn.com/tfs/TB1DThKRXXXXXa.XpXXXXXXXXXX-200-200.png","btn2":"消息产品总览","tip":"消息队列AMQP发布,兼容 RabbitMQ,推出7种多语言客户端了解详情​!","btn1":"超值资源包","link2":"https://www.aliyun.com/product/ons","title":"消息队列 RocketMQ"}],"search":[{"txt":"消息队列 RocketMQ-金融等业务消息领域","link":"https://common-buy.aliyun.com/?commodityCode=onsbag&request=%7B%22pack_type%22:%22topic%22,%22region%22:%22ons-pack-china%22,%22flowout_topic%22:%22150%22,%22pack%22:%22FPT_onsbag_deadlineAcc_1544755088%22,%22ord_time%22:%226:Month%22%7D"},{"txt":"消息队列 MQTT-支持IOT与物联网等领域","link":"https://common-buy.aliyun.com/?commodityCode=onsMqtt&request=%7B%22version%22:%22normal%22,%22region%22:%22mq-internet-access%22,%22max_connection%22:%22100%22,%22max_tps%22:%22100%22,%22max_sub%22:%221000%22,%22order_num%22:1,%22ord_time%22:%22%5B3,%5C%22Month%5C%22%5D%22%7D"},{"txt":"消息队列 AMQP-全面兼容RabbitMQ","link":"https://common-buy.aliyun.com/?commodityCode=onsproxy_bag&request=%7B%22pack_type%22:%22queue%22,%22region%22:%22ons-pack-china%22,%22flowout_queue%22:%22150%22,%22pack%22:%22FPT_onsproxy_bag_deadlineAcc_1547457704%22,%22ord_time%22:%223:Month%22%7D"},{"txt":"消息队列Kafka-大数据通道","link":"https://common-buy.aliyun.com/?commodityCode=alikafka_post&request=%7B%22region%22:%22cn-hangzhou%22,%22vpc_deploy%22:%22true%22,%22IO_max%22:%2220%22,%22disk_type%22:%220%22,%22disk_size%22:900,%22msg_retain%22:72,%22order_num%22:1%7D"}],"countinfo":{"search":{"length_pc":0,"length":0},"card":{"length_pc":0,"length":0}},"simplifiedDisplay":"newEdition","newCard":[{"link":"https://img.alicdn.com/tfs/TB1XY8hGYr1gK0jSZFDXXb9yVXa-1740-328.png","icon":"ons","title":"消息队列 MQ","des":"MQ 产品生态丰富,多个子产品线联合打造金融级高可用消息服务以及对物联网的原生支持,覆盖金融保险、(新)零售、物联网、移动互联网、传媒泛娱乐、教育、物流、能源、交通等行业。","btn1":"消息队列 RocketMQ 版","link1":"https://www.aliyun.com/product/rocketmq","btn2":"消息队列 Kafka 版","link2":"https://www.aliyun.com/product/kafka","btn3":"消息队列 AMQP 版","link3":"https://www.aliyun.com/product/amqp","infoGroup":[{"infoName":"优惠活动","infoContent":{"firstContentName":"消息队列 AMQP 1个月免费试用","firstContentLink":"https://www.aliyun.com/product/amqp","lastContentName":"","lastContentLink":""}},{"infoName":"关联产品","infoContent":{"firstContentName":"微消息队列 MQTT","firstContentLink":"https://www.aliyun.com/product/mq4iot"}}]}],"visual":{"icon":"ons","topbg":"https://img.alicdn.com/tfs/TB14iILhgDqK1RjSZSyXXaxEVXa-286-101.jpg","textColor":"light"}}}

    消息队列 MQ

    MQ 产品生态丰富,多个子产品线联合打造金融级高可用消息服务以及对物联网的原生支持,覆盖金融保险、(新)零售、物联网、移动互联网、传媒泛娱乐、教育、物流、能源、交通等行业。

    展开全文
  • 上次在别的网站上看到别人的通知弹窗,好奇之余也想知道如何实现的。实际去查一下发现并不复杂,且可以说比较简单,故写篇博客分享给大家,希望能帮你们了解这个API。npm包:我还发了一个npm包:notification-Koro1,...

    1460000018227718

    Notification是HTML5新增的API,用于向用户配置和显示桌面通知。上次在别的网站上看到别人的通知弹窗,好奇之余也想知道如何实现的。实际去查一下发现并不复杂,且可以说比较简单,故写篇博客分享给大家,希望能帮你们了解这个API。

    npm包:

    我还发了一个npm包:notification-Koro1,非常轻量简洁,觉得不错的话,点个Star吧~

    chrome下Notification的表现:

    以谷歌为例,一开始需要用户允许通知:

    1460000018227719

    允许通知之后,显示的通知长这样:

    1460000018227720

    Notification特性

    该通知是脱离浏览器的,即使用户没有停留在当前标签页,甚至最小化了浏览器,也会在主屏幕的右上角显示通知,然后在一段时间后消失。

    我们可以监听通知的显示,点击,关闭等事件,比如点击通知打开一个页面。

    栗子:去各个网站里面的控制台去运行

    API的具体细节,等下再说,先试试这个API~

    下面是一个简单的栗子,大家可以先在各个网站的控制台里面运行查看Notification的效果:

    var options = {

    dir: "auto", // 文字方向

    body: "通知:OBKoro1评论了你的朋友圈", // 通知主体

    requireInteraction: true, // 不自动关闭通知

    // 通知图标

    icon: "https://upload-images.jianshu.io/upload_images/5245297-818e624b75271127.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"

    };

    notifyMe('这是通知的标题', options);

    function notifyMe(title, options) {

    // 先检查浏览器是否支持

    if (!window.Notification) {

    console.log('浏览器不支持通知');

    } else {

    // 检查用户曾经是否同意接受通知

    if (Notification.permission === 'granted') {

    var notification = new Notification(title, options); // 显示通知

    } else if (Notification.permission === 'default') {

    // 用户还未选择,可以询问用户是否同意发送通知

    Notification.requestPermission().then(permission => {

    if (permission === 'granted') {

    console.log('用户同意授权');

    var notification = new Notification(title, options); // 显示通知

    } else if (permission === 'default') {

    console.warn('用户关闭授权 未刷新页面之前 可以再次请求授权');

    } else {

    // denied

    console.log('用户拒绝授权 不能显示通知');

    }

    });

    } else {

    // denied 用户拒绝

    console.log('用户曾经拒绝显示通知');

    }

    }

    }

    浏览器支持:

    MDN:目前Notification除了IE浏览器不支持外, 其他浏览器都已支持桌面通知,移动端浏览器基本都未支持。

    因为兼容性问题,所以在使用Notification之前,我们需要查看浏览器是否支持Notification这个API:

    if(window.Notification){

    // 桌面通知的逻辑

    }

    通知权限:

    为了避免网站滥用通知扰民,在向用户显示通知之前,需要经过用户同意。

    Notification.permission 用于表明当前通知显示的授权状态,它有三个值:

    default: 默认值,用户还未选择

    granted: 用户允许该网站发送通知

    denied: 用户拒绝该网站发送通知

    检测权限:

    检测浏览器是否支持Notification之后,需要检测一下用户通知权限。

    if (Notification.permission === 'granted') {

    console.log('用户曾经同意授权');

    // 随时可以显示通知

    } else if (Notification.permission === 'default') {

    console.log('用户还未选择同意/拒绝');

    // 下一步请求用户授权

    } else {

    console.log('用户曾经拒绝授权 不能显示通知');

    }

    请求权限

    当Notification.permission为default的时候,我们需要使用Notification.requestPermission()来请求用户权限。

    Notification.requestPermission()基于promise语法,then的回调函数参数是用户权限的状态Notification.permission的值。

    Notification.requestPermission().then(permission => {

    if (permission === 'granted') {

    console.log('用户同意授权');

    // 随时可以显示通知

    } else if (permission === 'default') {

    console.log('用户关闭授权 可以再次请求授权');

    } else {

    console.log('用户拒绝授权 不能显示通知');

    }

    });

    // 老版本使用的是回调函数机制:Notification.requestPermission(callback); 参数一样

    推送通知

    当Notification.permission为granted时,请求到用户权限之后,不必立即发送通知,可以在任意时刻,以任意形式来发送通知。

    const options = {}; // 传空配置

    const title = '这里是标题';

    const notification = new Notification(title, options) // 显示通知

    上面这段代码就可以显示一个简单的通知了,只要用户允许你弹窗。

    Notification的参数:

    title:通知的标题

    options:通知的设置选项(可选)。

    body:字符串。通知的body内容。

    tag:代表通知的一个识别标签,相同tag时只会打开一个通知窗口。

    icon:字符串。要在通知中显示的图标的URL。

    data:想要和通知关联的数据,可以在new Notification返回的实例中找到。

    renotify: 布尔值。相同tag,新通知出现的时候是否替换之前的(开启此项,tag必须设置)。

    requireInteraction:布尔值。通知不自动关闭,默认为false(自动关闭)。

    还有一些不太重要的配置可以看张鑫旭老师的博客和MDN的介绍

    requireInteraction: 保持通知不自动关闭

    默认值为false,通知会在三四秒之后自动关闭。

    当设置为true,并且当有超过两个通知(new Notification(title, options))时,会出现如下图的通知叠加状态。

    1460000018227721

    这种情况显然,我们只能默认操作最后一个通知,除非你把每个通知返回的实例都保存下来。

    我发布的npm包:notification-koro1,可以自定义一定的时间间隔自动关闭不自动关闭的通知,也可以一次性关闭所有通知

    PS:如果没有触发叠加,很可能是因为你两次通知的tag配置项是相同的(相同tag只能出现一个弹窗)。

    PS: safari下不支持该选项,默认自动关闭

    renotify:相同

    默认值为false,chorme下相同tag的通知不替换,还是老的通知

    设置为true, 两个相同tag的通知,新通知替换之前旧的通知。

    注意:使用renotify,必须要同时设置tag选项,否则将会报错。

    PS: safari下不支持该选项,默认两个相同tag的通知,新通知替换之前旧的通知。

    Notification的实例:

    生成通知,会返回一个实例,如下:

    const instanceNotification = new Notification(title, options)

    instanceNotification就是当前通知的实例,在该实例上,我们可以查询该通知的配置,监听事件,调用实例方法。

    下文都以instanceNotification指代通知返回的实例。

    通知的配置:

    在通知实例上可以读取到设置通知时的所有配置,比如:

    通知标题:instanceNotification. title、通知内容:instanceNotification. body、通知图标:instanceNotification. icon等。

    PS: 这些属性都是只读的,不能删除,不能修改,不能遍历。

    事件处理:

    我们可以使用通知的实例来监听通知的事件:

    click: 用户点击通知时被触发

    show: 通知显示的时候被触发

    error: 通知遇到错误时被触发

    close: 用户关闭通知时被触发

    instanceNotification.onclick = e => {

    // do something 可以是:打开网址,发请求,关闭通知等

    }

    注意:最好是一发出通知就立即监听事件,否则有些事件可能一开始没被触发或永远不会触发。

    例如:用定时器5秒后才监听通知的点击和显示事件,则永远不会触发通知显示的回调,点击事件在5秒后才可以正常起作用但会错误五秒之前用户的点击。

    关闭通知

    instanceNotification.close()

    没有设置不自动关闭的话,chrome通知将会在4.5秒左右自动关闭通知,safari则是5秒钟(无法设置不自动关闭)。

    notification没有定时控制通知多久后消失的功能,当出现多个通知,也无法统一关闭。

    这两个问题,在我发布的NPM包:notification-koro1中,都解决掉了,并提供更清晰的回调

    应用场景

    即时通讯软件(邮件、聊天室)

    体育赛事结果彩票/抽奖结果

    新闻网站重大新闻通知

    网站的重大更新,重大新闻等。

    notification其他

    这里是一些API/浏览器细节,以及可能会遇到的问题,可以先不看,等真正遇到了,回头再来看。

    用户拒绝显示通知:

    一旦用户禁止网站显示通知,网站就不能再请求用户授权显示通知,需要用户去设置中更改。

    chrome浏览器的通知设置位置:设置>高级>内容设置>通知

    saafari浏览器:偏好设置>网站>通知>找到网站>修改权限/恢复默认

    关闭请求权限:

    在chorme浏览器中:当用户关闭请求权限的弹窗(右上角的叉叉),页面还没刷新,我们可以再次向用户请求权限。页面刷新过后,浏览器默认用户拒绝。

    在safari浏览器下,没有关闭请求权限的选项,用户必须选择同意/拒绝。

    icon不显示问题:

    可能是网站进行了同源限制(比如github),不是域名下面的图片,会报错,不能调用。

    tag:

    tag相同的通知,同时只能出现一个,老通知是否会被覆盖取决于:renotify配置和浏览器。

    chrome下:当通知关闭之后,上次出现过的tag在一段时间内,不能再出现,比如刷新页面再请求相同tag的通知。(在safari下正常出现)

    safari下面不能显示icon

    在safari下面,同一个网站(比如谷歌),同样的代码,chorme可以正常显示icon,safari却没有icon,也没有报错。

    谷歌之后发现,在stack overflow里面看到safari只支持body和tag选项,并不支持icon选项。

    连续触发

    在safari和chrome下短时间内连续触发通知(不设tag,不设requireInteraction),会出现如下表现:

    1460000018227722

    这个表现,通知没有icon、标题、内容,就显得没有意义了,浏览器以这种形式,限制开发者不要频繁打扰用户。

    notification-Koro1:

    结语

    本文写的比较细,可以先mark一下,然后以后真正用到这个API了,可以先通过文中的栗子,然后再查找对应的内容。

    还有就是注意浏览器间的差异,我自己就试了chrome和safari,然后这两个浏览器在实现细节上有很多不一样的地方,开发的时候注意一下。

    参考资料:

    展开全文
  • Homeassistant手机通知功能

    千次阅读 2021-02-12 18:02:32
    在手机的设置-通知-找到homeassistant软件,允许该软件通知等一些权限(一定要开放,不然不会通知) 调用服务测试 点击开发者工具,然后选择服务,在服务栏输入noti然后选择带app后缀的就是你手机的实体 然后在数据...
  • 1 通知栏“Couldn’t expand RemoteViews”异常解析1.1 源码分析,跨进程传递UI,升级后id变动,版本升级的时候crashApp向系统发起通知栏请求时,向系统传递了一个RemoteViews对象,里面包括了包名,布局id,图片...
  • android中创建通知栏Notification代码实例///// 第一步:获取NotificationManagerNotificationManager nm = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);///// 第二步:定义Notification...
  • 1.设计思路,使用VersionCode定义为版本...谷歌建议我们使用versionCode自增来表明版本升级,无论是大的改动还是小的改动,而versionName是显示用户看的软件版本,作为显示使用。所以我们选择了VersionCode作为我...
  • 介绍Android O引入了通知渠道(Notification Channels),以提供统一的系统来帮助用户管理通知,如果是针对Android O为目标平台时,必须实现一个或者多个通知渠道,以向用户显示通知。若并不以Android O为目标平台,当...
  • Android8.0通知渠道

    2021-06-03 03:03:40
    Android8.0(API 26)引入了通知渠道,界面将渠道称作“类别”,从API 26开始必须为所有通知分配渠道,否则通知是不会显示的。 将通知归类为不同的渠道,用户可以停用应用的特定通知渠道(而非停用应用的所有通知)。在...
  • 简介:今年友盟+联合达摩院决策智能实验室讲算法技术,推出...越来越多的APP频繁推送信息已经导致用户不堪重负,友盟+ 数据显示:45%的iOS用户主动关闭了通知权限。 为了鼓励开发者更合理的使用推送通知。近日,苹果.
  • iOS 通知多线程的使用

    2020-12-29 09:10:24
    一、通知使用的回顾1.1、通知使用一添加通知/**添加通知observer:观察者aSelector:只要一监听到通知就会调用观察者这个方法aName:通知名称anObject:谁发出通知或者是一些参数-(void)addObserver:(id)...
  • 当app让系统发送一个消息的时候,消息首先以图表的形式显示在通知栏。要查看消息的详情需要进入通知抽屉(notificationdrawer)中查看。通知栏和通知抽屉(notificationdrawer)都是系统层面控制的,你可以随时查看,不...
  • 在用户未使用您的应用时,通知可向他们及时提供有关应用事件的简短信息。本页面向您介绍如何针对 Android 4.0(API 级别 14)及更高版本创建具备各种功能的通知。有关通知如何在 Android 上显示的简介,请参阅通知概览...
  • 事件通知(Event Notification )实践 问题描述 作为DBA,我们常常需要在SQL Server实例或数据库级别上跟踪正在发生的事件。有没有方法跟踪这些修改而不会太影响SQL Server性能呢? 解决方案 SQL Server 2005及其以后...
  • 观察者模式-通知详解

    2021-04-16 02:44:46
    在这种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。观察者模式的类图如下:屏幕...
  • 当需要提醒用户某些内容时,我的应用程序会创建一条通知,可能使用FLAG_INSISTENT来确保警报被听到。用户与我的应用程序交互以确认警报后,该应用程序将取消通知。用户可以通过下拉通知栏并点击我的通知(在这种情况...
  • 如果要更新startForeground()设置的通知,只需构建新通知,然后使用NotificationManager通知它。关键是使用相同的通知ID。我没有测试反复调用startForeground()来更新Notification的场景,但我认为使用...
  • Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面) Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到Eureka中并保持心跳 在Eureka之上我们架了一层Meta ...
  • 通过实现观察者模式来提供 Java 事件通知(Java event notification)似乎不是件什么难事儿,但这过程中也很容易就掉进一些陷阱。本文介绍了我自己在各种情形下,不小心制造的一些常见错误。Java 事件通知让我们从一个...
  • 近日,苹果iOS 15发布了全新的通知推送系统,并对通知系统进行大范围的优化,友盟+ 技术团队为开发者划了三个重点,让你轻松了解全新的通知推送系统。 第一、苹果为iOS15设计了4种通知分级 passive(被动型通知...
  • // 如果您的应用在一秒钟内发布了多个通知,则它们都会按预期显示,但每秒只有第一个通知发出声音 NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); ...
  • 转载于 青塔寒假将至,近期,为防止疫情蔓延扩散,部分高校紧急发布通知,取消元旦假期,调整寒假时间,进行进出校查验等。云南农业大学:取消元旦节放假,并将寒假提前根据疫情防控工作需要和周边疫...
  • java 发布订阅

    2021-02-12 13:46:17
    观察者设计模式定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。发布发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。抽象被...
  • Redis的事件通知

    2021-02-23 14:23:17
    Redis的事件通知通过发布/订阅模式来实现的。 事件通知分为两种: keyspace 和 kevevent。 keyspace称为键空间通知,格式为 __keyspace@DB__:KeyPattern ; keyevent称为键事件通知,格式为 __keyevent@DB__:...
  • H5的Notification特性 - Web的桌面通知功能 关键词:HTML5中的Web Notification桌面通知;基于Web Notification的前端桌面弹窗;H5的Notification特性;Web的桌面通知功能;H5 notification浏览器桌面通知;HTML5 ...
  • 5G消息+应急服务,不止于预警通知 今年7月,河南暴雨致灾,国家应急管理部紧急调派翼龙无人机应急通信平台,对通信中断的巩义米河镇实现了长时稳定的连续移动信号覆盖。就在无人机实现移动信号覆盖之前,中国移动...
  • 也就实现了邮件通知 说明:如果需要备份到远程主机,需要首先做好ssh密钥认证,scp要使用到 二 备份脚本 备份脚本用法:如果需要备份某个数据库,在脚本后面添加一条备份命令,像下面这样 backup_db 10.90.5.50 ...
  • 爬虫工作过程二、爬取南阳理工学院ACM题目网站三、爬取学校官网的信息通知四、总结五、参考链接 一、爬虫简介 1 .介绍 (1)网络爬虫英文名叫Web Crawler或Web Spider。它是一种自动浏览网页并采集所需要信息的程序...
  • 4. 事件如何 发出 5. 事件如何 被接收处理 6. 同步方式、异步方式的整合 7. 使用注解方式和不使用注解 8. 多事件监听器执行顺序的设置 9. 源码浅析 10. 一些跑题杂谈 ps:上面列的这些,在本文章里面没有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,650
精华内容 22,660
关键字:

发出通知还是发布通知