【问题标题】:Google push notifications channel is expiredGoogle 推送通知频道已过期
【发布时间】:2017-03-21 07:52:20
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案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

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-12-12
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多