Google Maps API 付費方案網址授權疑難排解

在 Google Cloud Console 中管理用戶端 ID 的位置

付費方案用戶端 ID 管理功能會從地圖「憑證」頁面上 Google Cloud 的支援入口網站,遷移至「服務帳戶」部分下方。

「憑證」頁面上新的用戶端 ID 部分

注意事項:Google 地圖平台付費方案不再開放註冊或提供給新客戶。

Google 地圖平台付費方案用戶端 ID 僅限用於已獲明確授權的網址;如果您在未取得授權的網址使用用戶端 ID,系統就會傳回錯誤訊息。

如遇相關問題,Google 地圖平台付費方案客戶可按照這篇文章的說明,找出需要取得授權的網址。

基本概念

用戶端 ID 只能用於必須取得授權的網址,以免第三方在自己的網站中使用您的用戶端 ID;這類網址可以明確連往單一網頁,也可以連至整個網域。

如要取得授權網址的清單,或是要授權其他網址,請前往「憑證」頁面,捲動到「用戶端 ID」部分

您一次可新增最多 100 個網址,而每一個用戶端 ID 可連結最多 3,000 個已授權網址。假如您預計讓應用程式代管超過 3,000 個地點的 Google 地圖內容,請改用 API 金鑰。

如想進一步瞭解如何授權網址,請參閱開發人員指南

問題說明

如果應用程式所在的網址並未獲得用戶端 ID 使用授權,就無法透過用戶端 ID 使用 Google 地圖平台。在這種情況下,系統會根據應用程式嘗試載入的 API,向應用程式使用者顯示相關錯誤訊息,而且需要 Maps JavaScript API 才能運作的功能都將無法使用。

  • Maps JavaScript API 會顯示下列訊息:

    此網頁無法顯示 Google 地圖元素,因為這個網址並未獲得授權,無法使用所提供的 Google 地圖用戶端 ID。錯誤代碼:UnauthorizedURLForClientIdMapError

  • 如果您使用的是 Maps JavaScript API 3.18 版或更舊版本,系統會顯示下列訊息:

    Google 已停止支援此應用程式使用 Google 地圖平台功能,因為這個網站並未獲得授權,無法使用所提供的 Google 地圖用戶端 ID。如果您是這個應用程式的擁有者,請參閱開發人員指南,進一步瞭解如何註冊網址。

從應用程式移除用戶端 ID 並不是有效的修正方式*,因為這麼做會導致該應用程式失去所有的 Google 地圖平台付費方案權限。這表示您將無法享有:

  • 服務水準協議 (SLA) 的完善保障。
  • 客戶支援。
  • 更高的網路服務上限。
  • 商業等級條款及細則。
  • 公司內部網路的應用程式支援服務。

這表示凡是未正確使用有效 Google 地圖平台付費方案用戶端 ID 的僅限內部使用/付費應用程式,都將違反標準 Google 地圖平台服務條款的規定。

解決方法

首先,請確實找出需要使用用戶端 ID 的網址並進行授權,以利解決問題。

在多數情況下,您必須授權讓「應用程式」使用用戶端 ID。應用程式通常會使用多個有共通模式的網址,例如店家搜尋器所在網址可能是 example.com/storesstores.example.com。因此,您找出來的網址必須與自家應用程式使用的每個網址都相符。

注意事項:授權給 www.example.com 並「不會」讓 stores.example.comexample.com 的任何其他子網域一併獲得授權。

您授權的網址可以明確連往單一網頁,也可以連至整個網域 (包括其子網域),詳情請參閱開發人員指南。我們建議直接授權給模式大致類似的多個網址,但您必須是管理員才能進行這項操作。

注意事項:除非貴機構可完全控管網域之下的所有內容,否則我們不建議授權給整個網域。舉例來說,如果您授權給 blogspot.com 網域,表示所有人都可以透過該網域使用您的用戶端 ID,而且產生的費用都由您支付。較理想的做法是只授權給特定網誌,例如 googlegeodevelopers.blogspot.com 或該網誌中的特定網頁。

