尝试将网站资源链接到AdWords(Google Ads)帐户时出现InsufficientPermission(403)

时间:2019-02-08 15:55:15

标签: google-analytics google-analytics-api google-adwords

我试图找到一种解决方案,该解决方案在使用Analytics Management API时似乎是一个相对常见的问题,很遗憾,没有答案是有帮助的。

我开始通过服务帐户使用Analytics Management API,该帐户具有对我的Google Analytics(分析)帐户的完全访问权限。在帐户级别授予了该用户“编辑,协作,读取和分析以及管理用户”的权限,这意味着它们也在属性级别和视图级别被继承。

我可以成功获得拥有访问权限的帐户,并插入新的网络媒体资源。

但是,我无法将我的Google Ads帐户链接到任何网络载体。每当我调用API时,都会收到403错误:

{"error":{"errors":[{"domain":"global","reason":"insufficientPermissions","message":"User does not have sufficient permissions for this web property."}],"code":403,"message":"User does not have sufficient permissions for this web property."}}

我检查了很多次,对于每个级别(帐户,媒体资源,甚至是视图),我的服务帐户都具有什么权限,总是有“编辑,协作,读取和分析以及管理用户”的权限。

以下是我尝试关联Google Ads帐户的方法:

<?php
require_once __DIR__ . '/vendor/autoload.php';
$KEY_FILE_LOCATION = __DIR__ . '/service-account-credentials.json';
$client = new Google_Client();
$client->setApplicationName("Hello Analytics Management API");
$client->setAuthConfig($KEY_FILE_LOCATION);
$client->setScopes([
  'https://www.googleapis.com/auth/plus.login',
  'https://www.googleapis.com/auth/analytics',
  'https://www.googleapis.com/auth/analytics.edit',
  'https://www.googleapis.com/auth/analytics.provision',
  'https://www.googleapis.com/auth/analytics.manage.users',
  'https://www.googleapis.com/auth/analytics.readonly'
]);
$analytics = new Google_Service_Analytics($client);
$adWordsAccount = new Google_Service_Analytics_AdWordsAccount();
$adWordsAccount->setCustomerId("XXX-XXX-XXXX");
$adWordsLink = new Google_Service_Analytics_EntityAdWordsLink();
$adWordsLink->setName("TestLink");
$adWordsLink->setAdWordsAccounts([$adWordsAccount]);
try {
  $analytics->management_webPropertyAdWordsLinks->insert(
    999999999, // Analytics Account ID
    "UA-999999999-1", // Tracking ID
    $adWordsLink
  );
} catch (apiServiceException $e) {
  print 'There was an Analytics API service error '
        . $e->getCode() . ':' . $e->getMessage();

} catch (apiException $e) {
  print 'There was a general API error '
      . $e->getCode() . ':' . $e->getMessage();
}

我知道我肯定使用了比我更多的作用域,但是仅使用https://www.googleapis.com/auth/analytics.edit会得到相同的结果。

下面是我使用的service-account-credentials.json(使用通过Google API控制台生成的密钥):

{
  "type": "service_account",
  "project_id": "...-230314",
  "private_key_id": "<PRIVATE_KEY_ID>",
  "private_key": "<PRIVATE_KEY>",
  "client_email": "dev-...@ga-....iam.gserviceaccount.com",
  "client_id": "<CLIENT_ID>",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/dev-...%40...-230314.iam.gserviceaccount.com"
}

提前感谢您的支持!

多利安(Dorian)

1 个答案:

答案 0 :(得分:0)

为了能够链接Google Analytics(分析)和Google Ads,执行链接的帐户必须是Google Analytics(分析)网络媒体资源中的编辑者(显然您已经做过),而且还需要是Google Ads帐户中的管理员

不是您的个人/公司Google帐户,而是服务帐户本身。您在凭据中的client_email属性中包含的电子邮件。

参考:Google Help Center

注意:

我不是100%肯定您能做到这一点。 Google Ads可能需要用户确认才能添加到帐户中,并且您无权访问服务帐户的邮箱这一事实可能使您无法执行该确认。 同样,我不确定,因此可以尝试,但是如果您无法将该用户添加到Google Ads帐户中,则必须找到另一种方法来使用您自己的电子邮件(而不是电子邮件)对API调用进行身份验证服务帐户。