我想订阅/取消订阅服务工作人员,以通过iframe在网络上获取Chrome GCM通知.
我有一个工作原型,可以直接在浏览器上打开它,也可以从window.open javascript弹出.
但是从iframe加载它时会出现权限被拒绝错误.
这里可能有什么问题,是的,我的来源是http和iframe网址是https.为什么iframe无法订阅通知.
我计划整合针对Chrome的推送通知(推送API和通知API).
成功订阅后,Chrome服务器会向客户端发送一些特殊令牌("端点"),您可以使用该令牌识别客户端并发送任何推送消息.
来自doc:
端点应该保存在服务器上,供每个用户使用,因为您需要它们以后发送推送消息.
我有几个问题:
push push-notification google-cloud-messaging web-push push-api
我正在开发渐进式网络应用程序,我想为推送通知实施分析.
如何为推送通知添加分析,以便我能够跟踪和记录有多少人点击通知以及有多少人关闭该通知而不点击它.
push-notification service-worker web-push push-api progressive-web-apps
我已经在以下Google教程的帮助下实现了Web Push API:https: //developers.google.com/web/fundamentals/getting-started/codelabs/push-notifications/
本教程包括一种方法,该方法可用于将订阅发送到后端服务器:
function updateSubscriptionOnServer(subscription) {
// TODO: Send subscription to application server
...
}
Run Code Online (Sandbox Code Playgroud)
我想将订阅和用户标识符一起存储,因此我可以选择要发送通知的用户。现在我想知道我必须将订阅的哪一部分存储在数据库中。我的订阅对象如下所示:
{"endpoint":"https://fcm.googleapis.com/fcm/send/...","keys":{"p256dh":"...","auth":"..."}}
Run Code Online (Sandbox Code Playgroud)
我是否应该仅创建包含列(Id | User_Id | Subscription)的表“ Subscription”,其中包含整个JSON订阅?最佳做法是什么?JSON的有效性是否不受限制?如果取消订阅,我可以使用哪个字段来识别订阅?
我已经为我的网站成功实现了HTML5推送通知,用于新闻更新和用户事件。如果某个端点不再有效(无论出于何种原因,但通常是由于用户在其浏览器中撤消了权限),则当我尝试发送通知时,我会从推送服务器获得404或410状态。然后,从记录中删除该端点。
但是我想要更加主动一些,并检查端点是否有效,因此我的已订阅用户统计信息更为真实,并且仅在通知发送失败(可能需要几天或几周)时才更新。
我曾想发送无效的推送消息(例如,使用错误的VAPID密钥),但我无法保证服务器会在有效负载有效之前检查端点的有效性,因此即使可行,它也可能会中断在任何时候。
有什么更优雅的方式可以做到这一点吗?
我已经为网站构建了一项服务,可以轻松地将推送通知集成到他们的网站中,但是当前的Chrome实施还需要他们设置清单和服务工作者.
有没有办法只用一行Javascript来设置服务工作者和清单?
我在Chrome上使用网络推送通知,效果很好.但现在我想在我的通知中发送自定义消息.我可以让我的服务工作者呼叫我的网站获取内容,如https://simple-push-demo.appspot.com/所述,如果我希望每个收件人都能看到相同的消息,那么这很好.
有没有办法让收件人registration_id或message_idGCM返回?如果我可以获得其中任何一个并将它们包含在服务的回调中,我可以自定义响应.
此外,关于何时我们可以在GCM调用中包含有效负载的任何信息?
我是服务工作者和GAE的新手,我能够注册服务工作者,但无法订阅PushManager,但得到的订阅为null错误。查找以下代码以供参考。
serviceWorkerRegistration.pushManager.getSubscription()
.then(function(subscription) {
var pushButton = document.querySelector('.js-push-button');
pushButton.disabled = false;
if (!subscription) {
console.log('subscription error ');
return;
}
console.log('subscriptioned ');
// Keep your server in sync with the latest subscriptionId
sendSubscriptionToServer(subscription);
// Set your UI to show they have subscribed for
// push messages
pushButton.textContent = 'Disable Push Messages';
isPushEnabled = true;
})
.catch(function(err) {
console.warn('Error during getSubscription()', err);
});
});
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,那么内部的“订阅”值为“ null”,因此控制进入if块并简单地返回。
我目前正在开发一个网络应用程序,该应用程序将允许用户订阅推送通知。我们将把订阅存储在根据用户 ID 映射的数据库表中,当需要发送通知时,我们将查找用户的订阅并发送通知。
我一直在遵循本指南: https://developers.google.com/web/fundamentals/codelabs/push-notifications/
一切都很顺利,但有些事情就是感觉不太“正确”。
在每次页面加载时,服务工作线程都会被注册,然后检查它们是否已经订阅,然后即使它们是,它也会调用包含updateSubscriptionOnServer()以下注释的内容:
// TODO: Send subscription to application server
Run Code Online (Sandbox Code Playgroud)
这实际上意味着每个页面加载都将尝试将相同的订阅写回数据库。显然我们会在应用程序中处理这个问题,但这似乎并不理想。
对于 Web Push API,这是预期的方法吗?
非常感谢
我读过推送订阅可能会导致浏览器和推送服务之间不同步。
我见过两种补救措施,两者看起来都是非标准的:
我认为任何应用程序都应该处理这两点,在这些点上订阅可以被识别为不同步(以及任何/全部)。
问题: