Google analytics 刷新令牌在Google Analytics API中不起作用

Google analytics 刷新令牌在Google Analytics API中不起作用,google-analytics,oauth-2.0,google-oauth,Google Analytics,Oauth 2.0,Google Oauth,因此,我在页面顶部定义了所有参数: <?php session_start(); $client = new Google_Client(); $client->setAuthConfigFile('client_secrets.json'); $client->addScope(Google_Service_Analytics::ANALYTICS_READONLY); $client->setAccessType('

因此,我在页面顶部定义了所有参数:

    <?php
    session_start();

    $client = new Google_Client();

    $client->setAuthConfigFile('client_secrets.json');
    $client->addScope(Google_Service_Analytics::ANALYTICS_READONLY);
    $client->setAccessType('offline');
    $client->setApprovalPrompt('force');

if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
  $client->setAccessToken($_SESSION['access_token']);

     $client->getAccessToken();



} else {
  $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php';
  header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}


//get the access token
 $myToken = json_decode($client->getAccessToken());


if ($client->getAuth()->isAccessTokenExpired()) {

    $token = $myToken->refresh_token;
    echo 'token expired';


} else {

    $token = $myToken->access_token;
    echo 'token not yet expired'; 

}

    ?>
在底部,我得到了java脚本:

<script>


gapi.analytics.ready(function() {


 var CLIENT_ID = 'my-client-id-goes-here';

   gapi.analytics.auth.authorize({
   'serverAuth': {
      'access_token': '<?php echo $token; ?>'
    }
  });

但是,这会一直工作到访问令牌到期,即60分钟后。此后,报告不再显示。我做错了什么?为什么它不使用刷新令牌?

不幸的是,这实际上是预期的行为。嵌入API不接受刷新令牌,因为通常情况下,您永远不希望公开这些令牌,如果它们在HTML源代码中,您会这样做

如果您想绕过这个限制,您可以在页面上设置一个计时器,每隔50分钟更新一次访问令牌,或者在60分钟后过期,正如您所指出的那样

如果服务器上有一个端点返回了一个新的访问令牌,则可以执行以下操作:

setInterval(function() {
  makeRequestToGetNewAccessToken().then(function(access_token) {
    gapi.auth.setToken({
      access_token: access_token
    });
  });
}, 1000 * 60 * 50);

注意,上面的密钥正在使用新的访问令牌进行调用。这将允许嵌入API继续正常工作。

谢谢,这对我来说很有意义。我应该在这里放置什么来代替访问令牌I:?gapi.auth.setToken{access_token:这里应该是什么?};另外,作为一种替代解决方案,是否可以将令牌到期时间设置为30年内的某个时间?这与您在代码中的上述内容相同:。另外,要回答第二个问题,不,您不能更改过期期限。出于安全原因,它被设置为1小时。好的,这不起作用。我将您的代码放在这一行上方:gapi.analytics.auth.authorize{'serverAuth':{'access_token':}并等待了一个小时,它似乎没有设置新的令牌。它肯定有效。您可以通过调用gapi.auth.getToken验证它是否设置了令牌,它将返回您刚才设置的令牌。alertgapi.auth.getToken;返回null