我正在尝试将服务器中的数据发送到FCM,以便可以在网页的特定部分显示它。例如,就像一个股票应用程序,其中的数据会不断更新。我试图以同样的方式实现。到目前为止,我已经将其配置为从FCM接收数据,并且正在接收它。但是问题在于它显示了喜欢的通知。我的同事正在同一个工作上,可以选择仅将数据发送到android应用并隐藏要显示的通知。同样,我想在网络上听到它,但无法这样做。

(function () {
    // Initialize Firebase
    var config = {
        apiKey: "xxxxxxxxxxxxxx",
        authDomain: "test-xxxxxxxx.xxxxxxxx.com",
        databaseURL: "https://xxxxxx-xxxxxxxx.firebaseio.com",
        projectId: "xxx-469e9",
        storageBucket: "",
        messagingSenderId: "xxxxxx"
    };
    firebase.initializeApp(config);
    // Retrieve Firebase Messaging object.
    const messaging = firebase.messaging();
    messaging.requestPermission()
    .then(function() {
        console.log('Notification permission granted.');
        return messaging.getToken();
    })

    .then(function(token) {
        console.log(token);
    })
    .catch(function(err) {
        console.log('Unable to get permission to notify.', err);
    })

    messaging.onMessage(function(payload) {
        console.log("Message received. ", payload);
        // ...
    });

}());


在firebase-messaging-sw.js上

importScripts('https://www.gstatic.com/firebasejs/4.3.1/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/4.3.1/firebase-messaging.js');
// Initialize Firebase
var config = {
    apiKey: "xxxxxx",
    authDomain: "xxxx-xxxxxxxxxx.com",
    databaseURL: "https://xxx-xxx.firebaseio.com",
    projectId: "xxxx-xxxxxxxxxx",
    storageBucket: "",
    messagingSenderId: "xxxxxxxxxxxx"
};
firebase.initializeApp(config);

const messaging = firebase.messaging();

最佳答案

黑客将在...之后立即关闭通知...

messaging.setBackgroundMessageHandler(function (payload) {
    var realPush = true;

    if(realPush)
    {
        const notificationOptions = {
            body: "It is a REAL push",
            data:"true"
        };

        //We display the notification
        return  self.registration.showNotification(title, notificationOptions);
    }else
    {
        const notificationOptions = {
            body: "It is a SILENT push",
            data:"false"
        };

        //We display a fake notification
        return self.registration.showNotification('To delete',notificationOptions).then(function () {
            self.registration.getNotifications().then(notifications => {
                console.log(notifications);
                for (var i =0;i<notifications.length;i++)
                {
                    if(notifications[i].data != "true")
                    {
                        //then we destroy the fake notification immedialtely !
                        notifications[i].close();
                    }
                }
            })
        });

    }

});


当然,realPush参数由您自己管理

09-30 23:38
查看更多