【问题标题】:Google Analytics Reporting Api - PHP: Add user accountGoogle Analytics Reporting Api - PHP:添加用户帐户
【发布时间】:2017-07-15 09:38:03
【问题描述】:

我想做的事

  • 让我的 Web 应用程序的用户与该应用程序共享他们的分析帐户。
  • 将用户重定向到 Google 身份验证,要求他们批准访问
  • 将用户重定向回应用程序。
  • 根据用户的分析数据和来自应用的数据为用户生成报告。
  • 下次用户生成他们的报告时,我不想再次要求他们进行日志记录。

问题出在哪里

我读到了这个Google developers PHP guide。但是,示例代码会连接到已与应用共享的第一个帐户。

我想查看一段代码,它要求用户提供他们的凭据,从而提供对他们帐户的访问权限。

在堆栈上我已经找到了这个答案Service Applications and Google Analytics API V3: Server-to-server OAuth2 authentication?。但是,这里提到的 APP_EMAIL 不是特定用户的电子邮件,而是在控制台中创建的应用程序的 developer.gserviceaccount.com 标识。

我还发现了这个帖子Google Analytics Core Reporting API Version 3.0 without client login。似乎在那里解决了类似的主题,但是那里缺少代码的重要部分(从我的角度来看)。

【问题讨论】:

  • 记住凭据不是用户登录名和密码。这是一个刷新令牌,可让您在未来访问他们的帐户。在这种情况下,服务帐户将不适合您。这将是一个坏主意。我有一个教程系列,可以帮助您入门。 daimto.com/google-development-beginners Dimi 发布的答案中的代码应该可以工作。
  • 啊哈这是我的问题 - 我没有意识到使用令牌而不是凭据,谢谢

标签: php google-analytics google-api google-oauth google-analytics-api


【解决方案1】:

首先,确保通过将访问类型设置为离线来获取刷新令牌。 然后为报告创建一个单独的页面。 单独的页面应该为所有报告使用帐户 ID 和刷新令牌,如果它给你一个令牌错误,你可以自己刷新它,或者将它们发送回登录页面。

您只需要求提供一次凭据,即可访问所有帐户。 php指南仅使用第一个帐户,但是您可以遍历所有帐户并获得更多

$client = new Google_Client();
$client->setAuthConfig(__DIR__ . '/creds/client_secrets.json');
$client->setIncludeGrantedScopes(true);
$client->setAccessType("offline");
$client->setApprovalPrompt('force');
$client->addScope(Google_Service_Analytics::ANALYTICS_EDIT);
$client->addScope(Google_Service_Analytics::ANALYTICS_READONLY);

// If the user has already authorized this app then get an access token
// else redirect to ask the user to authorize access to Google Analytics.
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
        // Set the access token on the client.
        $client->setAccessToken($_SESSION['access_token']);
        // Create an authorized analytics service object.
        $analytics = new Google_Service_Analytics($client);
        $accounts=getAccountIds($analytics);
        foreach($accounts as $acc)
        {
         var_dump($acc);
}
}
else {
        $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php';
        header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    相关资源
    最近更新 更多