首页 文章

Google日历v3推送通知到期

提问于
浏览
2

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

然而,问题是在一小时左右后通知到期 .

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

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

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

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

谢谢你的帮助

保罗

3 回答

  • 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天

  • 1

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

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

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

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

    • 我尝试使用无证件

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

    代替

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

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

    这是一个特别糟糕的错误,因为它看起来正确创建了一个 Channels ,但是它很早就到了,你无法验证特定资源的哪些 Channels 是活动的 .

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

相关问题