问题排查

视频:观看 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 提供的信息有误。我们强烈建议您使用交互式开发环境 (IDE),例如 Eclipse(一个免费的开源 IDE,主要用于开发 Java,但也提供其他语言的插件),以便于您进行调试。它可让您设置断点并逐行验证代码。

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

如何获取帮助

您不可能始终仅凭一己之力找出并解决问题。 在论坛上提问可让数以千计的开发者看到您的问题,而这些开发者可能遇到过相同的问题。

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

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

解决问题

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

考虑分享

如果您在论坛中发布了一个关于之前没有出现过的错误的问题,并且您已经找到了解决方案,请考虑将其添加到讨论帖中。开发者下次遇到同样的问题时,便能够立即加以解决。

后续步骤

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

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