> For the complete documentation index, see [llms.txt](https://docs.caf.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.caf.io/caf-sdk/caf-sdk-pt-br/android/standalone-modules/cafsmartauth/permissions.md).

# Permissões

#### Guia para Implementar e Gerenciar Permissões de Execução para Localização no Seu Android SDK (CafSmartAuth)

No Android, certas permissões, especialmente as relacionadas a dados sensíveis como localização, exigem aprovação em tempo de execução dos usuários. Este guia explica como verificar e solicitar permissões de localização programaticamente no seu SDK, CafSmartAuth, usando o `checkPermissionStatus` função fornecida abaixo.

***

#### Por que o CafSmartAuth Requer Permissões de Localização

O CafSmartAuth requer acesso à localização do usuário como parte de seus recursos de prevenção a fraudes, garantindo uma camada adicional de segurança ao verificar informações baseadas em localização. O Android distingue entre dois tipos de acesso à localização, permitindo que os usuários controlem a precisão dos dados de localização que compartilham:

* **ACCESS\_FINE\_LOCATION**: Necessária para informações precisas de localização via GPS, o que é essencial para detectar atividades potencialmente fraudulentas com alta precisão.
* **ACCESS\_COARSE\_LOCATION**: Fornece dados de localização aproximados com base em redes Wi-Fi e celulares, adequada para verificações básicas de localização.

Com esses níveis de permissão, os usuários podem fornecer o acesso mínimo necessário para a prevenção de fraudes, enquanto o CafSmartAuth garante conformidade com as práticas de privacidade de dados do Android.

***

#### Passo a Passo: Adicionando e Usando `checkPermissionStatus`

1. **Adicione Permissões ao Manifesto**

   No `AndroidManifest.xml`do seu app, inclua ambas as permissões de localização:

   ```xml
   <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
   <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
   ```

   Essas declarações no manifesto permitem que o app solicite essas permissões, mas não as concedem automaticamente.
2. **Defina uma Constante de Código de Solicitação**

   Para identificar a solicitação de permissão, use uma constante para o código de solicitação:

   ```kotlin
    companion object {
        private const val REQUEST_CODE = 1234
    }
   ```
3. **Crie e Use `checkPermissionStatus` para Gerenciar Permissões**

   O `checkPermissionStatus` A função verifica se as permissões foram concedidas e, caso contrário, solicita-as ao usuário. Isso é essencial para a conformidade com o modelo de permissões em tempo de execução do Android, introduzido no Android 6.0 (nível de API 23).

   Aqui está o código e uma explicação de como ele funciona:

   ```kotlin
    private fun checkPermissionStatus() {
        // Verifique a permissão ACCESS_FINE_LOCATION
        if (ContextCompat.checkSelfPermission(
                this,
                Manifest.permission.ACCESS_FINE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED
        ) {
            // Solicite a permissão ACCESS_FINE_LOCATION se ela ainda não tiver sido concedida
            ActivityCompat.requestPermissions(
                this,
                arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
                REQUEST_CODE
            )
        }

        // Verifique a permissão ACCESS_COARSE_LOCATION
        if (ContextCompat.checkSelfPermission(
                this,
                Manifest.permission.ACCESS_COARSE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED
        ) {
            // Solicite a permissão ACCESS_COARSE_LOCATION se ela ainda não tiver sido concedida
            ActivityCompat.requestPermissions(
                this,
                arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION),
                REQUEST_CODE
            )
        }
    }
   ```

   * `ContextCompat.checkSelfPermission`: Isso verifica se o app tem uma permissão específica. Se a permissão não tiver sido concedida, retorna `PackageManager.PERMISSION_DENIED`.
   * `ActivityCompat.requestPermissions`: Solicita ao usuário a(s) permissão(ões) especificada(s), exibindo uma caixa de diálogo do sistema para aprovação.
4. **Gerencie o Resultado da Permissão**

   Ao solicitar permissões, você pode tratar o resultado em `onRequestPermissionsResult` para gerenciar as respostas do usuário de forma adequada.

   ```kotlin
    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (requestCode == REQUEST_CODE) {
            if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                // A permissão foi concedida.
            } else {
                // A permissão foi negada.
            }
        }
    }
   ```
5. **Chame `checkPermissionStatus` no Momento Certo**

   Você pode querer chamar `checkPermissionStatus` dentro de `onResume` ou quando a funcionalidade de localização for acionada, garantindo que as permissões sejam verificadas antes de serem necessárias.

***


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.caf.io/caf-sdk/caf-sdk-pt-br/android/standalone-modules/cafsmartauth/permissions.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
