164

我正在创建一个脚本,基于此页面中的 Google Analytics 分步指南:

https://developers.google.com/analytics/resources/tutorials/hello-analytics-api

授权完成没有问题,直到它尝试访问数据。返回码为 403,错误信息为:

用户没有任何 Google Analytics(分析)帐户

此消息毫无意义:我的帐户有谷歌分析数据,跟踪多个网站,我可以从网络浏览器毫无问题地访问它。我已通过 Google API 控制台允许使用 Analytics API,并且 API 访问为我提供了正确的数据。

4

15 回答 15

340

我也有这个问题。我通过将我的服务帐户的电子邮件地址添加到我希望它访问的 Google Analytics 配置文件来修复它。

通过查看 Google API 控制台中的“API 访问”选项卡,我获得了服务帐户的电子邮件地址(类似于 xxxxxx@developer.gserviceaccount.com)。

然后,我按照Google 的说明将电子邮件地址添加到 Analytics 配置文件。现在一切都按预期工作。

祝你好运!

于 2012-10-31T21:53:05.730 回答
89

只需添加您给定的电子邮件(格式71667655853644-o653rrdkq5hthsgo0otbpojoo@developer.gserviceaccount.com

给用户管理员:

用户没有任何 Google Analytics(分析)帐户

希望对你有帮助

于 2015-08-07T16:25:01.287 回答
30

我面临着同样的问题。your account@yourwebsite-dev.iam.gserviceaccount.com通过将服务帐户用户 ( ) 的电子邮件 ID 添加到您的 Analytics 帐户中的用户,它得到了解决 -

分析-主页->管理(左窗格)->用户管理->添加(单击菜单右侧的加号)->添加新用户->在输入电子邮件地址中添加电子邮件ID。

在此处输入图像描述

现在,这将解决问题。

于 2018-07-06T07:39:16.947 回答
9

上面的评论中提到了它,但是如果您在帐户的用户管理下添加电子邮件地址,它将不起作用。您必须单击屏幕视图部分下的用户管理。

在此处输入图像描述

于 2016-08-25T13:52:58.653 回答
5

转到https://console.cloud.google.com/apis/credentials

复制“服务帐户”中的电子邮件地址。

在此处输入图像描述

打开谷歌分析,在上面添加电子邮件作为新用户。

于 2020-10-28T20:51:32.320 回答
5

client_email当您在google alalytics中未授予权限时,我们会收到此消息,client_email是您从 JSON 文件中获得的。要授予client_email您在应用程序中使用的权限,请转到Google Analytics 网站并单击“管理员(设置图标)”

在此处输入图像描述

你会得到正确的菜单列表,点击“查看用户管理”

在此处输入图像描述

在那里你会看到“+”图标和“添加用户”,

在此处输入图像描述

一旦你点击它,你需要client_email在“电子邮件地址字段”中添加并保存它,你应该很高兴!

在此处输入图像描述

于 2020-07-20T15:17:38.227 回答
4

如果您从未使用您尝试进行身份验证的 google 帐户登录,您也会收到此错误。

于 2013-03-23T15:20:12.977 回答
2

万一这不起作用,请尝试打开您下载的 JSON 文件并搜索client_email并复制该电子邮件地址并将其添加到查看文件

点击

Analytics-Home Page ->Admin(left pane) -> User Management -> add (click on plus sign on right side of the menu) -> Add new User -> Add the client_email address which you copied.

如果还是不行

Analytics-Homepage-> Admin ->Views->User Management(Click on add(+) symbol, add this ccopied client_email address and give permissions and save it.
于 2019-12-01T08:43:01.580 回答
2

我收到了 403 错误,直到我将 Google Analytics 内部的电子邮件帐户的权限从“读取和分析”更改为其他内容,保存它,然后将权限更改回“读取和分析”并且它起作用了。

于 2015-08-29T09:34:45.597 回答
1

我遇到了403错误。这些步骤让我绕过了它。需要明确的是,我试图让 Google 的示例“HelloAnalytics.php”与 OAuth 一起使用(无用户交互,适合 cron 作业等)。

启用 Analytics API 后,我在 APIs & Auth/Credentials 下创建了一个新的“服务帐户”;并保存了 .p12 密钥对。然后我进入 Analytics 用户管理控制台,并添加了该服务用户的电子邮件地址。

如果我仅在权限列表中选中“读取和分析” ,则使用PHP API 的 .p12 授权有效。如果我添加“管理用户”和/或“编辑”,我会得到 403。希望这会有所帮助,我已经为此研究了几个小时......

于 2015-09-15T22:25:46.197 回答
0

我设法通过确保

客户端 = Google::APIClient.new(:application_name => 'X',:application_version => '1')

上面的应用程序名称变量'X 是 GA 仪表板上的 ACCOUNT 名称,而不是 PROPERTY 名称,在我的例子中是我想要访问的站点的实际 url。

令人困惑,但幸运的是已修复(不感谢 Google!)

于 2014-09-11T15:50:17.500 回答
0

问题发生是因为我们没有提供“子”参数。除非我们提供此信息,否则呼叫将代表该长服务帐户电子邮件进行。

因此,只需提供一个子参数,以及您已经在报告中授予访问权限的电子邮件,事情应该会运行良好!

于 2015-03-02T06:00:49.643 回答
0

我也有这个问题,我发现问题是我请求了太多权限。开发者控制台说要同时要求http://www.googleapis.com/auth/analytics http://www.googleapis.com/auth/analytics.readonly权限。当我也使用该声明时,这不起作用subsub声明指示 Google 颁发代表另一个用户操作的访问令牌——在我的例子中是拥有服务帐户的 Google 帐户。我删除了analytics许可并坚持使用analytics.readonlysub 声明:

{
  "iss":"123123123123123-xxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com",
  "sub":"me.example@gmail.com"
  "scope":"http://www.googleapis.com/auth/analytics",
  ...
}

颁发的 Bearer 令牌允许我对完全不同的 Google 帐户拥有但已与我的 gmail 用户 (me.example@gmail.com) 共享(只读)的个人资料进行(至少一些)Google Analytics 查询.

于 2014-08-01T21:38:20.893 回答
0

我得到了同样的错误,因为我没有登录谷歌分析。所以我通过登录分析帐户解决了这个问题。

于 2019-01-18T11:00:45.737 回答
-1

OAuth client ID除了使用服务帐户,您可以通过使用凭据回避添加新用户权限的需要(根据此线程中的最佳答案) 。

转到API 凭据仪表板并单击“创建凭据”->“OAuth 客户端 ID”。之后,您应该获得验证 API 所需的客户端 ID 和客户端密码。

现在,您可以使用OAuth2WebServerFlow基于每次使用的身份验证。这是一个python3示例:

from apiclient.discovery import build
from oauth2client.client import OAuth2WebServerFlow

# TODO: Fill these in...
CLIENT_ID = ''
CLIENT_SECRET = ''
VIEW_ID = ''

flow = OAuth2WebServerFlow(
    CLIENT_ID, CLIENT_SECRET,
    'https://www.googleapis.com/auth/analytics.readonly',
    redirect_uri='urn:ietf:wg:oauth:2.0:oob'
)

authorize_url = flow.step1_get_authorize_url()
print('Receive code from:\n%s\n' % authorize_url)
code = input('Enter code here:').strip()
credentials = flow.step2_exchange(code)

api = build('analyticsreporting', 'v4', credentials=credentials)
body={
    'reportRequests': [{
        'viewId': VIEW_ID,
        'dateRanges': [{'startDate': '7daysAgo', 'endDate': 'today'}],
        'metrics': [{'expression': 'ga:sessions'}],
        'dimensions': [{'name': 'ga:country'}]
    }]
}

data = api.reports().batchGet(body=body).execute()
于 2019-05-09T23:34:41.010 回答