fix(push notification): menghindari duplikasi subscription
This commit is contained in:
parent
5816d9032a
commit
163a90b857
@ -253,14 +253,25 @@ protected function loadStats()
|
||||
#[On('notification:subscribe')]
|
||||
public function notificationSubscribe(string $subscription)
|
||||
{
|
||||
$subscription = json_decode($subscription, true);
|
||||
|
||||
$isExist = PushNotification::where('user_id', auth()->id())
|
||||
->whereJsonContains('subscriptions->keys->auth', $subscription['keys']['auth'])
|
||||
->first();
|
||||
|
||||
if ($isExist) {
|
||||
return;
|
||||
}
|
||||
|
||||
$userId = auth()->id();
|
||||
|
||||
$encodedSubscription = json_encode($subscription);
|
||||
PushNotification::updateOrCreate(
|
||||
[
|
||||
'user_id' => $userId,
|
||||
'subscriptions' => $subscription,
|
||||
'subscriptions' => $encodedSubscription,
|
||||
],
|
||||
['subscriptions' => $subscription]
|
||||
['subscriptions' => $encodedSubscription],
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -24,24 +24,38 @@
|
||||
|
||||
@fluxScripts
|
||||
<script>
|
||||
let isSubscribed = false;
|
||||
|
||||
document.addEventListener('livewire:navigated', () => {
|
||||
Notification.requestPermission().then((permission) => {
|
||||
if (permission === 'granted') {
|
||||
navigator.serviceWorker.ready.then((sw) => {
|
||||
sw.pushManager.subscribe({
|
||||
userVisibleOnly: true,
|
||||
applicationServerKey: '{{ config('services.vapid.public_key') }}',
|
||||
}).then((subscription) => {
|
||||
const json = JSON.stringify(subscription)
|
||||
Livewire.dispatch('notification:subscribe', {
|
||||
subscription: json
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
if (isSubscribed) return;
|
||||
|
||||
if (Notification.permission === 'granted') {
|
||||
subscribePush();
|
||||
isSubscribed = true;
|
||||
} else if (Notification.permission !== 'denied') {
|
||||
Notification.requestPermission().then((permission) => {
|
||||
if (permission === 'granted' && !isSubscribed) {
|
||||
subscribePush();
|
||||
isSubscribed = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
navigator.serviceWorker.register('{{ URL::asset('service-worker.js') }}');
|
||||
})
|
||||
});
|
||||
|
||||
function subscribePush() {
|
||||
navigator.serviceWorker.ready.then((sw) => {
|
||||
sw.pushManager.subscribe({
|
||||
userVisibleOnly: true,
|
||||
applicationServerKey: '{{ config('services.vapid.public_key') }}',
|
||||
}).then((subscription) => {
|
||||
Livewire.dispatch('notification:subscribe', {
|
||||
subscription: JSON.stringify(subscription)
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user