在使用地理定位API時,你需要知道什麼?

語言: CN / TW / HK

簡介

當構建一個需要訪問客戶精確位置的應用程式時,地理位置API就會派上用場。除其他原因外,你可以使用位置服務為你的客戶提供定製的體驗,或者在建立一個需要實時訪問位置的應用程式時使用。一個這樣的應用是一個健身應用,它需要精確、實時的位置資料來跟蹤使用者在散步或慢跑時的路線。

由於隱私和安全問題,地理定位API在訪問使用者位置資料之前需要獲得許可。在這個時代,要想在網上擁有一定程度的隱私和安全,就必須處於極端的偏執狀態,你應該溫柔地、負責任地請求訪問位置資料,讓使用者給予許可。此外,擁有這種位置資料的同時,還要承擔更大的倫理、道德和法律責任。

因此,僅僅知道如何使用地理定位API是不夠的。有效和負責任地使用它也同樣重要。

本文的主要目標是向你介紹地理位置API的主要功能,並解釋你如何有效地使用它。我們還將進一步強調你作為開發者在使用地理位置API時的責任,並探討瀏覽器的支援程度。

讓我們在下面的章節中首先簡要介紹一下地理定位API。

什麼是Geolocation API?

地理定位API是一個內建的API,用於訪問客戶的裝置位置。大多數最新版本的桌面瀏覽器完全支援這一功能,但你不能說它們的移動瀏覽器也是如此。因此,如果一些瀏覽器還沒有完全支援這個API,你就需要有一個後備選項。

位置資料的準確性很大程度上取決於客戶端裝置所使用的地理定位裝置。如果裝置有一個GPS接收器,地理定位API可以從GPS檢索位置資料。它還可以從IP地址、WiFi和藍芽MAC地址等推斷出使用者位置。地理定位API與客戶的裝置用來訪問地理定位資料的技術無關。

不能保證地理位置資訊的準確性,因為在沒有更準確的技術(如客戶端裝置上的GPS接收器)的情況下,該API也可以使用IP地址來推斷使用者位置。

瀏覽器通過navigator.geolocation 屬性暴露了這個API。然而,正如已經提到的,你需要謹慎行事,因為瀏覽器對這個API的支援還遠未普及。你應該在檢查了它的可用性之後再訪問它;這將確保你在客戶使用不支援該API的瀏覽器的情況下有一個後備選項。

一個後備選項是使用第三方地理定位服務。

``` if ("geolocation" in navigator) { // Access the API navigator.geolocation.getCurrentPosition(successCallback); } else { // Use a third-party geolocation service console.log("Browser does not support the Geolocation API"); }

```

在我們進行下一節之前,你應該注意,大多數或所有的瀏覽器只有在你的網站使用安全的HTTPS協議時才會暴露出地理位置API。

獲取使用者位置

現在讓我們來學習如何使用地理定位API訪問使用者位置,以及這樣做時的一些關鍵考慮因素。

首先,我們將看到你如何使用getCurrentPosition 方法來訪問使用者位置。getCurrentPosition 方法最多需要三個引數。

第一個(也是唯一需要的)引數是一個回撥函式,在API成功接收到位置資料時呼叫。API將裝置位置資料作為引數傳遞給回撥函式。

第二個是一個可選的回撥函式,當發生錯誤時呼叫,第三個引數是一個選項物件。

下面的程式碼片段說明了你如何使用getCurrentPosition 方法來訪問位置資料。

``` const successCallback = (geolocation) => { console.log(geolocation); };

const errorCallback = (error) => { console.log(error); };

const geolocationOptions = { enableHighAccuracy: true, maximumAge: 10000, timeout: 5000, };

if ("geolocation" in navigator) { // Access the API navigator.geolocation.getCurrentPosition( successCallback, errorCallback, geolocationOptions ); } else { // Use a third-party geolocation service console.log("Browser does not support the Geolocation API"); }

```

這就是使用Geolocation API的getCurrentPosition 方法訪問你的客戶的裝置位置的全部內容。

然而,在使用這種方法訪問客戶端位置時,有一些最佳實踐需要了解。

響應使用者的操作,訪問地理位置API

不要試圖在頁面載入時立即訪問地理定位API。如果你這樣做,API將立即請求使用者訪問他們的位置。

這提供了一個糟糕的使用者體驗,並會嚇壞你的一些客戶。在徵求同意的時候,儘量做到非常耐心和溫和,以使你的客戶信任你的位置資料。

