Publicado em 24. janeiro 2023 por Jan Bunk
Nossos aplicativos modificam o navigator.geolocation
JavaScript API para dar a você o máximo de capacidades de desenvolvimento e aos seus usuários de aplicativos a experiência ideal.
Você pode usar as funções de geolocalização JavaScript naturalmente, desde que você mantenha as limitações mencionadas nesta página em mente.
openAppLocationSettings
Esta função abre a tela de informações do aplicativo no Android e as configurações do aplicativo no iOS, onde o usuário pode habilitar o acesso de localização para o aplicativo, mesmo que ele tenha previamente rejeitado as solicitações de permissão.
Você pode encontrar uma amostra de código e quando poderia fazer sentido chamar esta função na seção de tratamento de erros abaixo.
Você pode ouvir o appResumed
event para detectar quando o usuário retornou das configurações.
openDeviceLocationSettings
Esta função abre o aplicativo de configurações no Android onde o usuário pode habilitar os serviços de localização. No iOS ele também abre o aplicativo de configurações, mas, devido a limitações técnicas, não na página exata onde os serviços de localização são gerenciados.
Você pode encontrar uma amostra de código e quando poderia fazer sentido chamar esta função na seção de tratamento de erros abaixo.
Você pode ouvir o appResumed
event para detectar quando o usuário retornou das configurações.
Há um par de fontes potenciais de erro ao se obter a localização atual. Nós mantemos compatibilidade com a API de geolocalização original, mas também fornecemos informações adicionais sobre o que exatamente deu errado.
function getAppErrorMessage(error) {
if (error.hasOwnProperty("appMessage")) {
return error.appMessage;
}
else {
return null;
}
}
var options = {
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 0
};
navigator.geolocation.getCurrentPosition(function(position) {
// success
console.log("Latitude: " + position.coords.latitude + ", Longitude: " + position.coords.longitude);
}, async function(error) {
// error
switch(error.code) {
case error.PERMISSION_DENIED:
// error.message is always "User denied Geolocation" to be consistent with browser behaviour
console.log("User denied Geolocation");
// Additional information only available for app users:
if (getAppErrorMessage(error) === "Permission denied") {
console.log("User did not grant the app permission to access the location, but we can try again later.");
}
else if (getAppErrorMessage(error) === "Permission denied permanently") {
console.log("User did not grant the app permission to access the location and can only enable the permissions via the app settings.");
// You can open the app settings like this:
await openAppLocationSettings();
}
else if (getAppErrorMessage(error) === "Location service disabled") {
console.log("User did not enable the location service setting in the device settings, even after being prompted to do so by the app.");
// You can open the device's location settings like this:
await openDeviceLocationSettings();
}
break;
case error.POSITION_UNAVAILABLE:
// can occurr in browsers with message "Unknown error acquiring position", but not used by the app at the moment
console.log("Unknown error acquiring position");
break;
case error.TIMEOUT:
// error.message is always "Position acquisition timed out" to be consistent with browser behaviour
console.log("The request to get user location took longer than " + options.timeout + " milliseconds.");
break;
}
}, options);
navigator.geolocation.getCurrentPosition
, você não receberá de volta um GeolocationCoordinates
ou GeolocationPositionError
object, então não verifique o seu tipo. No entanto, você ainda pode acessar todas as propriedades esperadas.