2015-10-15 2 views
0

Так я определить все параметры в верхней части моей страницы:токен обновления не работает в Google Analytics API

<?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 минут. После этого отчеты больше не показываются. Что я сделал неправильно и почему он не использует токен обновления?

ответ

0

Это на самом деле ожидаемое поведение (к сожалению). API-интерфейс Embed не принимает токен обновления, потому что обычно вы никогда не хотите публиковать эти токены публично (что вы делали бы, если бы они были в вашем HTML-источнике).

Если вы хотите обойти это ограничение, вы можете установить таймер на странице, обновляющий токен доступа каждые 50 минут или около того (они истекают после 60, как вы указали).

Если вы имели конечную точку на сервере, что возвращаемая новый маркер доступа, вы могли бы сделать что-то вроде этого:

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

Примечания, ключ выше вызова setToken с новым маркером доступа. Это позволит API-интерфейсу Embed продолжить работу в обычном режиме.

+0

Спасибо, это имеет смысл для меня. Что я должен поставить вместо «access_token» здесь :? gapi.auth.setToken ({ access_token: «что должно быть здесь»? }); Также в качестве альтернативного решения есть так или иначе, чтобы установить истечение срока действия токена, например, в течение 30 лет ..? –

+0

Это то же самое, что у вас выше в вашем коде: '' ''. Кроме того, чтобы ответить на второй вопрос, вы не можете изменить период истечения срока действия. По соображениям безопасности установлено 1 час. –

+0

ОК, это не сработало. Я поставил ваш код над этой строкой: gapi.analytics.auth.authorize ({ 'serverAuth': { 'access_token': ' ' } и ждал час, он, похоже, не установил новый токен. –