我正在使用Google日历推送通知。一切运作良好,我注册我的频道没有问题。对日历的更改会产生预期的通知。
然而,问题是在一小时左右后通知会过期。
在阅读文档时,我无法确定为什么会有一个到期,因为我没有指定一个。
当频道被注册时,响应实际上表示从我注册频道到1周的有效期 - 例如星期五,2014年1月31日03:23:59 GMT。
然而,这并不是我所经历的。
有人知道这里规定的行为是什么。
感谢您的帮助
保
答案 0 :(得分:2)
此问题现已修复 - 请参阅以下内容:
答案 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中这个明显错误的困扰。经过两天的测试,我发现了以下内容:
当您使用服务帐户(Google Apps Marketplace应用程序始终如此)观看()日历时,此错误似乎才会显现。我只测试过看二级日历,所以在观看主日历时我无法确认问题是否存在。
当您包含“params”:{“ttl”:172800}时,您将获得一个返回的频道,其中的过期标头设置为2天。但是,通知将在1小时后停止发送,表示频道已被删除,并且Google日历未正确尊重过期日期。
如果您包含“params”:{“ttl”:172800}并使用常规oAuth2流中的普通访问令牌监视()日历,则会使用指定的到期时间创建通道。预计到期。无论您是在观看Gmail帐户的日历还是Google App帐户的日历,都是如此 - 只要您使用的是常规OAuth2而非服务帐户。
我尝试使用未记录的
-
body = { "expiration" : MILLISECONDS_SINCE_EPOCH, ....}.
而不是
body = { "params": { "ttl" : 172800 }, ....}.
这是Google API Python客户端库使用的内容,它没有任何效果。通道在正确到期时创建,但在使用服务帐户一小时后过期。
这是一个特别糟糕的错误,因为它似乎正确创建了一个频道,但是它会提前到期,而您无法验证哪些频道对特定资源有效。
到目前为止,我发现的唯一解决方法是在一小时后更新每个频道。这不是一个长期的解决方案。我每天将使用超过300,000个API调用来保持频道活跃,这是我的配额的很大一部分。如果事情正常,我只需要每周更新一次频道,而不是每天24次。