如何找出正確網址

網址通常列在瀏覽器的網址列中;在不使用 <iframe> 標記的公開網站上,通常可以輕易找到網址。如有疑問,您可以使用下列方法進行驗證。

有一些較複雜的應用程式載入的 Google 地圖平台網址,可能不是使用者在網址列中看到的網址;這種情形可能是因為網站使用了 <iframe> 標記,或是載入 API 的網頁網址是由伺服器動態產生並傳送至瀏覽器的。這時如要找出有問題的網址,就必須檢查從瀏覽器傳送至 Google 伺服器的特定 HTTP 要求。

瀏覽器會將載入 API 的要求傳送給 Google,而需要授權的網址就在這類要求的 Referer 標頭中。每一個 API 的載入網址都不同:

視應用程式設定的 API 載入方式而定,傳送至 maps.googleapis.com 的所有要求可能會傳給 maps.google.commaps-api-ssl.google.com。因此,在尋找上述要求時,需要留意的重點通常是路徑 (上方範例網址中的粗體字部分)。

在瀏覽器的 HTTP 標頭中找出網址

您必須先從瀏覽器中擷取上述要求,再查看要求中的 Referer 標頭。有許多現成的免費工具可用來擷取主要瀏覽器中的 HTTP 標頭,如下所列:

注意事項:您必須設定 Fiddler2 才能擷取 HTTPS 流量,請到這裡查看相關詳情。

如果您無法直接從瀏覽器擷取 HTTP 標頭,我們建議使用 Wireshark 等網路通訊協定分析工具來擷取 HTTP 流量。不過,Wireshark 的操作方式比上述工具更加複雜,如果您對 Wireshark 不熟悉,請上網查看相關教學

取得要使用的工具後,請按照下列步驟找出需要授權的網址:

  1. 啟動擷取工具,並確認工具會從瀏覽器擷取 HTTP 要求。
  2. 將瀏覽器指向無法使用您的用戶端 ID 載入 Google 地圖平台的應用程式,您應該會看到上文所列的其中一個錯誤訊息
  3. 停止擷取 HTTP 流量,這樣比較容易查看擷取到的流量。
  4. 尋找嘗試利用您的用戶端 ID 載入 Google 地圖平台的要求。舉例來說,如果您的應用程式嘗試載入 Maps JavaScript API,請找出像下列這樣的要求:
    GET /maps/api/js?client=gme-yourclientid HTTP/1.1
  5. HTTP 要求標頭會緊接在這一行後面,不會換行。請找出樣式如下的標頭:
    Referer: http://www.example.com/stores/find?zip=94043
  6. 需要經過授權才能使用您用戶端 ID 的網址就在這一行內。

透過瀏覽器的 JavaScript 控制台找出網址

如果您在未獲授權的網站上使用 API 金鑰或用戶端 ID,Maps JavaScript API 會在 window.console 中寫入錯誤訊息。您可以在錯誤訊息中找到正確的網址,方法是在主控台中搜尋如下所示的錯誤訊息:

Google Maps Platform error: UnauthorizedURLForClientIdMapError ...
Your site URL to be authorized: http://www.example.com/stores/find?zip-94043

想知道如何找出錯誤訊息,請參閱「在瀏覽器中檢查錯誤」一節的內容。

找出共通模式

為確保整個應用程式都能利用您的用戶端 ID 載入 Google 地圖平台,您必須在應用程式使用的全部網址中找出共通模式,然後按照開發人員指南說明的規則,授權給與符合該模式的相關網址。

這類網址模式通常就像目錄 (例如 example.com/stores) 或子網域 (例如 stores.example.com) 一樣很好辨認,一般只要查看幾個網址就能推斷出來。

如果您處理的應用程式較為複雜,可能就得針對會向使用者顯示並呈現地圖的網址,逐一重複進行上述步驟,但您有可能在花了大把時間和精神後,仍然無法找出所有的網址。因此,我們會建議您找開發人員幫忙找出網址模式。