刷新令牌在Google AnalyticsAPI中不起作用

时间:2015-10-15 17:28:35

标签: 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('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分钟内。之后报告不再显示。我做错了什么以及为什么它没有使用刷新令牌?

1 个答案:

答案 0 :(得分:0)

这实际上是预期的行为(不幸的是)。 Embed API不会使用刷新令牌,因为通常您永远不想公开公开这些令牌(如果它们位于您的HTML源代码中,您将会这样做)。

如果您想要解决此限制,可以在页面上设置一个计时器,每50分钟左右更新一次访问令牌(它们会在60之后到期,如您所指出的那样)。

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

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

注意,上面的关键是使用新的访问令牌调用setToken。这将允许Embed API继续正常工作。