Notification 浏览器桌面通知API使用理解及心得

Notification 浏览器桌面通知API使用理解及心得

之前的项目中用到notification的桌面通知api,这里写一下自己的使用理解,虽然不是很麻烦,这里记录一下以防下次再去找。

notification是通过向浏览器授权,向桌面推送通知的api,因为类似于一些重要消息,可能会被用户忽略,发起桌面通知更为明显,在这种业务场景下,我们就可以使用notification

Notification介绍

首先再发起Notification前首先就是要先向用户授权,授权方法是Notification.permission

  Notification.requestPermission(function (permission) {
    //当用户选择了拒绝或同意的时候执行回调
      if (permission === "granted") { //判断是否授权成功
        var notification = new Notification("ha ha");
      }
    });

授权的状态分为四种:

  • granted : 用户允许了通知
  • denied : 用户拒绝了通知 (这种情况下不应该再弹出来,不过也可以变态一点每次都弹出来让他授权)
  • default: 用户还没有选择过

需要注意的是:这个授权必须再用户点击过该网页或者操作过该网页的时候,所以一般情况下可以写个监听事件只要点击过这个网页就发起授权

经过允许之后就可以发起创建Notification实例发送通知了,

let notification = new Notification(title, options) //title就是通知的标题,options是通知的内容设置

options中的有很多选项,这里我只写下一些常用的,其他的如果有需求可以直接看文档

  • body:通知的主体内容
  • tag: 相当于通知的id,如果你不写,每条通知都是独立了,如果有需要重复覆盖的通知,只要使用相同的tag就行了
  • icon: 显示时通知的图片
  • requireInteraction: boolean类型控制是否不自动关闭,只有主动关闭或点击的时候才会关闭,true时不自动关闭
  • url:显示网站的地址

最后notification还有提供了一些事件

  • Notification.onclick

    处理 click 事件的处理。每当用户点击通知时被触发。

  • Notification.onshow

    处理 show 事件的处理。当通知显示的时候被触发。

  • Notification.onerror

    处理 error 事件的处理。每当通知遇到错误时被触发。

  • Notification.onclose

    处理 close 事件的处理。当用户关闭通知时被触发。

这些事件非常有用,可以用来触发用户点击时跳转到某个功能模块,还有在方法内没有办法使用外部的this

下面是一个官方的使用实例的:

function notifyMe() {
  // 先检查浏览器是否支持
  if (!("Notification" in window)) {
    alert("This browser does not support desktop notification");
  }

  // 检查用户是否同意接受通知
  else if (Notification.permission === "granted") {
    // If it's okay let's create a notification
     var notification = new Notification(('你好',{
                                    icon:'http://xxxxx/haha.jpg',
                                    tag:'info',
                                    body:'你有xxx条新消息',
                                    url:'http://www.xxx.com',
                                    requireInteraction:true
                                }));
  }

  // 否则我们需要向用户获取权限
  else if (Notification.permission !== 'denied') {
    Notification.requestPermission(function (permission) {
      // 如果用户同意,就可以向他们发送通知
      if (permission === "granted") {
        var notification = new Notification(('你好',{
                                    icon:'http://xxxxx/haha.jpg',
                                    tag:'info',
                                    body:'你有xxx条新消息',
                                    url:'http://www.xxx.com',
                                    requireInteraction:true
                                }));
      }
    });
  }
}

不过notification这种功能并不能做到离线通知,而现在很多的网站都做到了离线通知的情况,可以不打开网页就直接进行通知,这样的功能更为实用,也可以更多的应用场景 ,要实现这样的功能要用到Service worker,PushManager 这两个技术,这个在之后我会分享下

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android中,可以使用TextToSpeech(TTS)引擎将文字转换为语音。要在Notification发送通知使用TTS读出通知内容,可以使用以下步骤: 1. 在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> ``` 2. 在build.gradle文件中添加以下依赖项: ```groovy dependencies { implementation 'com.android.support:support-v4:28.0.0' implementation 'com.google.android.gms:play-services:12.0.1' } ``` 3. 在Notification发送通知时,调用TextToSpeech引擎将通知内容转换为语音,例如: ```java NotificationCompat.Builder builder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!") .setPriority(NotificationCompat.PRIORITY_HIGH); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(notificationId, builder.build()); TextToSpeech tts = new TextToSpeech(this, new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { if (status == TextToSpeech.SUCCESS) { tts.setLanguage(Locale.getDefault()); tts.speak("Hello World!", TextToSpeech.QUEUE_ADD, null); } } }); ``` 这将发送一个通知并将“Hello World!”转换为语音。请注意,上述代码只是示例,您需要根据您的需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值