# Android

SPIDX Button é uma biblioteca Android concebida para ser integrada em uma Aplicação Android. Ela fornece uma View de Botão para ser usada na aplicação e uma classe que comunica com o servidor SPIDX para recuperar um Link Dinâmico e ID para a transação definida por um Caso de Uso.

## Requisitos

* Versão mínima do Android

  > Android 8.0 (SDK 26), “Oreo”.
* Ambiente de desenvolvimento

  > Recomendado usar o IDE Android Studio

## Configuração

Para a biblioteca funcionar corretamente, a seguinte configuração é necessária:

### Importar biblioteca .aar

* Para importar a biblioteca .aar na sua aplicação, é recomendado seguir a [documentação oficial do Android](https://developer.android.com/studio/projects/android-library).

### Permissão de internet

* O uso do botão SPIDX requer que a aplicação forneça conexão com a internet. Dentro do `AndroidManifest.xml` arquivo, adicione a permissão de acesso à internet:

  ```xml
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  	package="com.griaule.spidxbutton">
  	...
  	<uses-permission android:name="android.permission.INTERNET" />
  	...
  </manifest>
  ```

### Dependências

* Algumas dependências são requeridas para usar o SPIDX Button. Dentro do `build.gradle` arquivo, em `:app` escopo, adicione as seguintes dependências:

  ```gradle
  dependencies {
  	...
  	implementation 'com.squareup.retrofit2:retrofit:2.9.0'
  	implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
  	implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'
  	implementation 'com.squareup.okhttp3:logging-interceptor:3.13.1'
  }
  ```

## Classes e Métodos

A biblioteca fornece a Classe `SpidxAuth` que possui dois parâmetros: `apiKey` e `useCaseName`, com dois métodos para recuperar dados da API SPIDX. Os métodos são descritos abaixo (padrão Kotlin):

* `collection(callback: Callback)`
  * Este método usará `apiKey` e `useCaseName` para recuperar o Link Dinâmico e o ID da Transação da API SPIDX. A resposta é descrita na seção abaixo.
* `verification(spidx: String, callback: Callback)`
  * Este método usará `apiKey`, `useCaseName`, e `spidx` para recuperar o Link Dinâmico e o ID da Transação da API SPIDX. A resposta é descrita na seção abaixo.

### Respostas

Esses métodos usam o objeto `callback` que implementa a interface `Callback`. Esta interface possui dois métodos:

* `onSuccess(useCaseData: UseCaseData)`
  * Este método é chamado quando a requisição tem sucesso e retorna o objeto `useCaseData`, do tipo `UseCaseData`. Este objeto possui dois campos: `dynamicLink`, que é o link dinâmico para a transação, e `transactionID`, que é o id da transação.
* `onFailure(useCaseError: UseCaseError)`
  * Este método é chamado quando a requisição falha e retorna o objeto `useCaseError`, do tipo `UseCaseError`. Este objeto possui três campos: `type`, que é o tipo do erro, `code`, que é o código do erro, e `message`, que é a mensagem descrevendo o erro.

## Uso

É recomendado usar a View de Botão fornecida juntamente com a biblioteca SPIDX Button. Com o Link Dinâmico recebido, é possível criar um *Intent* que chamará o app SPIDX.

### Adicione o botão no layout da sua aplicação

* No layout da aplicação, adicione o seguinte código:

  ```xml
  <com.griaule.spidxbutton.views.SpidxButton
   android:id="@+id/spidx_button"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>
  ```

### Configure o listener de clique do botão e chame a API SPIDX:

Alguns exemplos de uso das classes e métodos em Kotlin e Java são fornecidos abaixo:

* Em Kotlin, use:

  ```kotlin
  val spidxButton = findViewById<SpidxButton>(R.id.spidx_btn)
  spidxButton.setOnClickListener {
  	SpidxAuth("apiKey", "useCaseName")
  		.collection(object : Callback {
  			override fun onSuccess(useCaseData: UseCaseData) {
  				// Trate os dados de sucesso retornados. Por exemplo, criando um Intent e chamando startActivity()
  				...
  			}

  			override fun onFailure(useCaseError: UseCaseError) {
  				// Trate o erro retornado
  				...
  			}
  		})
  }
  ```
* Em Java, use:

  ```java
  SpidxButton spidxButton = findViewById(R.id.spidx_button);
  SpidxAuth spidxAuth = new SpidxAuth("apiKey", "useCaseName");
  spidxButton.setOnClickListener(view -> spidxAuth.collection(new Callback() {
  	@Override
  	public void onSuccess(@NotNull UseCaseData useCaseData) {
  		// Trate os dados de sucesso retornados. Por exemplo, criando um Intent e chamando startActivity()
  		...
  	}

  	@Override
  	public void onFailure(@NotNull UseCaseError useCaseError) {
  		// Trate o erro retornado
  		...
  	}
  }));
  ```


---

# Agent Instructions: 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:

```
GET https://docs.griaule.com/sdks/spidxbutton/spidxbuttonandroid.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