解釋你為什麼需要位置資料

在瀏覽器顯示 "本網站想知道您的位置 "的提示資訊之前,向用戶解釋您為什麼需要他們的位置資料,以及您打算如何使用這些資料,這是一個好的做法。

此外,你還可以包括一個指向你的隱私政策和服務條款的連結。

明確說明對位置資料的需求

在你的行動呼籲指令中明確說明對位置資料的需求。例如,如果你有一個文字為 "顯示我附近的商店 "的按鈕或連結,你也可以在按鈕旁邊或作為一個工具提示提供一個附帶的資訊,如 "這項服務需要訪問你的位置"。

因此,如果瀏覽器要求使用者授權訪問他們的位置,這並不令人驚訝。

設定一個超時,以防響應時間過長

如果客戶端使用的是像手機這樣帶有GPS接收器的裝置,那麼訪問位置資料的時間,除其他因素外,取決於大氣狀況和使用者的位置。GPS可能需要一分鐘或更長的時間來三角定位裝置的位置。

你可以決定可接受的等待時間是多少,如果操作時間過長就超時。

此外,如果使用者有意或無意地沒有迴應許可權請求,設定超時也同樣有用。這時,你可以使用一個替代的第三方地理位置服務,或者顯示一個漂亮的訊息,如 "應用程式訪問你的位置花了太長時間。也許稍後再試。"

優雅地處理錯誤

可能會發生錯誤,或者使用者可以拒絕授予對位置資料的訪問。你總是可以傳遞另一個回撥函式作為第二個引數,用它來優雅地處理錯誤。

這很有用,因為瀏覽器有禁用位置查詢的功能。如果使用者在他們的瀏覽器中禁用了地理位置查詢功能,或者拒絕授予許可權,那麼傳遞給getCurrentPosition 方法的第二個回撥函式將被呼叫,並帶有錯誤物件。此後,你可以採取適當的行動。

觀察使用者位置

有時訪問一次地理位置資料可能是不夠的,特別是當用戶在移動時。你將不得不使用watchPosition 方法來訪問位置資料,只要使用者的位置有變化。

watchPosition 方法與getCurrentPosition 方法類似。第一個引數是當API收到位置資料時呼叫的回撥函式,它也是唯一需要的引數。第二個引數也是一個回撥函式,但它是可選的。它在出現錯誤的情況下被呼叫。第三個引數是一個可選的物件。

getCurrentPosition 方法不同,watchPosition 方法返回一個數字ID,用於唯一識別位置觀察者。你可以使用這個ID,用clearWatch 方法停止監視使用者位置。

你傳遞給watchPosition 方法的第一個回撥函式被多次呼叫,以便在客戶移動時或有更精確的地理位置資料時更新客戶的位置。

下面的程式碼塊說明了你如何使用watchPosition 方法。它與getCurrentPosition 方法非常相似。唯一的區別是,watchPosition 方法返回的唯一數字ID。

``` const successCallback = (position) => { console.log(position); };

const errorCallback = (error) => { console.log(error); };

let geolocationID;

if ("geolocation" in navigator) { // Access the API geolocationID = navigator.geolocation.watchPosition( successCallback, errorCallback ); } else { // Use a third-party geolocation service console.log("Browser does not support the Geolocation API"); }

```

這就是地理定位API的watchPosition 方法的全部內容。然而,在使用這個方法時,有一些事情你應該考慮到。

這篇文章的目的是教你如何以最佳方式使用地理定位API。因此,上一小節中強調的所有注意事項也適用於使用watchPosition 方法時。

此外,你應該注意以下幾點。

注意效率

正如上面所強調的,觀察使用者位置需要多次呼叫watchPosition 方法。無論如何,這都是一個計算成本很高的操作。它需要計算資源來執行。

隨著移動裝置的廣泛使用,你需要注意反覆呼叫watchPosition 方法在效能方面對使用者的影響。同樣地,使用GPS接收器的移動裝置在三角測量裝置位置時,會監聽衛星訊號。不斷地觀察使用者的位置會消耗大量的電池電量。

只有在必須的情況下才觀看位置

如上所述,觀察使用者位置可能是一個昂貴的操作。你應該使用watchPosition ,如果你確定這樣做會提高你的客戶的服務質量。

如果你必須觀察使用者位置,最好是在地理位置資訊停止變化時停止追蹤。確保在不再需要觀察使用者位置時停止觀察。我們將在下一節強調如何停止觀察使用者位置。

