疑難排解

影片:觀看 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 API 沿用了 Google Ads 核心產品的規則和限制,因此請前往 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 本身更多的背景資訊除外。
  • 執行階段/解譯器版本和平台等其他資訊在疑難排解時或許也能派上用場。

修正相關問題

現在您已找出問題並想出解決方案,接著就來進行變更,並針對測試帳戶 (建議) 或實際工作環境 (如果錯誤僅適用於特定實際工作環境帳戶中的資料) 測試修正內容。

考慮分享

如果您曾在論壇張貼問題來解決先前在這裡找不到的錯誤,而已找到解決方案,請考慮將其新增至執行緒。下次開發人員遇到相同問題時可以立即解決。

後續步驟

現在,您已經解決了這個問題,是否注意到任何可以改善程式碼的方法,在一開始就避免這種情況?

建立完善的單元測試可大幅提升程式碼品質和可靠性。也能加快新變更的測試流程,確保這些變更不會破壞先前的功能。良好的錯誤處理策略還有另一個關鍵,就是呈現疑難排解所需的所有資料。