疑難排解

影片:觀看 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 支援零散更新。在變更要求中從欄位遮罩中省略欄位,表示 API 應保留該欄位。如果應用程式擷取物件、進行變更,然後傳回,您可能會寫入不支援更新的欄位。請參閱參考說明文件中該欄位的說明,瞭解您是否可以更新該欄位,以及更新的時間限制。

如何取得協助

有時你無法自行找出問題並解決問題。在論壇上提問,您的問題就會向成千上萬的開發人員公開,他們可能曾處理過相同的問題。

請盡量在查詢中加入更多資訊。建議提供的資訊包括:

  • 經過清理的 JSON 要求和回應。請務必移除開發人員憑證或 AuthToken 等機密資訊。
  • 程式碼片段。如果您遇到特定語言的問題,或需要使用 API 的相關協助,請附上程式碼片段,以便說明您正在執行的操作。
  • RequestId。這樣一來,Google 開發人員關係維繫團隊成員就能找出您在實際環境中提出的要求。建議您在記錄中註冊 requestId,做為封裝回應錯誤的例外狀況屬性,以及其他比 requestId 更豐富的背景資訊。
  • 排解問題時,其他資訊 (例如執行階段/解譯器版本和平台) 也可能很有幫助。

修正相關問題

既然您已找出問題並提出解決方案,現在是時候進行變更,並針對測試帳戶 (建議) 或正式版 (如果錯誤只適用於特定正式版帳戶中的資料) 測試修正項目。

考慮共用

如果您在論壇中發布有關錯誤的問題,且該問題之前未曾出現在該論壇中,但您已找到解決方法,建議您將解決方法加入該討論串。下次開發人員遇到相同問題時,就能立即解決。

後續步驟

您現在已解決這個問題,是否發現任何方法可以改善程式碼,避免日後再次發生這種情況?

建立一組優質的單元測試,有助於大幅提升程式碼品質和可靠性。這也能加快測試新變更的程序,確保這些變更不會破壞先前的功能。良好的錯誤處理策略也是提供所有必要資料以便排解問題的關鍵。