获取 Google Analytics API 令牌/Google_Client getAccessToken returns 空/空
Get Google Analytics API token / Google_Client getAccessToken returns null / empty
我正在尝试获取服务帐户的 Google 访问令牌,以便我可以从客户端访问 Analytics API。
在服务器端我有以下代码:
$keyFile = base_path() . '/keys/xxxxxxxx-xxxxxxxxx.json';
$client = new Google_Client();
$client->setApplicationName('Analytics Demo');
$client->setAuthConfig($keyFile);
$client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
$token = $client->getAccessToken(); // Returns null
在某些时候它返回了一个令牌,但在几次调用之后它开始返回 null
。
尝试获取 $client->getRefreshToken()
也 returns null。
当我将 $client
放入 Google_Service_Analytics
对象时,一切似乎都工作正常,所以我知道密钥文件是正确的并且正确读取:
$analytics = new Google_Service_Analytics($client);
$accounts = $analytics->management_accounts->listManagementAccounts(); // Returns proper data
对可能出现的问题有什么想法吗?
更新:
调用 $client->isAccessTokenExpired()
结果为真,所以我想我必须刷新令牌,但我不知道如何刷新。
经过大量的尝试和错误我发现我必须使用 $client->fetchAccessTokenWithAssertion()
而不是 $client->getAccessToken()
。
public static function getGoogleServiceToken():?string {
$keyFile = base_path() . '/keys/xxxxxxxx-xxxxxxx.json';
$client = new Google_Client();
$client->setAuthConfig($keyFile);
$client->setApplicationName('Analytics Demo');
$client->setAccessType('access_type');
$client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
if ($client->isAccessTokenExpired()) {
$token = $client->fetchAccessTokenWithAssertion();
}
else {
$token = $client->getAccessToken();
}
return $token['access_token'];
}
客户端:
...
private _handleGetResponse(response) {
...
gapi.analytics.auth.authorize({
serverAuth: {
access_token: response.token,
}
});
...
不知道为什么根本没有像样的文档。即使知道我必须使用这种方法,我也找不到关于这种方法实际作用的文档。仍然欢迎任何解释或指向某些文档的链接!
我正在尝试获取服务帐户的 Google 访问令牌,以便我可以从客户端访问 Analytics API。
在服务器端我有以下代码:
$keyFile = base_path() . '/keys/xxxxxxxx-xxxxxxxxx.json';
$client = new Google_Client();
$client->setApplicationName('Analytics Demo');
$client->setAuthConfig($keyFile);
$client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
$token = $client->getAccessToken(); // Returns null
在某些时候它返回了一个令牌,但在几次调用之后它开始返回 null
。
尝试获取 $client->getRefreshToken()
也 returns null。
当我将 $client
放入 Google_Service_Analytics
对象时,一切似乎都工作正常,所以我知道密钥文件是正确的并且正确读取:
$analytics = new Google_Service_Analytics($client);
$accounts = $analytics->management_accounts->listManagementAccounts(); // Returns proper data
对可能出现的问题有什么想法吗?
更新:
调用 $client->isAccessTokenExpired()
结果为真,所以我想我必须刷新令牌,但我不知道如何刷新。
经过大量的尝试和错误我发现我必须使用 $client->fetchAccessTokenWithAssertion()
而不是 $client->getAccessToken()
。
public static function getGoogleServiceToken():?string {
$keyFile = base_path() . '/keys/xxxxxxxx-xxxxxxx.json';
$client = new Google_Client();
$client->setAuthConfig($keyFile);
$client->setApplicationName('Analytics Demo');
$client->setAccessType('access_type');
$client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
if ($client->isAccessTokenExpired()) {
$token = $client->fetchAccessTokenWithAssertion();
}
else {
$token = $client->getAccessToken();
}
return $token['access_token'];
}
客户端:
...
private _handleGetResponse(response) {
...
gapi.analytics.auth.authorize({
serverAuth: {
access_token: response.token,
}
});
...
不知道为什么根本没有像样的文档。即使知道我必须使用这种方法,我也找不到关于这种方法实际作用的文档。仍然欢迎任何解释或指向某些文档的链接!