如何停止觀察使用者位置

如果你開始觀察使用者位置,那麼你肯定要在某個時候停止觀察。

你可以使用clearWatch 方法來停止監視使用者位置。clearWatch 方法接受由watchPosition 方法返回的唯一的監視ID作為引數。

``` // Start watching user location const geolocationID = navigator.geolocation.watchPosition( successCallback, errorCallback );

// Stop watching after 5 seconds setTimeout(function () { navigator.geolocation.clearWatch(geolocationID); }, 5000);

```

上面的程式碼片段說明了你如何使用clearWatch 方法來停止監視使用者位置。

你在使用地理定位API時的責任

現在你知道了什麼是地理位置API以及如何使用它,讓我們看看你作為一個開發者的責任。

當使用這個API時,你基本上是要求使用者把他們的位置信任給你。這種敏感資料對你來說有很多責任。

下面強調的是其中的一些責任。它們主要集中在資料保護和隱私政策方面。這不一定是一個詳盡的清單,但它涵蓋了大部分的基本內容。

遵守資料保護法

在您使用地理位置API時,您有責任遵守您管轄範圍內的相關隱私和資料保護法律。您應該知道,一些資料隱私和安全立法超越了地域界限。

一個很好的例子是歐盟通過的《通用資料保護條例》(GDPR)。如果你的應用程式被歐盟國家的人使用,無論你在世界何處,不遵守GDPR都會招致嚴厲的懲罰。

服務條款和隱私政策

當您使用地理定位API時,您要求使用者授權訪問敏感資料。因此,你有責任提供訪問你的服務條款和隱私政策。
提供服務條款和隱私政策將告知使用者使用服務的隱私影響,並幫助他們做出知情決定。

可能沒有多少人會閱讀服務條款和隱私政策,但作為一個開發者,你已經完成了你的職責。你也可以在服務提供之前,提出 "通過使用這項服務,你同意我們的服務條款和隱私政策 "的資訊。

為預期目的使用資料

你應該在你的服務條款中明確說明你打算如何使用地理位置資料。您還應將資料用於指定的目的,並在此後將其丟棄,除非使用者明確允許您不這樣做。

允許使用者刪除他們的資料

如果您打算將地理位置資料儲存在資料庫中,您應給予使用者自由和手段,以便在他們希望時刪除或更新資料。

保護使用者資料並保障其隱私

保護客戶隱私的責任完全在你的肩上。一種可能的保障措施是對資料進行加密。資料加密是至關重要的,尤其是當你打算將資料儲存到資料庫中,或者使用者已經明確允許你將資料傳輸給第三方時。

瀏覽器對地理定位API的支援

正如在介紹部分所強調的,一些瀏覽器,特別是移動瀏覽器,還沒有實現地理位置API的一些功能。

儘管移動瀏覽器支援,但大多數流行的現代瀏覽器的最新版本都支援地理定位API。如果你的目標是為所有的瀏覽器提供支援,那麼你最安全的做法是有一個後備選項。後備選項的一個典型例子是使用第三方地理定位服務,這些服務大多依靠不太準確的IP地址來推斷地理定位資料。

下面的圖片顯示了caniuse對地理位置API的瀏覽器支援情況。

Geolocation API browser support

結論

如上文各小節所述,如果你想在瀏覽器中訪問客戶的位置資料,地理定位API可能永遠是你的首選。由於隱私原因,瀏覽器在允許你的應用程式訪問使用者的位置資料之前需要使用者的許可。

位置資料只有在客戶的裝置使用的地理定位技術的情況下才會準確。地理定位API與裝置使用的底層地理定位技術無關。它可以使用GPS、IP地址、藍芽和WiFi MAC地址等來推斷使用者的地理位置。因此,位置可能並不總是準確的。帶有GPS接收器的移動裝置往往能提供更多的準確性。

在使用地理定位API時,有一些你需要遵循的最佳做法。它們將增加你獲得使用者位置資料的機會,並使你的客戶對其安全和隱私建立信心。這也將增加採用你的產品和服務的可能性。

在獲得客戶的位置資料後,你有責任提供隱私和資料保護。大多數國家都有可能適用於你的隱私和資料保護立法。不遵守這些規定將使你陷入困境。

希望你喜歡閱讀這篇文章。你有更多關於如何有效和負責任地使用地理定位API的提示嗎?請在下面的評論區告訴我。

The postWhat you need to know while using the Geolocation APIappeared first onLogRocket Blog.