Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何链接GCM chrome推送通知和有效负载数据?_Javascript_Google Chrome_Push Notification_Google Cloud Messaging - Fatal编程技术网

Javascript 如何链接GCM chrome推送通知和有效负载数据?

Javascript 如何链接GCM chrome推送通知和有效负载数据?,javascript,google-chrome,push-notification,google-cloud-messaging,Javascript,Google Chrome,Push Notification,Google Cloud Messaging,通过GCM在Chrome上推送通知让我抓狂 我把一切都准备好了。我使用python服务器向GCM提供推送服务。服务人员将显示推送通知 据我所知,推送事件没有传递任何数据。听起来好像很快就要来了,但还没有 所以就在推送通知显示之前,我打电话给我的服务器以获取推送通知的额外数据。但是我没有关于推送通知的信息可以发送到我的服务器以匹配并返回相关数据 我所能想到的与通知和用户数据相匹配的一切都是纯粹的推测。我能找到的最接近的东西是PushEvent{}上的timestamp对象,它大致匹配每个用户成功返

通过GCM在Chrome上推送通知让我抓狂

我把一切都准备好了。我使用python服务器向GCM提供推送服务。服务人员将显示推送通知

据我所知,推送事件没有传递任何数据。听起来好像很快就要来了,但还没有

所以就在推送通知显示之前,我打电话给我的服务器以获取推送通知的额外数据。但是我没有关于推送通知的信息可以发送到我的服务器以匹配并返回相关数据

我所能想到的与通知和用户数据相匹配的一切都是纯粹的推测。我能找到的最接近的东西是PushEvent{}上的timestamp对象,它大致匹配每个用户成功返回的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  
        });  
    })  
);  
});

我理解你的问题,当我想使用chrome通知时,我一直在处理同样的问题。您可以使用indexedDB在webServices中保存ObjectStore和检索数据

IndexedDB可供Web服务访问。我使用它来存储用户信息,当用户收到推送通知时,我传递存储的访问密钥以识别用户并传递相关信息。 以下是matt gaunt的教程,其中指出索引数据库可供web服务访问:

这里有一个很好的indexedDB教程:

我理解你的问题,当我想使用chrome通知时,我一直在处理同样的问题。您可以使用indexedDB在webServices中保存ObjectStore和检索数据

IndexedDB可供Web服务访问。我使用它来存储用户信息,当用户收到推送通知时,我传递存储的访问密钥以识别用户并传递相关信息。 以下是matt gaunt的教程,其中指出索引数据库可供web服务访问:

这里有一个很好的indexedDB教程:

假设你仍在过去。也就是说,只向您的浏览器发送一个推式触发器,而不发送任何有效负载—现在是时候继续前进了。现在可以在推送事件中发送有效负载。因为您似乎熟悉GCM,所以尽管现在有独立于浏览器供应商的Web推送协议,但也可以使用它

简单地说,为了实现这一点,您需要使用在服务器中找到的规范对有效负载进行加密

据我所知,谷歌chrome有一个
节点
,还有
PHP
实现。 你可以去看看这本书

在浏览器中,您现在需要向订阅对象提供端点顶部的
p256dh
auth


您可以查看更多详细信息。

假设您仍在过去。也就是说,只向您的浏览器发送一个推式触发器,而不发送任何有效负载—现在是时候继续前进了。现在可以在推送事件中发送有效负载。因为您似乎熟悉GCM,所以尽管现在有独立于浏览器供应商的Web推送协议,但也可以使用它

简单地说,为了实现这一点,您需要使用在服务器中找到的规范对有效负载进行加密

据我所知,谷歌chrome有一个
节点
,还有
PHP
实现。 你可以去看看这本书

在浏览器中,您现在需要向订阅对象提供端点顶部的
p256dh
auth


您可以查看更多详细信息。

谢谢您的回复。不幸的是,这并不能解决我的问题。假设一个用户可能有5个推送通知,所有这些通知都同时推送,并且包含特定用户的5条唯一消息。当服务人员收到每次推送时,我需要查询我的服务器以检索每次推送的详细信息。但是,由于这5次推送中的每一次都不包含任何唯一的信息,因此我不确定如何将一次推送与服务器上的其他详细信息链接起来。(除非它是以一种非常黑客的方式完成的,在服务器上存储未读通知列表,并提取最旧的堆栈——例如)我认为您只需要稍微小心一点。在我们的案例中,我们将同时通知的数量限制为最晚3次。当用户收到此通知时,他会使用其uniqe用户id和我们保存在indexedDB中的一些其他信息调用我们的服务器。利用这些信息,我们识别用户,并检查数据库中该用户应接收并回复的消息。然后web服务显示来自我们给出的响应的通知。因此,在推送过程中,您不需要uniqe信息,而是可以在工作人员接收推送notfYeah时从服务器检索它们。我们现在的情况非常类似-只是看起来非常草率。在我们的服务器上推送时生成并随推送一起发送的一个简单的唯一ID足以将两者完美地链接起来。似乎是一个安全和简单的解决方案,应该从一开始就包括在内。太好了。。。可能在下一版本中,服务人员将能够