在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和服务工作者的结合。 这甚至可能吗?
答案 0 :(得分:1)
在推送通知api的当前迭代中,您可能无法发送数据(请参阅:http://updates.html5rocks.com/2015/03/push-notificatons-on-the-open-web)。现在,发送特定数据的唯一方法是将其存储在服务器上的某个数据库中,然后让服务工作者从服务器获取它。但是,正如您所料,这会导致许多安全问题。一种选择是使用订阅进行验证。您可以从服务工作者处获取订阅ID,如:
registration.pushManager.getSubscription().then(function(ps) {
console.log(ps.subscriptionId)
})
然后,假设您如何设置服务器,您可以从服务工作者到服务器进行提取。它可能看起来像这样
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请求发送数据。