透過 Geolocation API 可以讓 Progressive Web App 存取用戶的位置,方便實作地理資訊相關應用。
https://get.geojs.io/v1/ip/geo.json
if (navigator.geolocation) {
console.log("Geolocation is supported!");
} else {
console.log("Geolocation is not supported for this Browser/OS.");
}
navigator.geolocation.getCurrentPosition
一次性取得用戶地理位置資訊。var startPos;
var geoSuccess = function (position) {
startPos = position;
console.log(
"lat",
startPos.coords.latitude,
"lng",
startPos.coords.longitude
);
};
navigator.geolocation.getCurrentPosition(geoSuccess);
navigator.geolocation.watchPosition
持續追蹤用戶地理位置資訊
var id, target, options;
function success(pos) {
var crd = pos.coords;
if (target.latitude === crd.latitude && target.longitude === crd.longitude) {
console.log("成功追蹤");
navigator.geolocation.clearWatch(id);
}
}
function error(err) {
console.warn("ERROR(" + err.code + "): " + err.message);
}
target = {
latitude: 0,
longitude: 0,
};
options = {
enableHighAccuracy: false,
timeout: 5000,
maximumAge: 0,
};
id = navigator.geolocation.watchPosition(success, error, options);
clearWatch
navigator.geolocation.clearWatch(id);
讓使用者同意位置共用的時機,在 App 啟動時就請求權限會是最爛的時機,而且對於在頁面載入時要求提供位置的網站,用戶通常會不信任。
在 Android 5.0 之後的實作上也是在要使用時才會向使用者請求權限,所以在實作上要假設:
在用戶使用特定功能時才讓用戶主動操作並出現提示,且要準備好使用被拒絕的備案。