Google日历v3推送通知到期

时间:2014-01-24 03:36:39

标签: google-calendar-api google-oauth google-apps-marketplace

我正在使用Google日历推送通知。一切运作良好,我注册我的频道没有问题。对日历的更改会产生预期的通知。

然而,问题是在一小时左右后通知会过期。

在阅读文档时,我无法确定为什么会有一个到期,因为我没有指定一个。

当频道被注册时,响应实际上表示从我注册频道到1周的有效期 - 例如星期五,2014年1月31日03:23:59 GMT。

然而,这并不是我所经历的。

有人知道这里规定的行为是什么。

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

此问题现已修复 - 请参阅以下内容:

Issue Details

答案 1 :(得分:1)

默认情况下谷歌将频道到期时间保持一周, 如何使用 ttl 变量将通道到期时间设置为一个月

  EX: body = {
          "id": uuid,
          "type": "web_hook" ,
          "token": "something_unique",
          "address": "web hook url",
          "params": {
                     "ttl" : 864000
                     }
          }
        calendar_service = get_calendar_service(user_email)
        resource = calendar_service.events().watch(calendarId='primary', body=body).execute()

此处 ttl 以秒为单位,并将通道到期时间保持10天

答案 2 :(得分:1)

我也一直受到Calendar API中这个明显错误的困扰。经过两天的测试,我发现了以下内容:

  1. 当您使用服务帐户(Google Apps Marketplace应用程序始终如此)观看()日历时,此错误似乎才会显现。我只测试过看二级日历,所以在观看主日历时我无法确认问题是否存在。

  2. 当您包含“params”:{“ttl”:172800}时,您将获得一个返回的频道,其中的过期标头设置为2天。但是,通知将在1小时后停止发送,表示频道已被删除,并且Google日历未正确尊重过期日期。

  3. 如果您包含“params”:{“ttl”:172800}并使用常规oAuth2流中的普通访问令牌监视()日历,则会使用指定的到期时间创建通道。预计到期。无论您是在观看Gmail帐户的日历还是Google App帐户的日历,都是如此 - 只要您使用的是常规OAuth2而非服务帐户。

  4. 我尝试使用未记录的

  5. -

    body = { "expiration" : MILLISECONDS_SINCE_EPOCH, ....}.
    

    而不是

    body = { "params": { "ttl" : 172800 }, ....}.  
    

    这是Google API Python客户端库使用的内容,它没有任何效果。通道在正确到期时创建,但在使用服务帐户一小时后过期。

    这是一个特别糟糕的错误,因为它似乎正确创建了一个频道,但是它会提前到期,而您无法验证哪些频道对特定资源有效。

    到目前为止,我发现的唯一解决方法是在一小时后更新每个频道。这不是一个长期的解决方案。我每天将使用超过300,000个API调用来保持频道活跃,这是我的配额的很大一部分。如果事情正常,我只需要每周更新一次频道,而不是每天24次。