开发者问题收集

利用 Javascript 实现 Google Analytics API - 生成服务对象

2015-10-15
139

在阅读了 developers.google.com 上的许多文章后,我仍然不知道在我的网络应用中使用 Google Analytics API 的最佳方法是什么。

到目前为止,我已经按照 这些说明 使用正确的范围获取访问令牌,但我对下一步该做什么有点困惑。我的代码如下所示:

// in my angular controller
$scope.accessToken = {};

    if (callback) {
        authService.queryToken().then(function(data) {
            $scope.accessToken = data;
            console.log($scope.accessToken);
        }, function(err) {
            $scope.accessToken = null;
        });
    }

// in my angular service
service.queryToken = function() {

        var params = {},
            queryString = location.hash.substring(1),
            regex = /([^&=]+)=([^&]*)/g,
            m;
        while (m = regex.exec(queryString)) {
            params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
        }

        var deferred = $q.defer();

        $http({
            method: 'POST',
            url: 'http://' + window.location.host + '/catchtoken?' + queryString
        }).success(function(data) {
            deferred.resolve(data);
        }).error(function() {
            deferred.reject('There was an error');
        });

        return deferred.promise;
    };

此资源 看起来不错,但我不知道如何使用我生成的访问令牌。我主要感到困惑的是,生成访问令牌的方法似乎只提到通过 HTTP 调用 Google API,而其他资源则提到创建服务对象。

如何使用用户生成的访问令牌创建分析服务对象?

1个回答

根据我们在评论中的讨论,听起来您真正想要的是一种让用户使用他们的 Google 帐户登录并授予您查询其 Google Analytics 数据的权限的方法。

如果您使用 Google 登录网页 流程以及 gapi.client.request 方法( JavaScript 版 Google API 客户端库 ),您应该能够轻松地对用户进行身份验证,然后自由地发出请求,而不必担心访问令牌是否已过期(登录库会在后台自动刷新它)。场景)。

以下是可帮助您入门的示例 HTML 文件:

<html>
<head>
  <meta name="google-signin-scope" content="https://www.googleapis.com/auth/analytics.readonly">
  <meta name="google-signin-client_id" content="XXXX.apps.googleusercontent.com">
  <script src="https://apis.google.com/js/platform.js" async defer></script>
</head>
<body>
  <div class="g-signin2" data-onsuccess="onSignIn" data-theme="dark"></div>
  <script>
    function onSignIn(googleUser) {

      gapi.load('client', function() {
        gapi.client.request({
          path: '/analytics/v3/data/ga',
          params: {
            'ids': 'ga:XXXXX',
            'start-date': '7daysAgo',
            'end-date': 'yesterday',
            'metrics': 'ga:sessions'
          }
        })
        .then(function(response) {
          var totalSessions = response.result.totalsForAllResults['ga:sessions'];
          console.log('Total sessions in the past week: ' + totalSessions);
        });
      });

    }
  </script>
</body>
</html>

请注意,使用上述代码时,您必须在顶部附近的 <meta> 标记中使用自己的 客户端 ID ,并且必须将字符串 'ga:XXXXX' 替换为您要查询的 Google Analytics(分析)视图 ID。您可以使用 Google Analytics(分析)帐号浏览器 查找您的视图 ID。

Philip Walton
2015-10-16