Web Notifications不生效

代码:

 function sendNotificationForChatTimeoutViaWeb(title,body,tag) {
        // 如果用户同意就创建一个通知
        if (window.Notification && Notification.permission === "granted") {
            sendNotification(title,body,tag);
        }
        // 如果用户没有选择是否显示通知
        // 注:因为在 Chrome 中我们无法确定 permission 属性是否有值,因此
        // 检查该属性的值是否是 "default" 是不安全的。
        else if (window.Notification && Notification.permission !== "denied") {
            Notification.requestPermission(function (status) {
                if (Notification.permission !== status) {
                    Notification.permission = status;
                }
                // 如果用户同意了
                if (status === "granted") {
                    sendNotification(title,body,tag);
                }
            });
        }
    }
    /*提醒*/
    function sendNotification(title,body,tag ,icon="") {
        let n = new Notification(title, {
            body: body,
           // tag: tag,
            icon: icon
        })
        n.onshow = function () {
            console.log("bg onshow");
        }
        n.onclose = function () {
            console.log("bg onclose");
        }
        n.onerror = function () {
            console.log("bg onerror");
        }

        // n.onshow = function () {
        //     setTimeout(n.close.bind(n), 5000);
        // }
    }

只有通过Web服务访问该页面时才会生效,如果直接双击打开本地文件,是没有任何效果的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
如果 `onDidReceiveNotificationResponse` 方法没有被调用,那么可能是由于以下原因之一: 1. 没有在初始化时设置 `onDidReceiveNotificationResponse` 回调。请确保在 `FlutterLocalNotificationsPlugin` 的初始化方法中设置了此回调,例如: ```dart FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); Future<void> _initNotifications() async { var initializationSettingsAndroid = AndroidInitializationSettings('app_icon'); var initializationSettingsIOS = IOSInitializationSettings(); var initializationSettings = InitializationSettings( android: initializationSettingsAndroid, iOS: initializationSettingsIOS); await flutterLocalNotificationsPlugin.initialize(initializationSettings, onSelectNotification: onSelectNotification); } Future<void> onSelectNotification(String payload) async { // 在此处处理通知点击事件 } // 设置 onDidReceiveNotificationResponse 回调方法 flutterLocalNotificationsPlugin.onDidReceiveNotificationResponse.listen((event) async { await onSelectNotification(event.payload); }); ``` 2. 在 Android 平台上,需要在 `AndroidManifest.xml` 文件中注册 `NotificationReceiver`,并将其与 `FlutterLocalNotificationsPlugin` 相关联。请确保在 `AndroidManifest.xml` 文件中添加以下代码: ```xml <application ...> <receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" /> <receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"></action> </intent-filter> </receiver> </application> ``` 3. 在 iOS 平台上,需要在 `AppDelegate.swift` 文件中添加以下代码: ```swift import UIKit import Flutter import UserNotifications @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate, UNUserNotificationCenterDelegate { override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // 在此处初始化 FlutterLocalNotificationsPlugin // 设置 UNUserNotificationCenterDelegate UNUserNotificationCenter.current().delegate = self return super.application(application, didFinishLaunchingWithOptions: launchOptions) } // 实现 didReceive response 方法 func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { let flutterChannel = FlutterMethodChannel(name: "com.example.app/notification", binaryMessenger: self.window.rootViewController as! FlutterViewController) flutterChannel.invokeMethod("onSelectNotification", arguments: response.notification.request.content.userInfo) completionHandler() } } ``` 上述代码中,我们通过实现 `UNUserNotificationCenterDelegate` 协议的 `didReceive response` 方法来处理通知的点击事件,并且调用了 `FlutterMethodChannel` 方法来将通知的 payload 发送给 Flutter 端的 `onSelectNotification` 方法。 希望这些信息能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jwt_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值