问题排查

视频:观看 2019 年研讨会上的错误处理讲座

不正确的环境设置、软件中的错误或用户的无效输入都会导致出现错误。无论何种原因,您都需要进行问题排查,并修复代码或添加逻辑以便处理用户错误。本指南探讨了 Google Ads API 错误问题排查方面的一些最佳做法。

确保网络连接正常

  1. 确保您可以访问 Google Ads API 并已进行正确的设置。如果您的响应返回任何 HTTP 错误,请确保谨慎处理这些错误,并确保可以通过代码访问您要使用的服务。

  2. 您的凭据已嵌入到请求中,以便相关服务对您进行身份验证。熟悉 Google Ads API 请求和响应的结构,尤其是您要在不使用客户端库的情况下处理调用时。每个客户端库都附带了有关如何在配置文件中添加凭据的具体说明(请参阅客户端库的 README 文件)。

  3. 确认您使用的是正确凭据。我们的快速入门逐步说明了如何完成所需的正确设置。例如,下面的响应故障表明用户发送了无效的身份验证凭据:

    {
      "error": {
        "code": 401,
        "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. Visit https://developers.google.com/identity/sign-in/web/devconsole-project.",
        "status": "UNAUTHENTICATED",
        "details": [
          {
            "@type": "type.googleapis.com/google.rpc.DebugInfo",
            "detail": "Authentication error: 2"
          }
        ]
      }
    }
    

如果您在按照上述步骤操作后仍然遇到问题,那么应该深入了解如何对 Google Ads API 错误进行问题排查。

确定问题

Google Ads API 通常将错误报告为 JSON 故障对象,其中包含响应中的一系列错误。这些对象会提供错误代码以及详细说明错误发生原因的消息。它们是帮助您了解可能存在什么问题的第一手资料。

{
  "errors": [
    {
      "errorCode": { "fieldMaskError": "FIELD_NOT_FOUND" },
      "message": "The field mask contained an invalid field: 'keyword/matchtype'.",
      "location": { "operationIndex": "1" }
    }
  ]
}

我们所有的客户端库都会抛出异常 将错误封装在响应中。捕获这些异常并在日志或问题排查屏幕上呈现相关信息是一个很好的入手点。将此信息与 可让您大致了解可能是什么原因引发问题。 在日志中找出错误后,您需要找出 。

研究错误

  1. 请参阅我们的常见错误 文档,其中涵盖了最常遇到的错误。它 说明了错误消息、相关 API 参考,以及如何避免 处理错误。

  2. 如果我们的常见错误文档并未明确提及您遇到的错误,请参阅我们的参考文档并查找错误字符串。

  3. 搜索我们的支持渠道,以了解其他开发者分享的 API 使用经验。其他人可能已经遇到并解决了您遇到的问题。

  4. 如果您遇到任何未记录的错误,请将此问题提交给 论坛上的关注

  5. 如需获取有关验证或账号限制问题排查方面的帮助,请访问 Google Ads 帮助中心,因为 Google Ads API 继承了核心 Google Ads 产品的规则和限制。

  6. 在排查应用的问题时,偶尔也可看看博文这一很好的参考资料。

在研究错误之后,接下来应该确定错误的根本原因。

找出原因

查看异常消息可确定错误的原因。在查看响应后,请查看请求,了解产生错误的可能原因。某些 Google Ads API 错误 消息包含 fieldPathElements location字段 GoogleAdsError,用于指示 错误。例如:

{
  "errors": [
    {
      "errorCode": {"criterionError": "CANNOT_ADD_CRITERIA_TYPE"},
      "message": "Criteria type can not be targeted.",
      "trigger": { "stringValue": "" },
      "location": {
        "operationIndex": "0",
        "fieldPathElements": [ { "fieldName": "keyword" } ]
      }
    }
  ]
}

排查问题时,可能是因为您的应用提供了 向 API 传递错误信息我们强烈建议您使用 开发环境 (IDE),如 Eclipse(一款免费的 和开源 IDE(主要用于开发 Java),但有用于 )来协助您进行调试。它可让您设置断点并逐行验证代码。

仔细检查以确保请求与您的各项应用输入相匹配,例如,广告系列的名称可能无法与请求成功匹配。请确保 您发送 字段掩码 Google Ads API 支持稀疏更新 在 mutate 请求中,忽略字段掩码中的某个字段表示 API 请勿对其进行更改。如果您的应用检索某个对象,对其进行更改 并将其发送回,那么您可能正在写入一个 支持更新。请查看参考文档中对该字段的说明 文档,看看在构建 可以更新该字段。

如何获取帮助

您不可能始终仅凭一己之力找出并解决问题。 在论坛上提问会暴露出 向成千上万的开发者提出自己的问题 而他们可能不得不处理 问题。

尽可能在查询中包含尽可能多的信息。 建议提供以下信息:

  • 经过整理的 JSON 请求和响应。请务必移除敏感信息,如您的开发者令牌或 AuthToken。
  • 代码段。如果您遇到与特定语言相关的问题,或者需要有关 API 使用方面的帮助,可以提供代码段来解释您的操作。
  • RequestId。如果您提出的请求是针对生产环境的,那么这一信息可帮助 Google 开发者关系团队成员找到您的请求。我们建议您在日志中注册 requestId,使其作为属性包含在异常中,这些异常封装了响应错误,而且比单独的 requestId 包含更多上下文。
  • 其他信息在问题排查时也很有用,如运行时/解释器版本以及平台。

解决问题

现在您已经确定问题并知道了解决方案,接下来您应该在测试账号中进行更改并测试修复结果(这是推荐的做法;但如果错误仅适用于特定生产账号中的数据,请在生产环境中进行)。

考虑分享

如果您在论坛上张贴了一个问题 并且您找到了解决方案,那么您可以考虑将其添加到 线程。开发者下次遇到同样的问题时就能够解决 。

后续步骤

现在您已经解决了问题,那么是否注意到有什么方法可以改进代码,从而提前避免出现此类问题呢?

设计一组恰当的单元测试有助于显著提高代码的质量和可靠性。此外,这还可以加快新的更改的测试过程,确保它们不会破坏以前的功能。好的错误处理策略 来显示排查问题所需的全部数据。