我需要实现谷歌推送通知逻辑来修复频道。 我知道谷歌提供了标题字段X-Goog-Channel-Expiration
。修复通道的方法之一是添加 crone 表达式来监视过期date-time
并按事件调用处理程序。我对另一种方式解决方案很有趣...
我可以收到有关 Google 推送通知频道过期的消息吗? 哪个字段(值)让我知道频道已过期?
基于文档:
目前没有自动续订通知通道的方法。当通道即将过期时,必须通过调用
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帖子,您可以在请求监视方法时设置过期时间。这是代码:
$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
。
通道的过期时间(如果有)将作为 Unix 时间戳(以毫秒为单位)包含在监视方法返回的信息中。
希望这有帮助。