1

在 Chrome 推送通知 API 中,我想设置一个可自定义的通知。

我说的是服务人员。

这是示例服务工作者的代码。

self.addEventListener('push', function(event) { 
 var data = {};
  if (event.data) {
    data = event.data.json();
  }

    var title = data.message || "Something Has Happened";
  var body = 'We have received a push message !';  
  var icon = '/images/icon-192x192.png';  
  var tag = 'simple-push-demo-notification-tag';

console.log(event);



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

如何从 curl 消息中捕获数据,如下所示:

curl --header "Authorization: key=---personnal_key---" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send -d "{\"registration_ids\":[\"---ID---\"],\"title\":\"ok\"}"

我确实阅读了这个例子,但我看不到有人谈论 CURL 和 service worker 的结合。这甚至可能吗?

4

1 回答 1

1

在推送通知 API 的当前迭代中,您可能不会发送数据(请参阅:http ://updates.html5rocks.com/2015/03/push-notificatons-on-the-open-web )。目前,发送特定数据的唯一方法是将其存储在服务器上的某个数据库中,然后让 service-worker 从服务器获取它。但是,正如您所料,这可能会导致许多安全问题。一种选择是使用订阅进行验证。您可以从 service worker 获取订阅 ID,例如:

registration.pushManager.getSubscription().then(function(ps) {
  console.log(ps.subscriptionId)
})

然后,假设您如何设置服务器,您可以从 service worker 获取到您的服务器。它可能看起来像这样

fetch("/"+subscriptionId+"/getLatest").then(function(res) {
    res.json().then(function(data) {
          self.registration.showNotification(data.title, {
          body: data.body,
          icon: data.icon,
          tag: data.tag
        })
    })
})

但是,所有这些都需要您设置外部服务器。您不能通过 cURL 请求发送数据。

于 2015-05-07T13:08:54.727 回答