Google推送通知频道已过期

时间:2017-03-20 06:17:04

标签: push-notification google-api google-calendar-api google-api-client

我需要实施Google推送通知逻辑来修复频道。 我知道Google提供了标题字段X-Goog-Channel-Expiration。修复通道的方法之一是添加crone表达式以监视到期date-time并按事件调用处理程序。我以另一种解决方式感兴趣...

我可以收到有关Google推送通知频道到期的消息吗? 哪个字段(值)让我知道频道已过期?

1 个答案:

答案 0 :(得分:1)

基于documentation

  

目前没有自动更新通知渠道的方法。当频道接近其到期时,您必须通过调用 watch 方法创建一个新频道。与往常一样,您必须为新频道的 id 属性使用唯一值。请注意,当同一资源的两个通知通道处于活动状态时,可能存在“重叠”时间段。

X-Goog-Channel-Expiration 可以在通知消息的标题部分找到(有时会出现)。

POST https://sampleurl.com/notifications // Your receiving URL.
Content-Type: application/json; utf-8
Content-Length: 0
X-Goog-Channel-ID: 4ba78bf0-6a47-11e2-bcfd-0800200c9a66
X-Goog-Channel-Token: 398348u3tu83ut8uu38
X-Goog-Channel-Expiration: Tue, 19 Nov 2013 01:13:52 GMT
X-Goog-Resource-ID:  ret08u3rv24htgh289g
X-Goog-Resource-URI: https://www.googleapis.com/calendar/v3/calendars/my_calendar@gmail.com/events
X-Goog-Resource-State:  exists
X-Goog-Message-Number: 10

我找到了一个相关的SO post,您可以在请求监视方法时设置过期时间。这是代码:

 $service = new Google_Service_Calendar($client);
 $channel =  new Google_Service_Calendar_Channel($service);
 $channel->setId($uniqueID);
 $channel->setType('web_hook');
 $channel->setAddress('https://sample.net/notificationCallBack.php');

 $timetoExpire = time()+3600000;
 $optParams = array('ttl' => $timetoExpire);
 $channel->setParams($optParams);

 $watchEvent = $service->events->watch($calendarID, $channel);

现在您已设置到期日期,现在检查标题部分并查看 X-Goog-Channel-Expiration

  

通道的到期时间(如果有的话)包含在watch方法返回的信息中的Unix时间戳(以ms为单位)。

希望这有帮助。