Google calendar api 谷歌日历v3推送通知到期

Google calendar api 谷歌日历v3推送通知到期,google-calendar-api,google-oauth,google-apps-marketplace,Google Calendar Api,Google Oauth,Google Apps Marketplace,我正在使用谷歌日历推送通知。一切正常,我注册的频道没有问题。对日历的更改会按预期发出通知 然而,问题是,大约一个小时后,通知就会过期 在阅读文档时,我无法理解为什么会有到期日,因为我没有指定到期日 当频道注册时,响应实际上说明了从我注册频道开始的1周到期日-例如,2014年1月31日星期五03:23:59 GMT 然而,这不是我所经历的 有人知道这里规定的行为是什么吗 谢谢你的帮助 Paul默认情况下,谷歌将频道到期时间保留一周, 如何使用ttl变量将频道到期时间设置为一个月 EX: bod

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

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

在阅读文档时,我无法理解为什么会有到期日,因为我没有指定到期日

当频道注册时,响应实际上说明了从我注册频道开始的1周到期日-例如,2014年1月31日星期五03:23:59 GMT

然而,这不是我所经历的

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

谢谢你的帮助


Paul

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

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

  • 只有当您使用服务帐户观看()日历时(对于Google Apps Marketplace Apps,情况总是如此),此错误才会出现。我只测试了观看辅助日历,因此无法确认观看主日历时是否存在问题

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

  • 如果包含“params”:{“ttl”:172800}和watch()一个日历,该日历具有来自常规oAuth2流的正常访问令牌,则将使用指定的过期时间创建通道,并按预期发送通知,直到过期。无论你是在看Gmail帐户的日历还是谷歌应用程序帐户的日历,只要你使用普通的OAuth2而不是服务帐户,这都是正确的

  • 我试着使用未登记的

  • -

    而不是

    body = { "params": { "ttl" : 172800 }, ....}.  
    
    这就是GoogleAPI Python客户端库所使用的,它没有任何效果。频道创建的过期时间正确,但使用服务帐户时在一小时后过期

    这是一个特别糟糕的错误,因为它似乎正确创建了一个通道,但它会提前过期,并且您无法验证特定资源的哪些通道处于活动状态


    到目前为止,我找到的唯一解决办法是在一小时后更新每个频道。这不是一个长期的解决办法。我将每天使用超过300000个API调用来保持频道的活跃,这是我配额中的一大块。如果一切正常,我每周最多只需要更新一次频道,而不是一天24次。

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

  • 只有当您使用服务帐户观看()日历时(对于Google Apps Marketplace Apps,情况总是如此),此错误才会出现。我只测试了观看辅助日历,因此无法确认观看主日历时是否存在问题

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

  • 如果包含“params”:{“ttl”:172800}和watch()一个日历,该日历具有来自常规oAuth2流的正常访问令牌,则将使用指定的过期时间创建通道,并按预期发送通知,直到过期。无论你是在看Gmail帐户的日历还是谷歌应用程序帐户的日历,只要你使用普通的OAuth2而不是服务帐户,这都是正确的

  • 我试着使用未登记的

  • -

    而不是

    body = { "params": { "ttl" : 172800 }, ....}.  
    
    这就是GoogleAPI Python客户端库所使用的,它没有任何效果。频道创建的过期时间正确,但使用服务帐户时在一小时后过期

    这是一个特别糟糕的错误,因为它似乎正确创建了一个通道,但它会提前过期,并且您无法验证特定资源的哪些通道处于活动状态


    到目前为止,我找到的唯一解决办法是在一小时后更新每个频道。这不是一个长期的解决办法。我将每天使用超过300000个API调用来保持频道的活跃,这是我配额中的一大块。如果一切正常,我每周最多只需要更新一次频道,而不是一天24次。

    此问题现已解决-请参阅以下内容:


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


    谢谢你的帮助,文卡特什-我已经在谷歌开了一张罚单,他们让我设置ttl属性。他们说默认超时时间是1小时——这就是我所经历的。当我像您的示例中那样设置ttl值时,它对超时没有影响。你有什么不同的经历吗?发送watch请求后,回调具有正确的到期时间-但它被忽略,并在1小时后超时。我已更新了答案,您是否尝试了与上述示例相同的方法?上面的代码能够将通道过期时间保持10天。我的json主体是json={“id”:78,“type”:“web_hook”,“address”:“params”:{“ttl”:864000};在手表注册时,它返回