Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 在哪里可以更改FCM web通知单击操作url?_Laravel_Firebase_Web Notifications_Laravel Notification - Fatal编程技术网

Laravel 在哪里可以更改FCM web通知单击操作url?

Laravel 在哪里可以更改FCM web通知单击操作url?,laravel,firebase,web-notifications,laravel-notification,Laravel,Firebase,Web Notifications,Laravel Notification,我试图定义当用户单击通知时打开的url,但它继续转到url(“/”) 只有我发送带有payload.data的新url,但我不知道在客户端的何处可以定义此路由,因此当用户单击通知时它会打开 我使用laravel通知频道/fcm /** * @param Model $notifiable * @return FcmMessage */ final public function toFcm(Model $notifiable): FcmMessage { return FcmMes

我试图定义当用户单击通知时打开的url,但它继续转到url(“/”) 只有我发送带有payload.data的新url,但我不知道在客户端的何处可以定义此路由,因此当用户单击通知时它会打开

我使用laravel通知频道/fcm

/**
 * @param Model $notifiable
 * @return FcmMessage
 */
final public function toFcm(Model $notifiable): FcmMessage
{
    return FcmMessage::create()
        ->setData(array_merge(['type' => $this->fcmNotification->type],$this->fcmNotification->data)
        )->setNotification(\NotificationChannels\Fcm\Resources\Notification::create()
            ->setTitle($this->fcmNotification->title)
            ->setBody($this->fcmNotification->body)
            ->setImage($this->fcmNotification->image)

        ) ->setAndroid(
            AndroidConfig::create()
                ->setFcmOptions(AndroidFcmOptions::create()->setAnalyticsLabel('analytics'))
                ->setNotification(AndroidNotification::create()->setColor('#0A0A0A'))
        )->setApns(
            ApnsConfig::create()->setFcmOptions(ApnsFcmOptions::create()->setAnalyticsLabel('analytics_ios')));
}
#####################firebase-messaging-sw.js

进口文件('https://www.gstatic.com/firebasejs/7.23.0/firebase-app.js'); 进口文件('https://www.gstatic.com/firebasejs/7.23.0/firebase-messaging.js');

/*

#####################主布局

 $(document).ready(function () {
        const firebaseConfig = {
            apiKey: "xxxxxxxxxxxxx",
            authDomain: "x",xxxxxxxxxxxxxxxxxxxx
            projectId: "xxxxxxxxxxxxxxxxxxxx",
            storageBucket: "xxxxxxxxxxxxxxxxxxxx",
            messagingSenderId: "xxxxxxxxxxxxxxxxxxxx",
            appId: "xxxxxxxxxxxxxxxxxxxx",
            measurementId: "xxxxxxxxxxxxxxxxxxxx"
        };
        firebase.initializeApp(firebaseConfig);

        const messaging = firebase.messaging();

        function initFirebaseMessagingRegistration() {
            messaging
                .requestPermission()
                .then(function () {
                    return messaging.getToken()
                })
                .then(function (token) {
                    // console.log(token);

                    $.ajaxSetup({
                        headers: {
                            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                        }
                    });
                    $.ajax({
                        url: '{{ theme_route('save.fcm.token')}}',
                        type: 'POST',
                        data: {
                            token: token
                        },
                        dataType: 'JSON',
                        success: function (response) {
                            console.log('Token saved successfully.');
                        },
                        error: function (err) {
                            console.log('User Token Error' + err);
                        },
                    });

                }).catch(function (err) {
                console.log('User Chat Token Error' + err);
            });
        } initFirebaseMessagingRegistration();

        messaging.onMessage(function (payload) {
            const noteTitle = payload.notification.title;

            console.log(payload.data);

             const noteOptions = {
                body: payload.notification.body,
                icon:"{{website()->logo}}" ,
                image: payload.notification.image,
              };
            new Notification(noteTitle, noteOptions);

            self.addEventListener('notificationclick', function(event) {
                event.notification.close();
                console.log('test click event');
                event.waitUntil(self.clients.openWindow('#'));
            });
        });
    });```


我想我应该查找“PushEvent”:我使用这两个侦听器来处理用户在FCM web推送通知上的单击,在您的服务人员firebase-messaging-sw.js中放置以下内容 两个侦听器(当然会根据您的数据进行更改):

 $(document).ready(function () {
        const firebaseConfig = {
            apiKey: "xxxxxxxxxxxxx",
            authDomain: "x",xxxxxxxxxxxxxxxxxxxx
            projectId: "xxxxxxxxxxxxxxxxxxxx",
            storageBucket: "xxxxxxxxxxxxxxxxxxxx",
            messagingSenderId: "xxxxxxxxxxxxxxxxxxxx",
            appId: "xxxxxxxxxxxxxxxxxxxx",
            measurementId: "xxxxxxxxxxxxxxxxxxxx"
        };
        firebase.initializeApp(firebaseConfig);

        const messaging = firebase.messaging();

        function initFirebaseMessagingRegistration() {
            messaging
                .requestPermission()
                .then(function () {
                    return messaging.getToken()
                })
                .then(function (token) {
                    // console.log(token);

                    $.ajaxSetup({
                        headers: {
                            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                        }
                    });
                    $.ajax({
                        url: '{{ theme_route('save.fcm.token')}}',
                        type: 'POST',
                        data: {
                            token: token
                        },
                        dataType: 'JSON',
                        success: function (response) {
                            console.log('Token saved successfully.');
                        },
                        error: function (err) {
                            console.log('User Token Error' + err);
                        },
                    });

                }).catch(function (err) {
                console.log('User Chat Token Error' + err);
            });
        } initFirebaseMessagingRegistration();

        messaging.onMessage(function (payload) {
            const noteTitle = payload.notification.title;

            console.log(payload.data);

             const noteOptions = {
                body: payload.notification.body,
                icon:"{{website()->logo}}" ,
                image: payload.notification.image,
              };
            new Notification(noteTitle, noteOptions);

            self.addEventListener('notificationclick', function(event) {
                event.notification.close();
                console.log('test click event');
                event.waitUntil(self.clients.openWindow('#'));
            });
        });
    });```

self.addEventListener("push", (event) => {
    console.log(event);
    let response = event.data && event.data.text();
    let title = JSON.parse(response).notification.title;
    let body = JSON.parse(response).notification.body;
    let icon = JSON.parse(response).notification.image;
    let image = JSON.parse(response).notification.image;

    event.waitUntil(
        self.registration.showNotification(title, { body, icon, image, data: { url: JSON.parse(response).data.url } })
    )
});

self.addEventListener('notificationclick', function(event) {
    event.notification.close();
    event.waitUntil(
        clients.openWindow(event.notification.data.url)
    );
});