Location Permission é uma permissão que um aplicativo móvel solicita ao usuário para acessar dados sobre sua localização geográfica. Sem essa permissão, o aplicativo não pode determinar as coordenadas do dispositivo e, portanto, não pode fornecer recursos de geolocalização. De acordo com Apple Developer Documentation, 2024, todos os aplicativos que usam serviços de geolocalização são obrigados a solicitar o consentimento explícito do usuário por meio de um diálogo do sistema.
Pontos principais
Location Permission é um mecanismo do sistema operacional que regula o acesso dos aplicativos aos dados de localização geográfica do dispositivo. Sem o consentimento explícito do usuário, o aplicativo não pode obter coordenadas GPS, dados de redes Wi-Fi ou informações de torres de celular.
As plataformas móveis Android e iOS implementam seu próprio sistema de permissões, mas a lógica geral é a mesma: o aplicativo declara as permissões necessárias no manifesto ou arquivo de configuração e as solicita em tempo de execução. De acordo com Android Developers, 2024, a partir do Android 10, todas as permissões de geolocalização pertencem à categoria perigosa e exigem solicitação em tempo de execução.
A razão para essa abordagem é a proteção da privacidade do usuário. Os dados de localização permitem construir rotas de viagem, determinar locais de trabalho e lazer, bem como identificar a pessoa. Portanto, ambas as plataformas exigem uma explicação transparente no diálogo de solicitação: o aplicativo deve indicar o motivo pelo qual precisa de acesso à geolocalização.
A permissão de geolocalização é necessária para qualquer aplicativo cuja funcionalidade dependa do conhecimento da localização física do usuário. Mapas e navegação, aplicativos de entrega, serviços meteorológicos, redes sociais com geotagging — todas essas categorias de software exigem Location Permission.
Sem essa permissão, o aplicativo não pode determinar as coordenadas do dispositivo por nenhum dos métodos disponíveis: nem pelo módulo GPS, nem pela varredura Wi-Fi, nem pelo posicionamento por torres de celular. O usuário pode revogar a permissão a qualquer momento nas configurações do sistema, após o que o aplicativo deve lidar corretamente com a negação.
De acordo com um estudo do Pew Research Center (2024), cerca de 45% dos usuários revogam o acesso à geolocalização em aplicativos que não a utilizam para sua funcionalidade principal. Isso significa que o desenvolvedor precisa justificar claramente a solicitação e oferecer mecanismos alternativos para aqueles que recusaram o Location Permission.
O GDPR na Europa e a Lei Federal 152-FZ na Rússia exigem a obtenção de consentimento informado para o processamento de dados de localização. O aplicativo não só deve solicitar a permissão por meio do diálogo do sistema, mas também fornecer um aviso separado sobre os propósitos da coleta de dados. A violação desses requisitos acarreta multas de até 20 milhões de euros ou 4% do faturamento anual da empresa.
Se o aplicativo não solicitar Location Permission ou o usuário negar o acesso, o desenvolvedor deve prever um cenário alternativo. Para um aplicativo de mapas, pode ser a inserção manual do endereço; para um aplicativo de entrega — a seleção de uma lista de endereços salvos; para um serviço meteorológico — a determinação da cidade por endereço IP. Graceful degradation (degradação gradual) é uma prática padrão recomendada pelo Google e Apple.
Os níveis de acesso à geolocalização diferem no Android e iOS, embora a ideia geral seja a mesma: quanto mais preciso o acesso, mais rigorosos são os requisitos que a plataforma impõe ao aplicativo.
| Nível de acesso | Android | iOS |
|---|---|---|
| Durante o uso | Apenas quando o aplicativo está ativo | When In Use — apenas no aplicativo |
| Em segundo plano | Always — constantemente, mesmo em segundo plano | Always — requer revisão adicional da App Store |
| Aproximado | ACCESS_COARSE_LOCATION (precisão até 500 m) | Com opção Precision = Off (iOS 14+) |
ACCESS_FINE_LOCATION fornece acesso a coordenadas GPS precisas com margem de erro de até vários metros. Para declarar esta permissão no manifesto, usa-se a constante android.permission.ACCESS_FINE_LOCATION. ACCESS_COARSE_LOCATION, por sua vez, fornece localização aproximada com precisão de até 500 metros com base em dados Wi-Fi e torres de celular.
When In Use permite que o aplicativo receba coordenadas apenas quando está aberto na tela. Always fornece acesso à geolocalização mesmo em segundo plano, mas requer revisão obrigatória da App Store. A partir do iOS 14, o usuário pode desativar separadamente o posicionamento preciso para cada aplicativo através do interruptor Precision.
A solicitação de Location Permission no Android é feita em duas etapas: declaração de permissões no manifesto e solicitação em tempo de execução. A partir do Android 6.0 (API 23), todas as permissões perigosas são solicitadas durante a execução do aplicativo, não durante a instalação.
O primeiro passo é adicionar as permissões necessárias ao arquivo AndroidManifest.xml. Constantes diferentes são usadas para posicionamento preciso e aproximado.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Após a declaração no manifesto, o diálogo do sistema de solicitação de permissão deve ser chamado no código do aplicativo. Vamos ver um exemplo em Kotlin usando Activity Result API.
private val locationPermissionRequest =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
when {
permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
// Permissão concedida
getLocation()
}
permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
// Apenas localização aproximada
getCoarseLocation()
}
else -> {
// Usuário negou
showLocationExplanation()
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
checkLocationPermission()
}
Se o usuário negar o acesso, o sistema Android não permite mostrar o diálogo novamente automaticamente. O desenvolvedor precisa chamar shouldShowRequestPermissionRationale para exibir uma explicação preliminar. Em caso de negação repetida com a marca Never Ask Again, o usuário deve ser redirecionado para as configurações do sistema.
private fun checkLocationPermission() {
when {
ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) ==
PackageManager.PERMISSION_GRANTED -> {
getLocation()
}
ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_FINE_LOCATION) -> {
showRationaleDialog {
requestLocationPermission()
}
}
else -> {
openAppSettings()
}
}
}
A solicitação de Location Permission no iOS requer adicionar chaves especiais ao arquivo Info.plist e chamar métodos da classe CLLocationManager. A Apple dá atenção especial à privacidade, portanto o texto de explicação no diálogo de solicitação deve ser o mais específico possível.
Para solicitar localização no iOS, é necessário adicionar uma ou ambas as chaves ao Info.plist: NSLocationWhenInUseUsageDescription para acesso durante o uso e NSLocationAlwaysAndWhenInUseUsageDescription para acesso em segundo plano. O valor de cada chave é uma string que será mostrada ao usuário no diálogo.
<key>NSLocationWhenInUseUsageDescription</key>
<string>Seu aplicativo precisa da sua localização para mostrar pontos próximos no mapa.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Seu aplicativo precisa de acesso à geolocalização em segundo plano para rastrear a rota.</string>
No código Swift, a solicitação é feita através de uma instância de CLLocationManager. Dependendo do nível de acesso necessário, chama-se requestWhenInUseAuthorization ou requestAlwaysAuthorization.
import CoreLocation
class LocationManager: NSObject, CLLocationManagerDelegate {
private let manager = CLLocationManager()
func requestLocationAccess() {
manager.delegate = self
manager.requestWhenInUseAuthorization()
}
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
switch manager.authorizationStatus {
case .authorizedWhenInUse, .authorizedAlways:
startLocationUpdates()
case .denied, .restricted:
showSettingsAlert()
case .notDetermined:
break
}
}
}
Ao contrário do Android, o iOS não fornece ao desenvolvedor um método para verificar shouldShowRequestPermissionRationale. O próprio sistema decide quando mostrar a explicação. Além disso, no iOS o usuário só pode alterar a permissão através das configurações do sistema — o aplicativo não pode reexibir o diálogo do sistema depois que o usuário fez uma escolha. RequestAlwaysAuthorization primeiro solicita When In Use e, em seguida, após obter o primeiro consentimento, um diálogo separado para acesso em segundo plano.
As melhores práticas com Location Permission ajudam a reduzir as recusas dos usuários e atender aos requisitos das lojas de aplicativos. Google e Apple publicaram recomendações cujo cumprimento aumenta a probabilidade de aprovação do aplicativo.
Não mostre o diálogo de solicitação de Location Permission imediatamente ao iniciar o aplicativo. Um usuário que acabou de abrir o aplicativo ainda não entende por que precisa fornecer acesso à geolocalização. Contextual request significa que o diálogo aparece no momento em que o usuário realmente precisa de um recurso que requer permissão. Por exemplo, ao clicar no botão “Encontrar loja mais próxima”.
Antes do diálogo do sistema, mostre sua própria tela de explicação (pre-permission screen). Nela, explique por que o aplicativo precisa de geolocalização, quais dados são coletados e como serão usados. Depois que o usuário clicar em “Permitir” na sua tela, mostre o diálogo do sistema. De acordo com Appsflyer (2024), essa abordagem aumenta a taxa de aprovação em 25-35%.
O acesso em segundo plano à geolocalização só é necessário para aplicativos que funcionam em segundo plano: navegadores, rastreadores de atividade, aplicativos de entrega. Se seu aplicativo só precisa de coordenadas quando a tela está aberta, solicite When In Use. A App Store rejeitará o aplicativo se Always não for funcionalmente justificado. No Android, o acesso em segundo plano é adicionalmente regulado pela permissão ACCESS_BACKGROUND_LOCATION.
Perguntas frequentes
O aplicativo deve lidar corretamente com a negação e oferecer um cenário alternativo. Por exemplo, inserção manual do endereço ou determinação da cidade por endereço IP. O diálogo do sistema não é mostrado novamente — é necessário redirecionar o usuário para as configurações.
Tecnicamente, sim — o diálogo do sistema pode ser exibido sem uma tela prévia. No entanto, a taxa de aprovação sem explicação é de 30-40%, enquanto com uma tela prévia é de 60-75%. Apple e Google recomendam sempre explicar o motivo da solicitação.
Use ContextCompat.checkSelfPermission com a constante Manifest.permission.ACCESS_FINE_LOCATION. O método retorna PERMISSION_GRANTED ou PERMISSION_DENIED, permitindo determinar o status atual sem chamar o diálogo do sistema.
ACCESS_FINE_LOCATION fornece acesso a coordenadas GPS precisas com erro de 3-10 metros. ACCESS_COARSE_LOCATION fornece localização aproximada com precisão de até 500 metros baseada em Wi-Fi e torres de celular. No Android 12+, o desenvolvedor pode solicitar ambas as permissões simultaneamente.
No Android, para escanear dispositivos BLE é necessário ACCESS_FINE_LOCATION ou ACCESS_COARSE_LOCATION, pois os sinais BLE podem ser usados para triangulação de posição. No iOS, para BLE basta a permissão de Bluetooth — não é necessário Location Permission.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também