获取 Google Analytics API token Google_Client getAccessToken 返回 null 空。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取 Google Analytics API token Google_Client getAccessToken 返回 null 空。相关的知识,希望对你有一定的参考价值。

我试图为一个服务账户获取谷歌访问令牌,以便我可以从客户端访问分析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() 也返回null。

当我把 $client 在...中 Google_Service_Analytics 一切似乎都很好,所以我知道密钥文件是正确的,并正确读取。

    $analytics = new Google_Service_Analytics($client);
    $accounts = $analytics->management_accounts->listManagementAccounts(); // Returns proper data

有什么办法可以解决这个问题吗?

更新。

调用 $client->isAccessTokenExpired() 结果为true,所以我想我必须刷新token,但我不知道如何刷新。

答案

经过大量的试验和错误,我发现我必须使用 $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 token Google_Client getAccessToken 返回 null 空。的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Google Analytics API 获取 Google Ads 关键字和广告内容

获取 Google Analytics API token Google_Client getAccessToken 返回 null 空。

无法获取 Google Analytics API 的 oAuth2 访问令牌

Google Analytics 报告 API - 权限不足 403

Google Analytics API:每个人会话导出数据

Google Analytics API:“用户对此帐户没有足够的权限。”