我一直在修修补补django-push-notifications
,遵循谷歌教程。
我目前的状态是一个似乎可以工作和注册并要求通知权限等的网络。我正在运行./manage.py runserver
并使用localhost:8000
. Service Worker 当前正在工作(如预期的那样?)。当我执行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>)
关于 Service Worker 中的 Javascript:
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 传输到通知的正确方法是什么?