Google DFA 报告 - 错误请求 (400) 无效的 ProfileID

Posted

技术标签:

【中文标题】Google DFA 报告 - 错误请求 (400) 无效的 ProfileID【英文标题】:Google DFA Reporting - Bad Request (400) Invalid ProfileID 【发布时间】:2016-07-02 04:47:20 【问题描述】:

我正在尝试使用 Double Click for Advertisers API (DFA)。我已经探索了“Try it”并通过谷歌开发者控制台测试了 Api,它按预期工作。我能够捕获授权令牌并执行获取和发布请求(通过浏览器和编程方式)。 但是,当我尝试使用 donet api 2.4 以编程方式执行完全相同的操作时,生成的身份验证令牌不允许我执行任何请求,它总是返回 HTTP 400 错误请求,原因是 Invalid ProfileID。

我不确定 client_secrets.json 是否正确,但我是使用有权访问报告的同一电子邮件帐户创建的。


  "installed": 

    "client_id": "<client_id>.apps.googleusercontent.com",
    "project_id": "<project_id>",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://accounts.google.com/o/oauth2/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_secret": "<secret>",
    "redirect_uris": [ "urn:ietf:wg:oauth:2.0:oob", "http://localhost" ]
  

我使用了下面的凭据代码:

private static readonly IEnumerable<string> scopes = new[] 
  DfareportingService.Scope.Dfareporting,
  DfareportingService.Scope.Dfatrafficking
;    
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                        GoogleClientSecrets.Load(stream).Secrets,
                      scopes,
                        "dfa-user", CancellationToken.None,
                        new FileDataStore("DfaReporting.Samples")).Result;

生成的令牌为我提供以下信息:


 "issued_to": "<client_id>.apps.googleusercontent.com",
 "audience": "<client_id>.apps.googleusercontent.com",
 "scope": "https://www.googleapis.com/auth/dfareporting https://www.googleapis.com/auth/dfatrafficking",
 "expires_in": 3073,
 "access_type": "offline"

我上面提到的库可以在 GitHub 上找到:https://github.com/googleads/googleads-dfa-reporting-samples/tree/master/dotnet/v2.4

我错过了什么?

【问题讨论】:

失败的请求在哪里?您只发布了您的身份验证代码,这不足以找到您的错误。请记住,进行身份验证的用户必须与拥有您尝试为其请求数据的个人资料的用户相同。 它没有完整的代码,但基本上服务是我获取凭据的方法的结果。给出异常(错误请求)的请求是 service.Reports.Run DfareportingService service = DfaReportingFactory.getInstance(); (...) // Run the report. File file = service.Reports.Run(profileId, reportId).Execute() 首先执行 userprofiles.list 您尝试为用户无权访问的配置文件生成报告。 【参考方案1】:

首先确保您已设置correctly。

    您必须拥有 DCM 帐户。有关注册信息,请参阅 Advertisers/Agencies。 您的 DCM 帐户必须启用 API 访问。请联系您的 DoubleClick 代表或 DCM 支持团队寻求帮助。 (dcm-support@google.com) 您必须拥有可以访问此帐户的用户配置文件。让您的 DCM 帐户管理员创建与此帐户关联的用户个人资料。

在我看来,您尝试使用的身份验证者无权访问您尝试请求的配置文件。

回应评论:

如果您使用的是 .net 客户端库,我不明白您为什么要手动调用以下请求,因为您已发表评论

https://www.googleapis.com/dfareporting/v2.4/userprofiles?access_token=<access token> 

我也不明白如果您使用的是 .Net 客户端库,并且以下请求在您不发送时可能会返回无效的配置文件 ID。如果用户无权访问任何配置文件,它可能不会返回任何配置文件。

service.UserProfiles.List().Execute();

如果您发送的配置文件 ID 无效,这可能会返回无效的配置文件 ID。

service.UserProfiles.Get(profileId).Execute();

运行报告

为了能够生成报告,用户必须有权访问配置文件和报告。您的错误消息意味着用户无权访问您需要使用具有访问权限的用户登录或授予用户访问权限的配置文件。

service.Reports.Run(profileId,reportId).Execute();

【讨论】:

通过 GET googleapis.com/dfareporting/v2.4/…> 我得到了一个空的配置文件列表,这意味着在 client_secrets.json 上传递的凭据没有正确链接到我正在使用的 DFA 帐户。我怎么知道我正确设置了客户端密码?我已按照文档中的说明进行操作。创建了一个项目,启用了 API 并创建了一个秘密。 不,您的个人资料列表为空,因为该用户没有任何个人资料。如果凭据不正确,您将收到错误并且根本无法调用 API。 至于正确设置检查 nr 2 和 3。确保您有访问权限。 我会检查您的提示并稍后编辑我的评论。也只是为了回答我为什么要手动测试它是为了排除我的令牌是否有效,因为使用 dotnet api 我只收到了错误的请求。 service.UserProfiles.List().Execute(); 给出 0 个结果。在我的问题中,我没有将 profileID 和 ReportID 放在代码示例中,但我有它,它们与我在 Web 上的“Try it API”上测试时使用的相同。摘要看起来我的用户没有个人资料。那时我怎么拥有它们?我用于登录 DFA Backoffice 的电子邮件帐户与我用于创建项目、客户端机密和在开发人员控制台中启用 api 的电子邮件帐户相同。我完全不明白配置文件是如何工作的。

以上是关于Google DFA 报告 - 错误请求 (400) 无效的 ProfileID的主要内容,如果未能解决你的问题,请参考以下文章

[使用Flask和Google Cloud Storage进行400错误的错误请求

HttpError 400:访问 Google Extended Trends API for Health 时出现错误请求

Google API OAuth2.0 JWT 返回 400 - 错误请求

来自 C#/.NET 服务的 Google Play Android Developer API - (400) 错误请求

Apache:网址中的 %25(400 错误请求)

家庭助理 - 请求失败错误代码 400