【问题标题】:Google calendar v3 Push notification expiry谷歌日历 v3 推送通知到期
【发布时间】:2014-01-24 03:36:38
【问题描述】:

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

但问题是,大约一个小时后,通知就会过期。

在阅读文档时,鉴于我没有指定过期,我无法弄清楚为什么会有过期。

当频道注册时,响应实际上说明了我注册频道后 1 周的到期日期 - 例如格林威治标准时间 2014 年 1 月 31 日星期五 03:23:59。

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

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

感谢您的帮助

保罗

【问题讨论】:

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


【解决方案1】:

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

Issue Details

【讨论】:

    【解决方案2】:

    默认情况下,谷歌将频道到期时间保留为一周, 如何使用 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天

    【讨论】:

    • 感谢您的帮助 Venkatesh - 我已经向 Google 开了一张票,他们要求我设置 ttl 属性。他们说默认超时是 1 小时——这就是我所经历的。当我按照您的示例设置 ttl 值时,超时没有任何区别。你正在经历不一样的事情吗?发送监视请求后,回调具有正确的到期时间 - 但它被忽略并在似乎 1 小时后超时。
    • 我已经更新了答案,你有没有尝试和上面的例子一样?使用上述代码可以将频道过期时间保持 10 天
    • 是的,我的 json 正文是 json = { "id" : 78, "type" : "web_hook", "address" : "ilinker.com/iLinkCalendar.ashx", "params" : { "ttl":864000 } }"; 在手表注册时,它在响应中返回了正确的过期时间 - 但它在一小时后超时。
    • 我也面临同样的问题,在手表注册时,它在响应中返回了正确的过期时间,但频道在过期时间之前没有活动,并且在任何时间后没有收到来自谷歌的通知。被执行
    • 嗨 Venkatesh - 我认为这是通知工作/不工作方式的一个错误。我有一张 Google 支持的票,但到目前为止没有任何用处可报告。
    【解决方案3】:

    我也被日历 API 中这个明显的错误所困扰。经过两天的测试,我发现了以下内容:

    1. 此错误似乎仅在您使用服务帐户 watch() 日历时出现(Google Apps Marketplace 应用程序总是如此)。我只测试了观看辅助日历,因此无法确认观看主日历时是否存在问题。

    2. 当您包含 "params": { "ttl" : 172800 } 时,您将获得一个设置了 2 天后过期标头的频道。但是,通知将在 1 小时后停止发送,这表明频道已被删除,并且 Google 日历未正确遵守到期时间。

    3. 如果您包含“params”:{“ttl”:172800 } 和 watch() 具有来自常规 oAuth2 流的正常访问令牌的日历,则创建具有指定到期时间的通道,并且通知发送为预计到到期为止。无论您是在查看 Gmail 帐户的日历还是 Google App 帐户的日历,只要您使用常规 OAuth2 而不是服务帐户,这都是正确的。

    4. 我尝试使用无证

    -

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

    而不是

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

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

    这是一个特别严重的错误,因为它似乎正确创建了一个频道,但它提前到期,您无法验证哪些频道对特定资源处于活动状态。

    到目前为止,我想出的唯一解决方法是在一小时后更新每个频道。这不是一个长期的解决方案。我每天将使用超过 300,000 次 API 调用来保持通道处于活动状态,这是我配额的很大一部分。如果一切正常,我最多只需要每周更新一次频道,而不是一天 24 次。

    【讨论】:

    • 是的,我同意你所说的一切。我一直在使用服务帐户并且具有相同的行为。我们使用通知通道的原因是为了减少 API 调用,因此刷新所有通道不是一种选择。我假设这是一个错误,因为通知的目的是停止轮询。我正在与 Google 支持团队一起慢慢解决这个问题。
    • Paul - 如果您在支持请求中获得任何更新,并且您也可以在此处发帖,那就太好了。我还向企业支持提交了一个案例,我会在收到回复时报告。 -卡梅隆
    • 我还在 Apps API 的公共问题跟踪器上提交了这个错误。 code.google.com/a/google.com/p/apps-api-issues/issues/…
    • 我已将您的问题与我的支持请求相关联 - 感谢您进行设置。目前我被要求提供日志详细信息等,所以没有什么要报告的,但如果有任何变化,我会更新这个线程。
    • 我收到了来自 Google 的回复,他们承认这现在是服务帐户的一个已知问题。他们今天添加了以下已知问题。 support.google.com/a/known-issues/15721?hl=en
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 2019-07-07
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多