Отсутствует обмен данными между 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
,