谷歌日历手表到期时间超过一个月


google calendar watch expiration time for more than one month?

我将CRM系统与谷歌日历同步。为了做到这一点,我要求我的用户谷歌日历push notifications进入我的系统。我已经成功地创建了一块手表,并将到期时间设置为2030年,但当我收到手表事件的响应时,它显示手表的到期时间被设置为一个月。

问题:

  1. 这是否意味着我需要每月刷新系统中每个用户日历的手表
  2. 有没有办法让手表不受限制

我的代码:

$channel =  new Google_Service_Calendar_Channel($client);
$uuid = gen_uuid(); 
$channel->setId($uuid); 
$channel->setType('web_hook'); 
$channel->setExpiration('1919995862000');
$address = $sugar_config['site_url'] . "/index.php?entryPoint=updateFromCal";   
$channel->setAddress($address); 
$watchEvent = $service->events->watch($bean->google_cal_id_c, $channel);

回应:

    [address] => 
    [expiration] => 1417667348000
    [id] => 87453668-b1fd-4468-beca-xxxxxxxxxxxx
    [kind] => api#channel
    [params] => 
    [payload] => 
    [resourceId] => xxxxxxxxx-xxxxxxxxxxx
    [resourceUri] => https://www.googleapis.com/calendar/v3/calendars/xxxxxx@gmail.com/events?key=xxxxxxxxxxxxxxxxxxxxWHxxxxxxalt=json
    [token] => 
    [type] => 
    [modelData:protected] => Array

通知通道可以有一个到期时间,其值由您的请求或任何Google Calendar API内部限制或默认值确定(使用更严格的值)。目前还没有自动续订通知通道的方法。当通道接近到期时,必须通过调用watch方法创建一个新通道。这是有关通知渠道的更多文档的链接。

您可以创建一个Oauth和服务帐户,并使用它来验证您的Google日历请求:

1-转到gcp,创建一个项目,启用日历api,创建oAuth帐户并创建服务帐户。

2-创建oAuth后,下载oAuth json文件。

3-创建服务帐户后,转到keys并创建一个新的json密钥,然后下载。(您将使用这个进行身份验证)

4-转到你想用你的api访问的日历,并添加与你之前创建的谷歌服务帐户共享日历,根据你的需求设置权限

完成后,现在您可以访问api,而无需刷新令牌,也无需创建令牌。您只需要在文件中添加oauth-json和服务帐户json,并在需要时调用它们。您应该使用jwtClient来创建您的身份验证。其余的都应该是一样的。