Отсутствует обмен данными между django-push-уведомлениями и Service Worker.

Я возился с django-push-notifications, следовал учебнику Google.

Мой текущий статус - это веб, который, кажется, работает и регистрируется, запрашивает разрешения на уведомления и так далее. Я пробегаю ./manage.py runserver и используя localhost:8000, Сервисный работник в настоящее время работает (как и ожидалось?). Когда я выполняю device.send_message("Hello world") (сквозь push_notification модуль) я вижу, что я получаю event в приложении Javascript. В настоящее время тестирование в Chrome, я планирую адаптировать его для Android.

Что бы я ни пытался, event.data всегда Null, Я пытался отправить обычные сообщения, структурированные сообщения и аргумент ключевого слова extra для send_message метод без удачи.

Я предполагаю, что мне чего-то не хватает?

Отрывки того, что я бегу (неполный, но не уверен, что имеет значение)

# Trigger push notifications
device = GCMDevice.objects.all()
device.send_message(<some data here>, extra=<some data here>)

А что касается Javascript в Service Worker:

self.addEventListener('push', function(event) {
    console.log('Push message', event);

    var data = {};
    if (event.data) {
        data = event.data.json();
    }
    console.log('Push data', data);
    ...

Что касается настройки и регистрации:

navigator.serviceWorker.register('/sw.js').then(function () {
    return navigator.serviceWorker.ready;
}).then(function (serviceWorkerRegistration) {
    return serviceWorkerRegistration.pushManager.subscribe({userVisibleOnly: true})
}).then(function (pushSubscription) {
    // Last part of the URL is indeed the Registration ID for the GCM
    var reg_id = pushSubscription.endpoint.split('/').pop();
    console.log('Subscribed! Endpoint:', reg_id);

    // Send the registration_id, which is the only required field
    return $http({
        method: "POST",
        url: "{% url 'api:gcmdevice-list' %}",
        data: {registration_id: reg_id}
    });
}).catch(function (error) {
    console.log('Service Worker Error:', error);
});

Как правильно передать информацию из Django в уведомление?

1 ответ

Похоже, что реализация django-push-уведомлений не поддерживает веб-push-шифрование, которое требуется для отправки информации с сервера на клиент (по данным Google, а также Mozilla).

Это означает, что либо я перехожу на другую реализацию (например, django-webpush как предложил @Salva), или я добавляю поддержку для этого в django-push-notifications,

Я честно думаю, что это проблема, но я не совсем уверен.

Изменить: Третий вариант, свернуть мой, используя pywebpush, Учитывая, что у меня уже был материал JS, это было не так сложно. Если бы мне пришлось начать все сначала, возможно, я бы посмотрел поближе к django-webpush,

Другие вопросы по тегам