疑難排解

影片:觀看 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),主要用於開發 Java,但具備其他語言的外掛程式,以協助您偵錯。能讓您設定中斷點,並逐行執行程式碼。

請再次檢查要求,確認要求與應用程式的輸入內容相符 (例如廣告活動名稱可能沒有傳送至要求)。請務必傳送與要進行的更新相符的欄位遮罩,Google Ads API 支援稀疏更新功能。如果您在變更請求中省略欄位遮罩中的欄位,API 應單獨保留該欄位。如果您的應用程式擷取、進行變更後傳回物件,您可能寫入不支援更新的欄位。請查看參考說明文件中的欄位說明,瞭解該欄位在何時或是否可以更新時是否有任何限制。

如何取得協助

您未必能夠自行找出並解決問題。 如果您在論壇上提問,就會有數千名必須處理相同問題的開發人員看到您的問題。

請在查詢中盡可能加入所有相關資訊。 建議提供的資訊包括:

  • 清理的 JSON 要求和回應。請務必移除機密資訊,例如您的開發人員權杖或 AuthToken。
  • 程式碼片段。如果您遇到特定語言的問題,或想取得使用 API 的相關協助,請附上一段能說明您用途的程式碼片段。
  • RequestId。如此一來,如果是針對實際工作環境發出的要求,Google 開發人員關係團隊成員就能找到您的要求。建議您在記錄中註冊 requestId 做為屬性,在封裝回應錯誤及比 requestId 本身更多的例外狀況中。
  • 執行階段/解譯器版本和平台等其他資訊,在疑難排解時也能派上用場。

修正相關問題

現在您已找出問題所在並想出解決方案,現在可以進行變更,然後針對測試帳戶 (建議做法) 或正式環境 (如果錯誤僅適用特定正式版帳戶中的資料) 測試修正結果。

考慮分享

如果您曾在論壇中張貼問題,與先前未曾發現的錯誤有關,但您已找到解決方案,請考慮將其新增至討論串。下次遇到相同問題時,開發人員可以立即解決問題。

後續步驟

現在您已經解決了這個問題,請問有沒有發現任何可以改善程式碼的方法,以免發生此問題?

建立一組良好的單元測試,可大幅提升程式碼的品質和可靠性。它還能加快測試新變更的流程,以確保先前的功能不會中斷。理想的錯誤處理策略,也是找出疑難排解所需的所有必要資料的關鍵。