【发布时间】:2016-06-14 08:22:24
【问题描述】:
通过 GCM 在 Chrome 中推送通知让我发疯。
我已经启动并运行了一切。我使用我的 python 服务器将推送服务到 GCM。服务人员很好地显示推送通知。
据我所知,推送事件没有传递任何数据。听起来它即将推出,但尚未推出。
所以就在推送通知显示之前,我调用我的服务器来获取推送通知的额外数据。但我没有关于推送通知的信息发送到我的服务器以匹配并返回相关数据。
我能想到的与通知和用户数据相匹配的一切都纯属推测。我能找到的最接近的东西是 PushEvent{} 上的时间戳对象,它与每个用户的 GCM 调用的成功返回大致匹配。
那么其他人如何处理自定义有效负载数据以显示 Chrome 推送通知?
PushEvent{} 似乎没有任何关联的 ID。我知道推送的用户是因为我之前在注册时存储了该信息。
但是一旦我收到推送,我就不知道推送是为了什么。
我想避免:
- 尝试根据时间戳进行匹配(因为不能保证通知显示是即时的)。
- 尝试为用户提取“最新”数据,因为在我的情况下,可能会同时针对不同的数据位发送多个通知。
Whatsapp 和 Facebook 等其他网站如何通过推送通知将自定义有效负载数据与看似无效的事件数据联系起来?
你做得怎么样?有什么建议?
这是我的接收器代码的样子:
self.addEventListener('push', function(event) {
event.waitUntil(
fetch("https://oapi.co/o?f=getExtraPushData&uid=" + self.userID + "&t=" + self.userToken).then(function(response) {
if (response.status !== 200) {
console.log('Looks like there was a problem. Status Code: ' + response.status);
throw new Error();
}
return response.json().then(function(data) {
if (data.error || !data.notification) {
console.error('The API returned an error.', data.error);
throw new Error();
}
var title = data.notification.title;
var message = data.notification.message;
var icon = data.notification.icon;
return self.registration.showNotification(title, {
body: message,
icon: icon,
});
});
}).catch(function(err) {
console.error('Unable to retrieve data', err);
var title = 'An error occurred';
var message = 'We were unable to get the information for this push message';
var icon = "https://oapi.co/occurrences_secure/img/stepNotify_1.png";
var notificationTag = 'notification-error';
return self.registration.showNotification(title, {
body: message,
icon: icon,
tag: notificationTag
});
})
);
});
【问题讨论】:
标签: javascript google-chrome push-notification google-cloud-messaging