2

我使用GCM API向服務人員發送推送通知。但在我的服務人員沒有屬性數據。因此,我得到event.data未定義。GCM pushEvent問題

self.addEventListener('push', function(event) { 
    console.log('Received a push message', event); 
    console.log('testing'); 

var data = event.data; 
var title = data.title; 
var body = data.body; 
var icon = '/images/image.png'; 
var tag = 'simple-push-demo-notification-tag'; 

event.waitUntil(function() { 
    self.registration.showNotification(title, { 
     body: body, 
     icon: icon, 
     tag: tag 
    }) 
    }); 
}); 

在下面的代碼中,我打電話給GCM api。

uri = 'https://android.googleapis.com/gcm/send' 
payload = json.dumps({ 
      'registration_ids': [ 
       User.objects.filter(id=user_id)[0].push_key  
       ], 
       'data': json.dumps({'title':'New notification','message': 'new message'}) 
      }) 
headers = { 
      'Content-Type': 'application/json', 
      'Authorization': 'key=<Project key>' 
     } 
requests.post(uri, data=payload, headers=headers) 

回答

1

這看起來像你已經採取了代碼的一部分,而不是所有的,因此,它不起作用。

如果你在簡單的推演示回購,有一個函數showNotification。

Here for Ref

function showNotification(title, body, icon, data) { 
    console.log('showNotification'); 
    var notificationOptions = { 
    body: body, 
    icon: icon ? icon : '/images/touch/chrome-touch-icon-192x192.png', 
    tag: 'simple-push-demo-notification', 
    data: data 
    }; 
    return self.registration.showNotification(title, notificationOptions); 
} 

有數據被定義在哪裏。

傳遞給它的數據不是來自事件(或者與事件對象有任何關係)。

爲了讓你的代碼的運行,只是把它簡化:

self.addEventListener('push', function(event) { 
    console.log('Received a push message', event); 
    console.log('testing'); 

    var title = 'My Title'; 
    var body = 'My notification body'; 
    var icon = '/images/image.png'; 
    var tag = 'simple-push-demo-notification-tag'; 

    event.waitUntil(function() { 
    self.registration.showNotification(title, { 
     body: body, 
     icon: icon, 
     tag: tag 
    }) 
    }); 
}); 
+1

感謝馬特澄清。順便說一下,我瞭解到數據存儲在博客中的文章中。 [鏈接](https://gauntface.com/blog/2014/12/15/push-notifications-service-worker)。根據我的理解,GCM api觸發服務工作者,然後發送推送通知。在你提到的鏈接(天氣數據示例)中,我如何給api提供參數(例如城市名稱)?它是通過GCM API給出的嗎?如果是的話,那麼我如何在服務人員中獲取該參數(儘管event.data?) – Ravikrn