2017-05-04 219 views
0

我試圖將數據從服務器傳遞給服務人員,但數據對服務人員來說是空的。如何將數據從服務器傳遞給服務人員

這裏是我的代碼:

var webpush = require('web-push'); 
var message = sendData.message; 
var subscription_info = sendData.subscription_info; 




webpush.setVapidDetails(
    'mailto:xxx', 
    public_key, 
    private_key 
); 

webpush.setGCMAPIKey('xxx'); 
webpush.sendNotification(subscription_info, String(message)); 

這是執行console.log(消息):

{ text: 'message', 
    title: 'title', 
    icon_image: 'http://google.com/xxx.jpg', 
    link: 'www.google.com' } 

這是我的服務人員:

self.addEventListener('push', function(event) { 

    var title = event.data.title; 
    var options = { 
    body: event.data.text, 
    requireInteraction: true 
    }; 

    event.waitUntil(self.registration.showNotification(title, options)); 
}); 

但標題是不是被認可。我如何將數據從我的服務器傳遞給服務人員?

回答

1

在NodeJS端嘗試以下代碼。您缺少將JSON消息對象轉換爲緩衝區(二進制)。

var webpush = require('web-push'); 
var message = sendData.message; 
var subscription_info = sendData.subscription_info; 

webpush.setVapidDetails(
    'mailto:xxx', 
    <Vapid public key>, 
    <Vapid private key> 
); 

webpush.setGCMAPIKey('xxx'); 
message = new Buffer.from(JSON.stringify(message)); // missing code. 
webpush.sendNotification(subscription_info, String(message)); 

並在服務的作業者訂閱,您需要發送加密的公鑰與發送訂閱請求,並用它來從服務器發送推送通知。

const vapidPublicKey = '<Vapid public key>'; 
const convertedVapidKey = urlBase64ToUint8Array(vapidPublicKey); 

registration.pushManager.subscribe({ 
    userVisibleOnly: true, //Always show notification when received 
    applicationServerKey: convertedVapidKey 
}) 
.then(function (subscription) { 
    console.log(subscription) // use this subscription info on server side 
    console.info('Push notification subscribed.'); 
}) 
.catch(function (error) { 
    console.error('Push notification subscription error: ', error); 
}); 

PS。你的公鑰在服務器和客戶端應該是相同的。

相關問題