问题排查

视频:观看 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 错误消息会在 GoogleAdsErrorlocation 字段中包含 fieldPathElements,指示错误发生在请求中的何处。例如:

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

排查问题时,可能是因为您的应用向 API 提供了错误的信息。我们强烈建议使用 Eclipse 等交互式开发环境 (IDE) 来帮助您进行调试。Eclipse 是一个免费的开源 IDE,主要用于开发 Java,但具有用于其他语言的插件。它可让您设置断点并逐行验证代码。

仔细检查以确保请求与您的各项应用输入相匹配,例如,广告系列的名称可能无法与请求成功匹配。请务必发送与您要进行的更新匹配的字段掩码,因为 Google Ads API 支持稀疏更新。在 mutate 请求中,如果省略字段掩码中的某个字段,则表示 API 应不对其进行处理。如果您的应用检索对象,对其进行更改,然后将其发回,则可能是因为您在写入一个不支持更新的字段。请查看参考文档中有关字段的说明,了解对于何时或您是否可以更新该字段是否有任何限制。

如何获取帮助

您未必总能独自找出并解决问题。 在论坛上提问会将您的问题暴露给成千上万的开发者,而他们可能必须处理同样的问题。

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

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

解决问题

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

考虑分享

如果您在论坛中发布了一个与之前未出现过的错误相关的问题,并且您找到了解决方案,请考虑将其添加到会话串中。下次开发者遇到同样的问题时,就能立即解决。

后续步骤

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

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