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