Habilitar suporte para geofences e iBeacons
Os serviços de localização permitem adicionar regiões de geofence ou iBeacon relacionadas ao seu app na plataforma Xtremepush. Isso permite que você analise o público do seu aplicativo, visitas aos seus locais e acione notificações quando eles entram/saem/permanecem em seus locais.
Habilitar serviços de localização
Na integração padrão do Android SDK, os Serviços de Localização estão desativados. Para usar recursos de localização, você primeiro precisa adicionar as permissões ao seu app adicionando o seguinte ao arquivo de manifesto do seu app:
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>Depois, você pode ativar o recurso de localização ao inicializar setEnableLocations(true) o Xtremepush SDK no método das onCreate suas atividades:
mPushConnector = new PushConnector.Builder("XPUSH_APP_KEY", "GOOGLE_SENDER_ID")
.setEnableLocations(true)
.create(this);Para ativar o monitoramento geofence e iBeacon individualmente, você pode definir as seguintes opções:
mPushConnector = new PushConnector.Builder("XPUSH_APP_KEY", "GOOGLE_SENDER_ID")
.setEnableGeo(true)
.setEnableBeacons(true)
.create(this);Ajuste fino dos Serviços de Localização
Os métodos listados nesta seção podem ser usados para ajustar os serviços de localização do Xtremepush.
Testamos muitas variações de configurações quanto à precisão e impacto na bateria. As configurações a seguir representam os valores padrão para cada um desses métodos (explicados mais abaixo), que encontramos proporcionam uma precisão muito boa para geofences e iBeacon com baixo impacto na bateria.
.setEnableLocations(true)
.setLocationUpdateTimeout(30)
.setBeaconLocationForegroundTimeout(4.0)
.setBeaconLocationBackgroundTimeout(4.0)
.setBeaconForegroundScanDuration(2.1)
.setBeaconBackgroundScanDuration(2.1)Tempo limite para atualização de localização
O setLocationUpdateTimeout() método é usado para definir o tempo limite de atualização de localização, o que pode melhorar a precisão dos eventos de entrada e saída detectados em regiões de geocerca. Por padrão, uma verificação de localização será realizada a cada 30 segundos.
Definir um valor causará uma verificação adicional do GPS no intervalo especificado em segundos. Por exemplo, chamar setLocationUpdateTimeout(10) fará uma verificação adicional a cada 10 segundos. Esse valor alcança uma precisão muito boa na detecção de geocercas, com algum custo na vida útil da bateria.
Esse parâmetro é configurável para que os desenvolvedores possam encontrar um equilíbrio entre precisão e impacto na bateria.
Para definir uma verificação adicional de GPS em um intervalo de 10 segundos, você deve fazer a seguinte chamada ao inicializar o SDK:
mPushConnector = new PushConnector.Builder("XPUSH_APP_KEY", "GOOGLE_SENDER_ID")
.setEnableLocations(true)
.setLocationUpdateTimeout(10)
.create(this);Modo de baixo consumo
O setLowPowerGeo() método pode ser usado para desativar as verificações adicionais de localização descritas diretamente acima.
Se esse método for chamado com um true parâmetro, nenhuma verificação adicional de localização será realizada. Isso se sobrepõe a qualquer uso do setLocationUpdateTimeout() método.
As verificações de localização são ativadas por padrão. Se desativados ao passar true para esse método, eles podem ser reativados chamando o método novamente com um false parâmetro.
Para ativar o modo geofence de baixo consumo, você faria a seguinte chamada ao inicializar o SDK:
mPushConnector = new PushConnector.Builder("XPUSH_APP_KEY", "GOOGLE_SENDER_ID")
.setEnableGeo(true)
.setLowPowerGeo(true)
.create(this);Tempo limite da varredura do iBeacon
Os setBeaconLocationForegroundTimeout() métodos e setBeaconLocationBackgroundTimeout() são usados para definir o intervalo entre o fim de uma varredura do iBeacon e o início de outra, em segundos. Ele pode ser usado para variar a frequência dos escaneamentos para iBeacons. Esse parâmetro é configurável para que os desenvolvedores possam encontrar um equilíbrio entre a resolução dos eventos beacon e o impacto na bateria. Definir um valor mais baixo pode melhorar a velocidade de detecção de eventos de entrada e saída em regiões cercadas por farol, com algum impacto na bateria.
Os dois métodos permitem a configuração separada do intervalo de varredura do iBeacon para quando o app está aberto em primeiro plano ou rodando em segundo plano. Isso permite que os desenvolvedores reduzam a frequência das varreduras do iBeacon caso o app não esteja aberto, para economizar a vida útil da bateria, se desejado.
O valor padrão é um intervalo de 4 segundos entre as varreduras tanto no modo primeiro plano quanto no segundo plano. Para ativar manualmente os serviços de varredura do iBeacon Xtremepush e definir o intervalo de localização do beacon para 4 segundos, você deve fazer a seguinte chamada ao inicializar o SDK:
mPushConnector = new PushConnector.Builder("XPUSH_APP_KEY", "GOOGLE_SENDER_ID")
.setEnableBeacons(true)
.setBeaconLocationForegroundTimeout(4.0)
.setBeaconLocationBackgroundTimeout(4.0)
.create(this);Duração da varredura do iBeacon
Os setBeaconForegroundScanDuration() métodos e setBeaconBackgroundScanDuration() são usados para definir a duração de cada varredura do iBeacon, em segundos. Esse parâmetro é configurável para que os desenvolvedores possam encontrar um equilíbrio entre precisão e impacto na bateria. Definir um valor mais alto pode melhorar a precisão da detecção de beacons, com algum impacto na bateria.
Os dois métodos permitem a configuração separada da duração de varredura do iBeacon para quando o app está aberto em primeiro plano ou rodando em segundo plano. Isso permite que os desenvolvedores reduzam a duração das varreduras do iBeacon caso o app não esteja aberto, para economizar a bateria, se assim desejarem.
O valor padrão é 2,1 segundos de duração de varredura tanto no modo primeiro quanto em segundo plano. Para ativar manualmente os serviços de varredura do iBeacon Xtremepush e definir a duração da varredura de localização do beacon para 2,1 segundos, você deve fazer a seguinte chamada ao inicializar o SDK:
mPushConnector = new PushConnector.Builder("XPUSH_APP_KEY", "GOOGLE_SENDER_ID")
.setEnableBeacons(true)
.setBeaconForegroundScanDuration(2.1)
.setBeaconBackgroundScanDuration(2.1)
.create(this);Diálogos de Serviços de Localização
Os métodos desta seção podem ser usados para sobrescrever as configurações padrão para as requisições de permissão em tempo de execução no Android 6 e para ativar os serviços de localização de dispositivos.
Solicitação de permissão de localização
O iBeacon e a varredura de localização exigem uma solicitação de permissão em tempo de execução, a partir do Android 6. Por padrão, as requisições de permissão em tempo de execução são ativadas no SDK, para aplicações que usam serviços de localização e rodam no Android 6+. Se essa funcionalidade não for desejada, então setRequestPermissions(false) pode ser usada para desabilitar essas requisições de permissão:
mPushConnector = new PushConnector.Builder("XPUSH_APP_KEY", "GOOGLE_SENDER_ID")
.setEnableLocations(true)
.setRequestPermissions(false)
.create(this);O mesmo método também pode ser usado para personalizar e localizar o texto no diálogo de justificativa de permissão. Essa caixa de diálogo mostra se o usuário inicialmente nega a solicitação de permissão e depois reabre o app. O texto nesse diálogo fornece mais contexto sobre a solicitação de permissão e então permite que o usuário reabra a solicitação novamente. O setRequestPermissions() método também utiliza dois parâmetros adicionais de string, que podem ser usados para personalizar o título e o texto da mensagem do diálogo:
mPushConnector = new PushConnector.Builder("XPUSH_APP_KEY", "GOOGLE_SENDER_ID")
.setEnableLocations(true)
.setRequestPermissions(true, "title", "message")
.create(this);Configurações de localização do dispositivo
Existe uma opção nas configurações do dispositivo Android para ativar ou desativar os serviços de localização. Se essa opção estiver desativada, nenhum dos aplicativos rodando no dispositivo conseguirá verificar a localização do próprio aparelho.
Se os serviços de localização estiverem ativados no SDK Xtremepush, ele verificará se os serviços de localização estão ativados. Se os serviços de localização estiverem desativados no dispositivo, o SDK vai abrir um aviso pedindo ao usuário para ativá-los nas configurações do dispositivo. Este prompt pode ser desativado se essa funcionalidade não for necessária:
mPushConnector = new PushConnector.Builder("XPUSH_APP_KEY", "GOOGLE_SENDER_ID")
.setEnableLocations(true)
.setEnableLocationDialog(false)
.create(this);Não usar localização
Versões do SDK anteriores à 9.0.0
Se você está usando uma versão do SDK anterior à versão 9.0.0, é assim que você teria impedido seu app de solicitar permissão de localização adicionando o seguinte ao seu arquivo de manifestos:
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" tools:node="remove"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove" />