Приходит сразу 3 push-уведомления, в чем может быть дело?

Использую дополнение к django - webpush-django, вызываю один раз следующую функцию:
def send_push(data):
    try:
        user_id = data['id']
        user = get_object_or_404(User, pk=user_id)
        payload = {
            'head': data['head'],
            'body': data['body'],
            'url': data['url'],
            }

        send_user_notification(user=user, payload=payload, ttl=1800)

        return JsonResponse(status=200, data={'message': 'Web push successful'})
    except TypeError:
        return JsonResponse(status=500, data={'message': 'An error occurred'})

А приходит целых 3 push-уведомления, если нужен sw.js, то вот:
self.addEventListener('push', function (event) {
    const eventInfo = event.data.text();
    const data = JSON.parse(eventInfo);
    const head = data.head || 'New Notification ';
    const body = data.body || 'This is default content. Your notification didn\'t have one ';
    const url = data.url || '/';

    event.waitUntil(
        self.registration.showNotification(head, {
            body: body,
            icon: '/static/img/tf.jpg',
            url: url,
        })
    );
});

В чем может быть причина? (на других устройствах не могу пока тестировать, т.к. нет пока ssl сертефиката)
  • Вопрос задан
  • 69 просмотров
Решения вопроса 1
@noremorse_ru
Ну во первых, try except тут не особо уместен. get_object_or_404 скорее всего вернет не json response и так же тут не уместен. Почему нельзя в payload сразу передать data? А send_user_notification уже разребет данные и вернет результат, на основе которого сформируется ответ.

3 уведомления могу приходить по 2м причинам: ответ от сервера приходит 3 раза, либо, событие на фронте срабатывает 3 раза. Посмотри в отладчике браузера network, расставь print() во вьюхе, посмотри где у тебя там зацикливание происходит, проверь сколько раз срабатывает событие 'push' на фронте.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы