錯誤原因可能是環境設定不正確、軟體錯誤,或是使用者輸入無效的內容。無論來源為何,您都必須排解問題,然後修正程式碼或新增邏輯以處理使用者錯誤。本指南會介紹一些排解 Google Ads API 錯誤的最佳做法。
確保連線
請確認您可以存取 Google Ads API,且設定正確無誤。如果您的回應傳回任何 HTTP 錯誤,請務必謹慎處理這些錯誤,並確保您是透過程式碼存取想要使用的服務。
憑證會嵌入您的要求中,以便服務驗證您的身分。熟悉 Google Ads API 要求和回應的結構,特別是要在不使用用戶端程式庫的情況下處理呼叫。每個用戶端程式庫都會提供具體操作說明,說明如何在設定檔中加入憑證 (請參閱用戶端程式庫的 README)。
確認您使用的是正確的憑證。我們的快速入門導覽課程會逐步引導您取得您需要的正確組合。例如,下列回應失敗顯示使用者傳送的驗證憑證無效:
{ "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" }
}
]
}
我們所有的用戶端程式庫都會擲回封裝回應的例外狀況。建議您擷取這些例外狀況,並在記錄或疑難排解畫面中顯示訊息,就是個很好的切入點。將這項資訊與應用程式中的其他記錄事件整合,即可大致瞭解可能引發問題的原因。您在記錄檔中發現錯誤後,必須瞭解其代表的意義。
研究錯誤
請參閱常見錯誤說明文件,其中涵蓋最常見的錯誤。說明錯誤訊息、相關 API 參考資料,以及避免或處理錯誤的方法。
如果常見的錯誤說明文件並未明確提及相關錯誤,請參閱參考說明文件並尋找錯誤字串。
搜尋我們的支援管道,即可與其他開發人員分享使用 API 的經驗。有人可能會遇到並解決您所遇到的問題。
如果您遇到任何未記載的錯誤,請在論壇上留意。
Google Ads API 沿用了 Google Ads 核心產品的規則和限制,因此請前往 Google Ads 說明中心,取得驗證或帳戶限制問題的疑難排解說明。
排解應用程式問題時,網誌文章有時也會是很好的參考依據。
調查錯誤後,下一步就是判斷根本原因。
找出原因
查看例外狀況訊息以找出錯誤原因。查看回應後,請檢查要求,找出可能的原因。部分 Google Ads API 錯誤訊息的 GoogleAdsError
的 location
欄位中會包含 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 本身更多的背景資訊除外。
- 執行階段/解譯器版本和平台等其他資訊在疑難排解時或許也能派上用場。
修正相關問題
現在您已找出問題並想出解決方案,接著就來進行變更,並針對測試帳戶 (建議) 或實際工作環境 (如果錯誤僅適用於特定實際工作環境帳戶中的資料) 測試修正內容。
考慮分享
如果您曾在論壇張貼問題來解決先前在這裡找不到的錯誤,而已找到解決方案,請考慮將其新增至執行緒。下次開發人員遇到相同問題時可以立即解決。
後續步驟
現在,您已經解決了這個問題,是否注意到任何可以改善程式碼的方法,在一開始就避免這種情況?
建立完善的單元測試可大幅提升程式碼品質和可靠性。也能加快新變更的測試流程,確保這些變更不會破壞先前的功能。良好的錯誤處理策略還有另一個關鍵,就是呈現疑難排解所需的所有資料。