0

Я занимаюсь ремеслом django-push-notifications, а затем google tutorial.Отсутствие связи данных между django-push-уведомлениями и Service Worker

Мой текущий статус - это сеть, которая, похоже, работает и регистрируется и запрашивает разрешения на уведомления и т. Д. Я бегу через ./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 в службе 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 к уведомлению?

+0

Вы проверили, что 'event.data' является' null'? Возможно, вызов '.json()' возвращает 'null'? Можете ли вы попробовать сделать 'event.date.text()' вместо этого? – Salva

+0

С консоли Chrome я вижу, что 'event.data' является' null', с самого начала. – MariusSiuram

+1

Я думаю, что что-то не так с реализацией, вы можете попробовать [django-webpush] (https://github.com/safwanrahman/django-webpush)? – Salva

ответ

1

Представляется, что реализация Джанго-PUSH-уведомлений делает не поддержка веб-нажимной шифрования, который необходим для того, чтобы отправить информацию от сервера к клиенту (в соответствии с google, а также mozilla).

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

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

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